Jim redis extension documentation. Overview ~~~~~~~~ The redis extension is a very simple extension to provide fast client access to redis (https://redis.io/) via the hiredis library (which must be available when building). Usage ~~~~~ The redis extension exports an Object Based interface. In order to open a connection, a stream sock must be open to the redis server. e.g. set r [redis [socket stream localhost:6379]] Or to connect via the unix domain socket: set r [redis [socket unix /tmp/redis.sock]] The [redis] command returns a handle, that is a command name that can be used to perform operations on the redis instance. A real example: . package require redis 1.0 . set r [redis [socket stream localhost:6379]] ::redis.handle4 . $r KEYS a* abc . $r SET def 3 OK . $r INCR def 4 . $r HMSET hash a 1 b 2 c 3 OK . $r HGETALL hash a 1 b 2 c 3 Note that redis commands are shown here in uppercase, but they are accepted in a case insensitive manner. The redis connection is very thin wrapper around the redis protocol. It simply formats the command according the redis protocol and converts the response into the appropriate Tcl format. Note that all values are binary strings, so keys and values in utf-8 format will be stored and returned exactly. Return values ~~~~~~~~~~~~~ The response from redis contains a type, and these types are handled as follows: * integer - returns the integer result * string - returns the string result * array - returns a list of elements (where each element is a redis type) * null - returns the empty string * status - returns the status as a string * error - returns an error with the message as the value The read subcommand ~~~~~~~~~~~~~~~~~~~ While most redis commands return an immediate response, SUBSRIBE and PSUBSCRIBE return multiple results over time. These responses can be (synchronously) read with the 'read' subcommand, typically in conjunction with readable. For example . $r SUBSCRIBE chan subscribe chan 1 . $r read message chan PONG If no message is received, the read command will wait forever. The message is returned as: message The readable subcommand ~~~~~~~~~~~~~~~~~~~~~~~ Like normal aio sockets, the readable subcommand is supported to invoke the given script when the underlying socket is readable. $r SUBSCRIBE channel $r readable { puts [$r read] } # wait forever, reading messages from the channel vwait forever To remove the callback, invoke with no arguments (this is different from aio readable). # Remove the callback $r readable The close subcommand ~~~~~~~~~~~~~~~~~~~~ The 'close' command is supported to close the connection. This command is equivalent to deleting the command with: rename $r ""