From: | Leon Dang <ldang(at)nahannisys(dot)com> |
---|---|
To: | Andreas Kretschmer <akretschmer(at)spamfence(dot)net>, pgsql-general(at)postgresql(dot)org |
Subject: | Re: Request for review of new redis-fdw module |
Date: | 2015-01-28 19:19:25 |
Message-ID: | 54C9363D.4040308@nahannisys.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Andreas Kretschmer wrote on 01/28/2015 03:36 AM:
> > I've implemented a completely new Redis FDW module which has little to do with
> > github.com/pg-redis-fdw/redis_fdw; although I did take some inspiration from in
> > on how the tables were to be designed but most I got from looking at the
> > oracle-fdw.
> >
> > My redis-fdw implementation supports read and write to the Redis backend, so
> > you can do insert, update, and delete. e.g. you can define a hash table as:
>
> is it possible to write multiple row's into the redis? something like
>
> insert into foreign_redis_table select * from big_table
>
Thanks for pointing this out. I had a small bug which didn't let it
succeed, but now it's been fixed and committed; I've also added a
bulkdata.sql test script in the code to show an example.
> Anyway, thx, compiled and installed (just for fun, i'm not familiar with
> redis, and i'm not a coder)
>
Redis is great for session management as it allows you to set an expiry
for each key. So by using redis_fdw, you don't need to do multiple
queries to determine of the session is still valid. e.g.:
-- use a string (key-value) dataset for user sessions
CREATE FOREIGN TABLE rsessions(
sessid TEXT,
value TEXT,
expiry INT
) SERVER localredis
OPTIONS (tabletype 'string');
ALTER FOREIGN TABLE rsessions ALTER COLUMN sessid OPTIONS (ADD param 'key');
-- a user table in postgres, can contain a whole bunch of other fields.
CREATE TEMP TABLE users (
userid INT,
username TEXT,
sessid TEXT
);
--
-- get user's details at the same time as determining if they're session
is still valid
--
WITH u AS (SELECT * FROM users WHERE username = 'foo')
SELECT u.*, r.value, r.expiry
FROM rsessions r, u
WHERE r.sessid = (SELECT u.sessid FROM u);
If the user's session is still valid then a row will be returned (Redis
automatically destroys the key on expiry).
--
-- to reset the expiry timeout for the user
--
UPDATE rsessions SET expiry = 40 WHERE sessid = $1;
Leon
From | Date | Subject | |
---|---|---|---|
Next Message | George Silva | 2015-01-28 19:49:15 | Re: Request for review of new redis-fdw module |
Previous Message | Andreas Kretschmer | 2015-01-28 11:36:58 | Re: Request for review of new redis-fdw module |