PostgreSQL 9.5 连接redis及其使用

今天有部分数据被同事放到redis上面了,需要同步过来。发现pg有连接redis插件,就参考德哥的文章()安装了一下,不过也遇到一些原文没有遇到问题。下面是我的安装过程:

首先redis_fdw有不同的branch,要根据自己的pg版本下载不同的branch

这里下载的是

redis_fdw-REL9_5_STABLE.zip

redis相关的库

hiredis-master.zip

解压后安装

cd hiredis

make

make PREFIX=/data/redis_fdw/hiredis_bin install

修改redis_fdw的Makefile

vi Makefile

# 末尾追加

LDFLAGS += -L/data/redis_fdw/hiredis_bin/lib

安装redis_fdw

source /home/pg9.5.2/.bash_profile

make USE_PGXS=1

参考德哥的博客安装的,死活报如下错误

redis_fdw.c: In function ‘redis_fdw_handler’:

redis_fdw.c:276: warning: assignment from incompatible pointer type

redis_fdw.c: In function ‘redisGetForeignPaths’:

redis_fdw.c:797: error: too many arguments to function ‘create_foreignscan_path’

redis_fdw.c: In function ‘redisGetForeignPlan’:

redis_fdw.c:833: error: too many arguments to function ‘make_foreignscan’

make: *** [redis_fdw.o] Error 1

反复换了各种版本redis_fdw的branch还是报错,其实上面的意思

上述的错误是指对应行的函数参数多了,我们删除几个,空值的参数

第一个函数删除一个NULL参数

第二个函数删除两个NIL参数

再次编译通过(不要问我为什么,就是这么简单:))

make USE_PGXS=1 install

继续安装

[pg9.5.2@postgres ~]$ psql -dpostgres -Upostgres -p5432

psql (9.5alpha2)

Type "help" for help.

postgres=# create extension redis_fdw;

ERROR:  could not load library "/opt/pgsql9.5.2/lib/redis_fdw.so": libhiredis.so.0.12: cannot open shared object file: No such file or directory

修改库地址

shared_preload_libraries = '/opt/pgsql9.5.2/lib/redis_fdw'   

启动还是报错

[pg9.5.2@postgres pg9.5.2data]$ FATAL:  XX000: could not load library "/opt/pgsql9.5.2/lib/redis_fdw.so": libhiredis.so.0.12: cannot open shared object file: No such file or directory

LOCATION:  internal_load_library, dfmgr.c:239

把这些库考进来

cp * /opt/pgsql9.5.2/lib/  

启动依然报上面的错误

修改权限:chown pg9.5.2:pg9.5.2 *

启动成功

[pg9.5.2@postgres pg9.5.2data]$ pg_ctl restart

pg_ctl: PID file "/data/pg9.5.2data/postmaster.pid" does not exist

Is server running?

starting server anyway

server starting

[pg9.5.2@postgres pg9.5.2data]$ LOG:  00000: redirecting log output to logging collector process

HINT:  Future log output will appear in directory "pg_log".

LOCATION:  SysLogger_Start, syslogger.c:622

继续操作

[pg9.5.2@postgres ~]$ psql -dpostgres -Upostgres -p5432

psql (9.5alpha2)

Type "help" for help.

postgres=# create extension redis_fdw;

CREATE EXTENSION

postgres=# CREATE SERVER redis_server

postgres-# FOREIGN DATA WRAPPER redis_fdw

postgres-# OPTIONS (address '127.0.0.1', port '6379');

CREATE SERVER

postgres=# CREATE FOREIGN TABLE redis_db0 (key text, val text)

postgres-# SERVER redis_server

postgres-# OPTIONS (database '0');

CREATE FOREIGN TABLE

postgres=# CREATE USER MAPPING FOR PUBLIC

postgres-# SERVER redis_server

postgres-# OPTIONS ();

ERROR:  syntax error at or near ")"

LINE 3: OPTIONS ();

                 ^

如果是无密码就写成空,但password参数还是需要的

postgres=# CREATE USER MAPPING FOR PUBLIC

postgres-# SERVER redis_server

postgres-# OPTIONS (password '');

CREATE USER MAPPING

postgres=# CREATE FOREIGN TABLE myredishash (key text, val text[])

postgres-# SERVER redis_server

postgres-# OPTIONS (database '0', tabletype 'hash', tablekeyprefix 'pack_config:');

CREATE FOREIGN TABLE

postgres=# select * from myredishash limit 10;

                    key                    |                                                val

-------------------------------------------+---------------------------------------------------

