Hi, I'm trying to make a new Redis driver for Mojolicious that makes sense. Me and Marcus Ramberg has been maintaining Mojo::Redis, but I see some issues with the API:
* No blocking support * Really poor error handling * Trying to be clever with BLPOP and SUBSCRIBE, using an overloaded on() method * Some really weird bugs that that I can't seem to figure out (Got one project at work which fail on random) * Public methods that is confusing: connect(), connected(), disconnect() (?), protocol_redis() and timeout() So now I want to make a new version that Makes Sense (tm). The project is currently just a branch under the old mojo-redis repo: https://github.com/marcusramberg/mojo-redis/tree/v2 # What I need help with 1. Look if the API makes sense. 2. Look at the code to see if it makes sense. 3. Tell me when something is awkward or plain wrong. 4. Figure out if ->execute() makes sense and/or if it could be replace with something "nicer" I often do many commands at once, so what execute() fix is this: Mojo::IOLoop->delay( sub { my ($delay) = @_; $redis->get(foo => $delay->begin); $redis->get(bar => $delay->begin); $redis->get(baz => $delay->begin); }, sub { my ($delay, $foo_err, $foo, $bar_err, $bar, $baz_err, $baz) = @_; # ^ ONE MILLION ARGUMENTS!! }, ); 5. Does it make sense for one $redis object to have multiple connections to the database? This is one of the things I built in to the new module: blpop(), subscribe(), ... will make a new connection to the database instead of user of the module need to remember which method is blocking or take over the connection. But does it really make sense? 6. I need a method for UNSUBSCRIBE The module inherit from Mojo::EventEmitter, so I can't really use the unsubscribe() method to UNSUBSCRIBE from channels. Got an idea for an alternative way, or some fancy hack to make it work with unsubscribe()? I've been considering $redis->unsubscribe(message => $channel_name); but it kind of breaks the signature. 7. Do Mojo::Redis2 really need "encoding" attribute? Why isn't this always UTF-8? I don't get the encoding attribute, but I kept it because of legacy from the other redis modules. 8. What do you think about pipelined()? Please have a look at https://github.com/marcusramberg/mojo-redis/blob/v2/t/pipelined.t 9. ??? # What is done (might be redesigned though) * I got basic redis methods working blocking and non-blocking * I got (p)subscribe methods working and (p)message events * I got pipelining working. -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.
