Gabriel Blanchard wrote:
Attached is two new modules. Apologies ahead of time for submitting this as a tgz.
rlm_redis allows you to connect and query a redis key-store database. Basically same idea as memcached except the keys don't expire if you allow them to.
I like redis, but haven't had much time to play with it. It looks interested.
rlm_redis requires a redis server instance and the hiredis libraries to be installed https://github.com/antirez/hiredis
Preferably redis should be running version 2.2 as it allows you to expire keys.
rlm_rediswho is a module that is similar to rlm_radwho, it obviously uses the rlm_redis module. What it does is that it basically "dumps" all the accounting data/sessions into this key store database. Once a user has so many sessions (defined by trim-count) rlm_radwho will start trimming out old data. If there is no update for said user for expiry-time, the redis server itself will expire the key.
That looks very useful.
I anticipate the rlm_redis module could be used for something else, since it is _considerably_ faster than any sql module (about 100,000 queries per second) . But I thought that this was perfect for a radwho module as it allows you to expire stale sessions automatically, therefore the db won't grow an insane amount.
Exactly. It will use a lot of memory, but for ~100K users, it shouldn't use more than a 1G. And memory is cheap these days.
Obviously this is all work in progress, but it appears to run stable. It compiles clean on my Mac but may need some configure script magic to make it a little more portable.
It looks good. Some comments: - please use "github" to fork the freeradius repository - add the files to the v2.1.x branch: rlm_redis/Makefile.in, configure.in, rlm_redis.[ch] rlm_rediswho/Makefile.in, configure.in, rlm_rediswho.c - send me a "pull" request, or just email me, and I can pull the changes over. - re-creating the "configure" script will be done for the next release - I suggest reformatting the code to follow the rest of the FreeRADIUS programming conventions - the rediswho_expand() function is horrible. Instead, see the function xlat_client() in src/main/mainconfig.c. It's smaller, simpler, and more capable. - some sample configuration / documentation would be good, but not required. :) - a Perl script to replace "radwho" would be spectacular. The redis DB looks to be very interesting. A fast key-value store has a lot of usefulness. Alan DeKok.