博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis_fdw使用简介
阅读量:4041 次
发布时间:2019-05-24

本文共 2678 字,大约阅读时间需要 8 分钟。

转载地址:http://coolcodes.tech/tech/d0c2d2254836b3ebb92c769e576028a

建议大家去原始地址查看,原始地址还有很多作者的原创博文,值得推荐

Redis FDW(Foreign Data Wrapper)为Dave&Andrew实现的Postgresql的FDW扩展插件,可以直接在postgresql里访问redis数据库,支持Posgreql9.1~9.6。

1、安装

系统环境:Fedora25 / postgresql9.5.5 / redis3.0.6 (postgresql&redis均通过dnf安装)
1) 根据个人postgresql版本的clone对应的分支代码:git clone -b REL9_5_STABLE :pg-redis-fdw/redis_fdw.git
2) 编译安装:

cd redis_fdw/ 
make USE_PGXS=1
make USE_PGXS=1 install

如果提示报错:/usr/lib/rpm/redhat/redhat-hardened-cc1 No that file and directory,运行dnf install redhat-rpm-config -y即可。

OK,安装完成。

2、实验

假设一个应用场景:在postgresql里有个表categories记录不同分类下条目的数量:

CREATE TABLE categories 
(
catid character varying(32) NOT NULL, --主键
cname character varying(64), --分类名称
nums integer, --条目数量
CONSTRAINT categories_pkey PRIMARY KEY (catid)
)

当这个表里的数据变化时,通过触发器自动更新redis里的catid--->nums映射。

准备工作

postgres=# CREATE EXTENSION redis_fdw;    --创建redis_fdw扩展 
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
-----------+---------+------------+--------------------------------------------------
redis_fdw | 1.0 | public | Foreign data wrapper for querying a Redis server
-- 创建需要关联的redis服务器
postgres=# CREATE SERVER redis_server
FOREIGN DATA WRAPPER redis_fdw
OPTIONS (address '127.0.0.1', port '6379');
postgres=# \des
List of foreign servers
Name | Owner | Foreign-data wrapper
--------------+----------+----------------------
redis_server | postgres | redis_fdw
--创建redis中存储catid/nums映射的虚拟表
postgres=# CREATE FOREIGN TABLE rd_categories (key text, val text)
SERVER redis_server
OPTIONS (database '0');
postgres=# \d
List of relations
Schema | Name | Type | Owner
--------+---------------+---------------+----------
public | categories | table | postgres
public | rd_categories | foreign table | postgres

创建触发器:

CREATE OR REPLACE FUNCTION public.insert_new_item() 
RETURNS trigger AS
$BODY$
begin
insert into rd_categories values(NEW.catid, 0);
return NEW;
end
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.insert_new_item()
OWNER TO postgres;
CREATE TRIGGER new_category
AFTER INSERT
ON public.categories
FOR EACH ROW
EXECUTE PROCEDURE public.insert_new_item();

测试:

insert into categories values('123', 'ces', 0);    --插入一条数据

在redis里查看:

[root@w1 redis_fdw]# redis-cli 
127.0.0.1:6379> keys *
1) "123"
127.0.0.1:6379> get 123
"0"

参考
【1】
【2】

你可能感兴趣的文章
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
android 代码实现圆角
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming 输出每一行句子的第三个单词
查看>>