redis的那些事
2012-02-21 18:32 轩脉刃 阅读(3150) 评论(2) 编辑 收藏 举报持久化
redis支持RDB和AOF两种持久化方式
The RDB persistence performs point-in-time snapshots of your dataset at specified intervals.
RDB是一种即时快照的存储方式,定时对数据库进行snapshot
RDB优点:
1 RDB对于数据备份非常容易。你可以设置1天或者30天对数据进行一次备份,这样当发生数据灾难的时候能很容易恢复
2 由于RDB对数据备份时redis只做备份操作,所以备份最大化的使用了redis的性能,同时也导致了对于大的数据集,RDB备份快于AOF
RDB缺点:
1 如果你的需求只是要知道两个时间段中redis的变化,RDB是弱于AOF的
2 由于RDB经常使用子进程fork()进行数据备份,所以如果当数据比较大的时候,数据备份会比较耗时
AOF优点:
1 你必须有一个AOF的fsync的策略:
或者是不进行fsync, 或者每秒fsync一次,或者每次query查询的时候fsync
2 AOF只记录修改log,当存储的时候由于某种原因写log失误了,使用redis-check-aof能很好的修复
3 当redis数据太大的时候,AOF可以很好被重写到新的redis上
AOF缺点:
1 AOF通常比RDB大
2 AOF比RDB慢
--------------------------
流水线
redis是客户端和服务器端的通信交互TCP协议
当客户端发送请求,服务器端接受请求并发送回复,客户端接收回复,这个过程叫做RTT(Round Trip Time)
比如如果RTT时间是250微秒,既是服务器端每秒能处理10万个请求,那么,我们只能认为redis每秒处理4个请求
server不需要等待client接收了消息之后再处理新request的技术叫做pipelining(流水线)。这个技术早在几十年前就应用在了各种协议上(比如pop3),redis也很早使用了这个技术。
实验:
$ (echo -en "PING\r\nPING\r\nPING\r\n"; sleep 1) | nc localhost 6379
当调用这个例子的时候:
server一次返回:
+PONG
+PONG
+PONG
而不是返回一次PONG,过了RTT时间再返回PONG,这个例子就说明了redis使用pipelining
注:nc命令说明请看:
http://www.cnblogs.com/faraway/archive/2008/08/30/1280070.html
---------------------------------
订阅
redis支持订阅(subscribe)
当一个client订阅一个或多个变量,其他客户端修改了变量并publish之后,这个客户端会收到消息
例子:
Client1:
SUBSCRIBE first second
Client2:
PUBLISH second Hello
client1显示:
message
second
Hello2
redis还支持模式订阅(psubscribe命令)
PSUBSCRIBE f*
---------------------------------
参考文档:
---------------------------------
作者:yjf512(轩脉刃)
出处:http://www.cnblogs.com/yjf512/
本文版权归yjf512和cnBlog共有,欢迎转载,但未经作者同意必须保留此段声明
实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”
本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系。