Redis Loadable Modules System(antirez.com) |
Redis Loadable Modules System(antirez.com) |
What kind of modules did you have in mind when designing this? Are any of the below possible?
* ldap backend login system
* multi-tenant redis
* alternate db format/file system.
* implement a new redis data type. say built-in date support
* can i implement new commands and operators on said data types
An of course, thanks for this fantastic software. We use it everyday. Will read in more detail about this over the weekend :-)
I work for Redis Labs, and over the course of the past few weeks we've experimented with some modules using the API. Some of the things we did that might answer some of your questions:
a PAM based authentication module, which IIRC can plug into LDAP potentially.
A bloom filter implementation on top of bitmaps.
An inverted index that doesn't use existing data types but rather creates compressed indexes directly using redis strings (I wrote that one personally BTW)
An API to store images on redis and retrieve them resized or cropped.
So right now the only way to create new data types is to piggyback strings as raw memory, but the final version of the API will include actually registering new data types.
You can see the modules we've released here: https://github.com/RedisLabsModules/
This breaks my normal browsing habit of opening new tabs as I see something that interests me, but waiting until I finish skimming the list to read.
Yes, pam-ldap / pam-sssd / pam-winbind plug into various LDAP implementations (plain LDAP / ActiveDirectory) and work transparently with all PAM clients.
My understanding from the talk was:
* already available: strings DMA, that you can use for new data types
* in progress but soon (like, a few weeks): commands pre-hooks, that you can use e.g. for auth
* I assume soon (but I don't recall, it could be already available): operations on new data types
* I don't think I've heard anything about alternate db format, but maybe you can think of creative ways of mixing pre-hooks and strings DMA
* I'm not sure what you have in mind about multi-tenant, but I guess you can implement some primitives in a way similar to auth
This is great to see. Instead of cluttering up the core engine with junk people can mix in their own functionality.
Are there plans for that? It's probably possible to do most of that with this module system but you'd have to serialize the data structure into a string and "type X" wouldn't return your custom data structure type.
Shows some sample modules from Redis Labs called RedisEx, pretty useful stuff (although most of these should really be in Redis by now but at least it's an option to include as modules).
This exactly the point of the module system. You don't need to either convince antirez to accept/implement a new feature, or fork redis if he doesn't agree. It will make the dynamics of redis much more interesting IMO
This custom implementation was pretty good: http://blog.togo.io/how-to/adding-interval-sets-to-redis/
I think the only reason we don't is that deployment and testing isn't straightforward. Fingers crossed antirez will get this right.
Net result is it's very hard to read.
I tried Safari's reader mode, but that was even worse. Because all formatting comes from happenstance in the <pre> tag reader mode loses all formatting. The entire article (and code!) becomes one long block of text.
I'm continually amazed at people's attempts to reinvent text layout in the browser.
Agreed.
I don't recommend you try to read pg's essays, they will make you very angry.
Just because the author created Redis doesn't mean the site isn't badly designed.
But I hope some people see them and work on the issue.
Sometimes, if enough other people agree, these kind of comments get voted up. I guess this issue didn't annoy most people enough to get the up votes.
I love coding in public spaces. Life acts as a very good white noise
Probably helps that I'm fairly scrawny though.
edit: woops, looks like someone submitted this at the same time. In any case, working offline also forces you to reign in your app dependencies.