• MULTI … EXEC (Notice: 2 methods to handle exceptions) (1. wrong command: return wrong directly after exec) (2. wrong syntax: execute each command)
  • WATCH key [key…] (watch key(s), if these keys has been modified before transaction, abort this transaction. watch will be canceled after EXEC) (Notice: if a key is removed because of EXPIRE, watch wouldn’t regard it changed)


  • EXPIRE key time (remove this key after time second(s))
  • TTL key (see how long will key be alive)
  • PERSIST key (cancel EXPIRE, GET or GETSET can also do this)

sort (result is list, n+m*log(m))

  • SORT key [ALPHA] [DESC] [LIMIT offset count] (sort set, sorted set, list by asc, if ALPHA is set, sort by directory in asc order)
  • SORT key1 BY key2:*->field (sort key by fields in key2)
  • SORT key1 BY key2:*->field GET key2:*->field [GET key3:*->field …] (sort and get field)
  • SORT key1 BY key2:*->field GET # (sort and get * itself)
  • SORT key STORE key2 (sort and store to key2)

message queue

  • BRPOP key timeout (block and RPOP, timeout is timeout, 0 for nil)
  • BRPOP queue1 [queue …] (RPOP from queue1 to nil, and then RPOP queue2, …)


  • PUBLISH channel message
  • SUBCRIBE channel [channel…]
  • PSUBCRIBE pattern (SUBCRIBE channel1.*) (Notice: as patterns can be various for one channel, a channel can be subscribed more than once)
  • UNSUBSCRIBE [channel …] (default is all)
  • PUNSUBSCRBE pattern1 [pattern2…] (can only cancel PSUBCRIBE pattern1) (Notice: SUBSCRIBE and PSUBCRIBE is handled differently, thus the subscribed channels has no relationship)