从安装redis_fdw到简单操作的步骤

在已经安装了PostgreSQL9.5和Redis的环境中,我们将引入redis_fdw并尝试对Redis上的外部表进行简单操作。

安装Hiredis

要安装redis_fdw,需要首先安装Redis的C客户端库Hiredis。

$ git clone https://github.com/redis/hiredis.git
$ cd hiredis/
$ make
$ su
# make install
# echo "/usr/local/lib" > /etc/ld.so.conf.d/hiredis.conf
# ldconfig
# ldconfig -p | grep hiredis
# exit

安装redis_fdw

如果使用的是PostgreSQL的版本9.5,那么需要安装9.5用的redis_fdw分支(REL9_5_STABLE)。

$ git clone https://github.com/pg-redis-fdw/redis_fdw.git
$ cd redis_fdw
$ git checkout -b REL9_5_STABLE origin/REL9_5_STABLE
$ make USE_PGXS=1 PG_CONFIG=~/pgsql/9.5/pgsql-9.5.2/bin/pg_config
$ make USE_PGXS=1 PG_CONFIG=~/pgsql/9.5/pgsql-9.5.2/bin/pg_config install
    • PostgreSQLのbinディレクトリにPATHが通っている場合は、PG_CONFIGの指定は不要です。

 

    PG_CONFIGを指定する場合、~/pgsql/9.5/pgsql-9.5.2の部分はPostgreSQLインストール先のパスで置き換えます。

注册redis_fdw并创建外部表

启动PostgreSQL和Redis后,使用psql登录到PostgreSQL,并创建一个简单的外部表来存储键和值。

-- redis_fdwをPostgreSQLに登録
CREATE EXTENSION redis_fdw;

-- Redisの外部サーバを定義 (Redisのアドレスとポート番号をオプションで指定)
CREATE SERVER redis_server
FOREIGN DATA WRAPPER redis_fdw
OPTIONS (address '127.0.0.1', port '6379');

-- Redis上の外部テーブルを作成
CREATE FOREIGN TABLE redis_db0 (key text, val text)
SERVER redis_server
OPTIONS (database '0');

-- Redisの外部サーバのユーザマップを定義
CREATE USER MAPPING FOR PUBLIC
SERVER redis_server
OPTIONS (password 'secret');

对Redis中外部表的操作

确认简单的SQL语句在Redis上针对外部表按预期进行操作。

-- PostgreSQL9.3以降では、外部テーブルに対してINSERTなどの更新系SQLが実行可能
-- 10件のデータを挿入
INSERT INTO redis_db0
SELECT 'key' || num::TEXT, 'val' || num::TEXT
FROM generate_series(1, 10) num;

-- 検索条件どおりに1件検索できることを確認
SELECT * FROM redis_db0 WHERE key = 'key3';
 key  | val  
------+------
 key3 | val3
(1 row)

-- 1件のデータを更新
UPDATE redis_db0 SET val = 'val99' WHERE key = 'key9';

SELECT * FROM redis_db0 WHERE key = 'key9';
 key  |  val  
------+-------
 key9 | val99
(1 row)

-- 9件のデータを削除
DELETE FROM redis_db0 WHERE key <> 'key7';
DELETE 9

SELECT * FROM redis_db0 WHERE key = 'key9';
 key | val 
-----+-----
(0 rows)

而且,在与Redis直接连接之后,我们要确认通过上述操作能够看到外部表中剩下的一条数据。

$ redis-cli KEYS "key*"
1) "key7"
广告
将在 10 秒后关闭
bannerAds