`
huangz
  • 浏览: 322081 次
  • 性别: Icon_minigender_1
  • 来自: 广东-清远
社区版块
存档分类
最新评论

Redis命令参考中文版(Redis Command Reference)

阅读更多

Redis命令参考中文版,翻译自Redis Command Reference。 

 

所有命令已经翻译完毕!

 

阅读地址: http://redis.readthedocs.org/ 


欢迎反馈。


update 2011.10.23


本文档现在已经支持 Redis 2.4 版本了,enjoy!

 

update 2011.12.17


原本剩下的四个部分也已经译完,全文翻译完毕!

分享到:
评论
11 楼 huangz 2011-12-07  
techdo 写道
能不能有PDF版本啊


hi,techdo, PDF 版本可以通过 LATEX 的相关命令和设置来生成,但是我最近有些忙,这两个月实在是抽不出时间来研究它了。

如果你很急着用的话,我可以给你发一个本地的HTML版本,这样就不用上网也可以看了,如果需要的话,就留下你的邮箱。

:)
10 楼 techdo 2011-12-07  
能不能有PDF版本啊
9 楼 huangz 2011-09-02  
@fisk 不客气。
8 楼 fisk 2011-09-01  
谢谢你的幽默的解释哈
7 楼 huangz 2011-07-29  
hi,fisk。

我将原来的

引用
一个被包含在MULTI/EXEC块内的BLPOP操作,行为表现得就像操作超时一样,仅仅返回一个nil值。


改成了

引用
因此,一个被包裹在MULTI/EXEC块内的BLPOP命令,行为表现得就像LPOP一样,对空列表返回nil,对非空列表弹出列表元素,不进行任何阻塞操作。



并且删除了我觉得比较碍事的

引用
如果你是科幻迷,你可以想象在MULTI/EXEC块内,时间以无限的速度在流逝。



并且更新了代码示例

# 情况1:对非空列表进行操作

redis> RPUSH job programming
(integer) 1

redis> MULTI
OK

redis> BLPOP job 30
QUEUED

redis> EXEC  # 不阻塞,立即返回
1) 1) "job"
   2) "programming"


# 情况2:对空列表进行操作

redis> LLEN job  # 空列表
(integer) 0

redis> MULTI
OK

redis> BLPOP job 30
QUEUED

redis> EXEC  # 不阻塞,立即返回
1) (nil)


这样应该比较好理解了。

所有修改可以见这里:
https://github.com/huangz1990/redis/commit/69431f5594f0f41a41675ab51309a38f512b00c4
6 楼 huangz 2011-07-29  
fisk 写道
谢谢哈,这些天公司有点忙,没看Redis了。

我刚刚又遇到一个问题:
BLPOP
不太理解 在multi/exec中使用 BLPOP会 阻塞整个redis服务器??



这一段,我的理解是,如果把MULTI/EXEC包裹BLPOP,BLPOP就会变成一个简单的LPOP操作,立即返回,不阻塞。

这里对在MULTI/EXEC语句中的BLPOP做了特殊处理,让它的阻塞效果没有了。

这个问题我在实际中没看到过,应该是属于实现级的问题,你看,MULTI事务执行时,要求服务器加锁,来保证事务的原子性,这样就不允许其他客户端对redis服务器进行操作,但是偏偏当列表为空时,BLPOP会阻塞,这就成了一个死循环,所以不允许MULTI/EXEC包裹BLPOP。

举个例子,现在有两个客户端A和B,现在A调用BLPOP,A阻塞,等待B给它发送信息:

A:BLPOP
A:等等等。。。

好,终于B客户端来了一个信息。

B:嘿,哥们,有个信息。

B ----> 发送信息"hello world" -----> A

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一样返回列表的值,这里我得改改。

欢迎继续反馈。

:)
5 楼 fisk 2011-07-29  
谢谢哈,这些天公司有点忙,没看Redis了。

我刚刚又遇到一个问题:
BLPOP
不太理解 在multi/exec中使用 BLPOP会 阻塞整个redis服务器??

4 楼 huangz 2011-07-16  
呵呵,不单是你,我刚开始也是花了很大力气去理解文档里面的锁的概念,翻译的时候也遇上了很多麻烦。

这个概念本身是简单的,但是要描述它比较难:

一是文档里面原文说得其实也不是太清楚,想过自己进行大改,但是这样一来又害怕自己理解错误,误人子弟。最后决定尽量保留翻译过来的意思,但是还是多少有点走味。

二是MOVE,SETNX等命令的情况比较多,比如MOVE命令,它涉及两个数据库(本地数据库和目的地数据库),最简单的四种情况:

1.key不存在本地数据库,move
2.key存在本地,但不在目的地
3.key存在本地,也存在目的地
4.key不存在本地,存在目的地

XD,光是列出来已经让人头晕了,嘿嘿,所以这个问题不是太好处理。

你的提议有道理,我翻了一下MOVE的例子,的确不是很好理解,我已经记在TODO上面了,等有空我争取把例子改得更清晰一些。

欢迎你继续就文档进行反馈。

:)



3 楼 fisk 2011-07-16  
谢谢哈,现在明白了,MOVE有 锁(locking)能起到的保护“资源”的功能,:)

我觉得可以加个类似的例子,解释下(或者参见set与setnx的区别);
不过也不确定了,可能我水平比较低,理解起来有点障碍。
2 楼 huangz 2011-07-16  
@fisk

引用
将当前数据库(默认为0)的key移动到给定的数据库db当中。

如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定key,或者key不存在于当前数据库,那么MOVE没有任何效果。

因此,也可以利用这一特性,将MOVE当作锁(locking)原语。


这里所说的锁原语,就是指“如果目标数据库db内有给定key,就不将key移动到db,也就是,不覆盖原值“这一效果。

举个例子,比如我有一个些重要文档,按日期排序,专门放在一个备份数据库里面(叫它backup数据库好了),格式如下:

key: 值
2011-2-10 : xxxx
2011-5-7 : xxxx
2011-8-20 : xxxx

假如现在backup有一个key叫做2011-7-16,而在另一个数据库中,还有另一个2011-7-16,我打算将新的2011-7-16也放到backup数据库中,但是我忘记了已经有一个2011-7-16了,当然我不希望旧的2011-7-16被覆盖掉。

这时MOVE的锁作用就凸显了:假如旧的2011-7-16已经在backup数据库中了,它就不会将新的2011-7-16移动过去,造成覆盖,害我丢失数据。

这就是MOVE命令的锁的效果,确保目标数据库已有的key不会被外来key覆盖掉

你可以参考一下SET和SETNX两个命令的区别,它们的关系也是类似的。

这个概念说起来比较困难,但原理还是很直观的,我当时翻译的时候也有考虑是不是把这一句话去掉比较好,因为我觉得它的误导作用比较大,嘿嘿。

:)
1 楼 fisk 2011-07-15  
刚刚开始学习redis,看到你的翻译很高兴,呵呵。
有个问题是:
MOVE 命令解释时,说可以作为Locking 的原语。可不可以给个具体的例子解释下?谢谢

相关推荐

    Redis操作命令中文版API_redis_rediscommandapi_detail66w_API_

    Redis操作命令中文版API。本文档是 Redis Command Reference 和 Redis Documentation 的中文翻译版:所有 Redis 命令文档均已翻译完毕, Redis 最重要的一部分主题(topic)文档,比如事务、持久化、复制、Sentinel...

    Redis V4.0 最新版中文命令参考学习手册

    本文档是 Redis Command Reference 和 Redis Documentation 的中文翻译版, 阅读这个文档可以帮助你了解 Redis 命令的具体使用方法, 并学会如何使用 Redis 的事务、持久化、复制、Sentinel、集群等功能。...

    Redis2.8 命令参考手册(最新版)

    本文档是 Redis Command Reference 和 Redis Documentation 的中文翻译版:所有 Redis 命令文档均已翻译完毕, Redis 最重要的一部分主题(topic)文档,比如事务、持久化、复制、Sentinel、集群等文章也已翻译完毕...

    redis4.0中文命令参考手册+完整文档

    该文档是 Redis Command Reference 和 Redis Documentation 的完整中文翻译HTML离线版,包含了Redis4.0的所有命令、Redis 的事务、持久化、复制、Sentinel、集群等。新手最佳入门教程、老手必备参考手册!

    redis4.0中文手册

    本文档是 Redis Command Reference 和 Redis Documentation 的中文翻译版, 阅读这个文档可以帮助你了解 Redis 命令的具体使用方法, 并学会如何使用 Redis 的事务、持久化、复制、Sentinel、集群等功能。

    redis的java驱动

    本文档是 Redis Command Reference 和 Redis Documentation 的中文翻译版: 所有 Redis 命令文档均已翻译完毕, Redis 最重要的一部分主题(topic)文档, 比如事务、持久化、复制、Sentinel、集群等文章也已翻译...

    Redis中文文档.pdf

    本文档是 Redis Command Reference 和 Redis Documentation 的中文翻译版, 阅读这个文档可以帮助你了解 Redis 命令的具体使用方法, 并学会如何使用 Redis 的事务、持久化、复制、Sentinel、集群等功能

    Redis-Essentials.pdf

    how to use redis-cli, the default Redis command-line interface. It also shows you how to install Node.js and goes through a quick JavaScript syntax reference. The String, List, and Hash data types are...

    Redis的Scala客户端Scredis.zip

    Scredis 是一个 Redis 的 Scala 客户端开发包。基于 Akka 构建,特点是 Reactive、非堵塞以及超级快。示例代码:import scredis._ import scala.util.{ Success, Failure } // Creates a Redis instance ...

    spring-boot-reference.pdf

    10.2.5. Command-line Completion 10.2.6. Quick-start Spring CLI Example 10.3. Upgrading from an Earlier Version of Spring Boot 11. Developing Your First Spring Boot Application 11.1. Creating the POM ...

    贪吃蛇java源码-Repo-Album:收集各种不错的存储库

    Reference》全文的中文翻译版。 轮子   PDF Reader in JavaScript, built with HTML5. Main language: JavaScript. 出名的 NoSQL 数据库。 对 Redis 的 Rust 实现。 神奇的项目 开源的文件同步工具。 Main language...

Global site tag (gtag.js) - Google Analytics