Redis命令参考中文版(Redis Command Reference)
Redis命令参考中文版,翻译自Redis Command Reference。?
?
所有命令已经翻译完毕!
?
阅读地址:?http://redis.readthedocs.org/?
欢迎反馈。
update 2011.10.23
本文档现在已经支持 Redis 2.4 版本了,enjoy!
?
update 2011.12.17
原本剩下的四个部分也已经译完,全文翻译完毕!
A:好的,收到。
接着,A返回接收到的信息,然后继续工作。
A:“hello world”
现在看看,如果将MULTI/EXEC包裹BLPOP,并且REDIS没有对BLPOP进行特殊处理的话,会怎么样。
依旧是两个客户端A和B,服务器叫做Redis,但是这次,A调用BLPOP之前用MULTI包裹自己。
A:MULTI
A:BLPOP
A:等等等
这会发生什么事情?就是因为A要求事务操作,而对服务器加了锁,Redis会阻止其他客户端进行任何操作。
B:嘿,哥们,有个信息。
B ————》 尝试发送信息“good morening” ————》 失败
Redis:嘿,你哥们正忙着呢,你再等等吧。
B:等等等。。。
Redis:我锁,我锁,我锁锁锁。。。
A:等等等。。。
于是无限循环就这样形成了。
因此,为了防止发生上面的情况,redis将MULTI/EXEC包裹内的BLPOP当作LPOP来对待,这样就不会造成服务器阻塞了。
这里官方文档有一个遗漏的地方,如果BLPOP的列表不为空的话,并不会返回nil,而是像LPOP一样返回列表的值,这里我得改改。
欢迎继续反馈。
:)# 情况1:对非空列表进行操作redis> RPUSH job programming(integer) 1redis> MULTIOKredis> BLPOP job 30QUEUEDredis> EXEC # 不阻塞,立即返回1) 1) "job" 2) "programming"# 情况2:对空列表进行操作redis> LLEN job # 空列表(integer) 0redis> MULTIOKredis> BLPOP job 30QUEUEDredis> EXEC # 不阻塞,立即返回1) (nil)
这样应该比较好理解了。
所有修改可以见这里:
https://github.com/huangz1990/redis/commit/69431f5594f0f41a41675ab51309a38f512b00c4 8 楼 fisk 2011-09-01 谢谢你的幽默的解释哈 9 楼 huangz 2011-09-02 @fisk 不客气。 10 楼 techdo 2011-12-07 能不能有PDF版本啊 11 楼 huangz 2011-12-07 techdo 写道能不能有PDF版本啊
hi,techdo, PDF 版本可以通过 LATEX 的相关命令和设置来生成,但是我最近有些忙,这两个月实在是抽不出时间来研究它了。
如果你很急着用的话,我可以给你发一个本地的HTML版本,这样就不用上网也可以看了,如果需要的话,就留下你的邮箱。
:)