------------------------------------------------

 pack_config:2160070603:app:15158180750    | {1,"2016-06-08 15:46:23"}

 pack_config:2160150608:app:18970345322    | {1,"2016-06-11 13:20:24"}

 pack_config:2160150608:app:13777834990    | {1,"2016-06-16 15:09:18"}

 pack_config:2160320622:app:13857143019    | {0,"2016-06-24 15:40:01"}

 pack_config:2160070603:app:13575478184    | {1,"2016-06-04 19:23:06"}

 pack_config:2160050527:app:13023698286    | {1,"2016-06-02 07:41:49"}

 pack_config:2160150608:app:15382332310    | {4,"2016-06-09 08:15:12"}

 pack_config:2160220616:wechat:13867456883 | {1,"2016-06-24 13:14:13",2,"2016-06-24 13:14:19",4

,"2016-06-24 13:14:30"}

 pack_config:2160150608:app:13588335935    | {2,"2016-06-11 15:32:51",1,"2016-06-11 15:33:33"}

 pack_config:2160150608:app:18755998181    | {1,"2016-06-16 09:53:42",2,"2016-06-16 09:53:45",3

,"2016-06-16 09:53:46",4,"2016-06-16 09:53:48"}

(10 rows)

postgres=# select * from myredishash where key like '%15158180750%';

                  key                   |            val            

----------------------------------------+---------------------------

 pack_config:2160070603:app:15158180750 | {1,"2016-06-08 15:46:23"}

(1 row)

postgres=# select count(*) from myredishash    

;

 count 

-------

    10

(1 row)

参考文章:

时间: 2024-09-17 23:14:04

PostgreSQL 9.5 连接redis及其使用的相关文章

DOCKER简明教程 : 通过容器连接REDIS数据库

序言 本文重点讲解了如何通过Redis的官方镜像和Docker容器来搭建redis-cli,并将其连接到Redis镜像.首先要跟大家简单介绍一下Redis,这是一个键值存储系统,除了对场景进行缓存之外,Redis还提供了很多强大的功能,因此也目前是非常受欢迎的一个数据库. Docker镜像仓库简介 大家可以在Docker Hub里搜索到目前所有的主流应用和服务的镜像,像Python语言.MySQL数据库等等镜像在Docker Hub里面都有.而且Docker Hub里面的镜像数量非常多,不管我们

php连接redis的应用实例

对于大型网站来说,redis是非常受欢迎的,运用redis缓存之后,网站瞬间可以提速n倍.那么php如何连接redis呢,下面是一个入门的范例代码. <?php $redis = new Redis(); //创建一个对象 $redis->connect('127.0.0.1',6379); //连接redis $redis->select(0); //选择数据库(默认16个数据库,0-15,这个值可以在配置文件修改.) $redis->set('a1', 'www.daixiao

使用Jedis连接Redis

使用Jedis连接redis跟我们使用jdbc连接数据库特别向,话不多说,直接上代码. 需要引入的jar包 这里我建的是maven工程,pom坐标配置如下 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.0</version> </dependency> 代码 package co

spring-java项目中连接redis数据库

最近由于项目需要,要从redis数据库中查询一些数据,还没有了解过redis,只好硬着头皮上阵,记录一下连接过程: 1.需要导入两个jar包:jedis.jar,spring-data-redis.jar,maven中配置如下: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.0</version&

用 ServiceStack 连接 redis 的一些问题

问题描述 1.为什么我的redis会运行一段时间后就连接不上,2,我就2,3个程序在连接这个redis,为什么redis的connectedclients有十几个?我的连接如下,在程序启动时候连接publicMyRedisHandler(){if(prcm==null)CreateManager();} 我是没有调用Disposable,但是我也没有很多程序去连接啊 解决方案 解决方案二:看你问题2,就知道为啥问题1,所以1忽略,然后你的问题2,不知道你的MyRedisHandler是否会被多次

Redis总结笔记(二):C#连接Redis简单例子_Redis

注:C#在调用Redis是不要使用ServiceStack.Redis驱动的4.0版本,因为这个版本已经商业化了,会出现每小时6000条数据的限制 1.引用驱动 复制代码 代码如下:     using ServiceStack.Redis; 2.数据库连接 复制代码 代码如下:     RedisClient client;             //连接服务器   6379是redis的默认端口             client = new RedisClient("127.0.0.1

windows系统连接redis数据库简单命令

1.首先是下载redis在windows下的文件 然后解压出来放到一个目录下,开启一个redis服务  redis包下载 redis-server.exe redis.conf   //进入redis目录 开启redis服务命令 2.重新开启一个cmd命令窗口开始链接redis服务 redis-cli.exe -h 192.168.12.21  //要连接的redis服务器 auth  密码  //auth + 密码 连接进入redis

c#连接Redis缓存数据库与Redis的安装与配置

  Redis是一个不错的缓存数据库,读取数据速度效率都很不错.今天大家共同研究下redis的用法.结合网上的资料和自己的摸索,先来看下安装与配置把. 咱们主要看在WINDOWS上怎样使用REDIS数据库. 下载地址:https://github.com/dmajkic/redis/downloads 1. 选择一个版本进行下载,压缩包中包括32位和64位的安装工具.我们这里使用32位的. 下载解压后的文件如下图: 3.打开服务器端 通过CMD命令行打开服务器端,首先通过命令行转到d:redis

NODEJS连接REDIS/MYSQL

问题描述 哪位大侠提供window下的NODEJS和REDIS.MYSQL的搭建流程 解决方案 解决方案二:还有NODEJS和ZeroMQ的例子解决方案三:不清楚,顶一下解决方案四:github上面有很多库的,自己可以去找一下