Loading... <p>Redis 3.0.0 正式版终于到来了!最重要的新特性是集群(Redis Cluster),提供Redis功能子集(比如不支持多数据库)的分布式、容错的实现(最多支持1000结点)。</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703152236-81.png" alt="data/attachment/portal/201504/02/214413pwwqlzzmf2phf4xc.png" /></p> </p> <p> Salvatore 'antirez' Sanfilippo在Google Groups里表示,这是Redis的重要时刻。“我相信今天的Redis 3.0.0将以某种方式完全改变Redis的面貌。”他强调,<strong>人们将认识到Redis是一个全新的东西,它的自动扩展、容错和高可用性都大大提高,从此能够在更大范围承担更关键的任务。</strong>(我总结一下老大的意思吧:Redis翻开了历史新的篇章……)</p> <p></p> <p> antirez还透露,内置的集群功能持续干了很多年,虽然能找到一些时间密集开发,但也不时被其他特性完全打断,现在终于完成了。他预计社区能用好这些功能,积累必要的经验,还要一到两年。</p> <p></p> <p> 他还说,Redis 3.0.0实际上标志着一个新阶段和新的开发模式的开始。以后,大量已经开发的新功能将不再急于进入稳定版本,实际上Redis 3.0.0就放弃了很多新功能,回退到2.8,以保证新的稳定版本用户能够马上使用。</p> <p></p> <p> 他在帖子里重点提及的其他更新包括:</p> <ol class=" list-paddingleft-2"> <li> <p>新的"embedded string"对象编码,提升缓存命中率。在某些工作负载(尤其是管道化的高负载)下速度大幅提高。</p> </li> <li> <p>大大改进了回收键的LRU近似算法。</p> </li> <li> <p>AOF重写功能被完全重新开发了,以减少进程最终将积累的缓冲写入时,由于硬盘速度慢而导致的延迟。</p> </li> <li> <p></p> </li> <li> <p> 而在发布声明中还列出了如下更新(相对于2.8):</p> </li> <li> <p>WAIT command to block waiting for a write to be transmitted to the specified number of slaves.</p> </li> <li> <p>MIGRATE connection caching. Much faster keys migraitons.</p> </li> <li> <p>MIGARTE new options COPY and REPLACE.</p> </li> <li> <p>CLIENT PAUSE command: stop processing client requests for a specified amount of time.</p> </li> <li> <p>BITCOUNT performance improvements.</p> </li> <li> <p>CONFIG SET accepts memory values in different units (for example you can use "CONFIG SET maxmemory 1gb").</p> </li> <li> <p>Redis log format slightly changed reporting in each line the role of the instance (master/slave) or if it's a saving child log.</p> </li> <li> <p>INCR performance improvements.</p> </li> </ol> <p></p> <p> 详情可以点击 这里 查看。</p> <p></p> <p> ITEye上powersoft同学之前翻译了Redis 3.0的文档,虽然还没有来得及更新,但还是有参考价值的:http://www.iteye.com/blogs/subjects/redis3。</p> <p></p> <p> Hacker News上antirez回答了社区提出的一些问题,颇有价值,整理翻译如下。</p> <p></p> <h2><strong>这是不是愚人节笑话啊?</strong></h2> <p> 非也,我们一向有在4月1日发布的传统。去年HyperLogLog支持也是4月1日发布的嘛。而且那次因为HyperLogLog名字太科幻,好多人怎么都不肯相信这居然不是愚人节笑话呢。</p> <p> 再说,开源软件嘛,怕什么愚人节,你下载代码看看不就啥都知道了。</p> <p></p> <h2><strong>Redis之外还有什么其他更好的选择啊?</strong></h2> <p> <br /> (这问题让antirez怎么答,总不能不谦虚吧。仔细听,他回答得很好。)这得看使用场景,基本上还是就事论事、具体情况具体分析。程序员的本事不就<br /> 体现在选择正确的技术,然后在不同情况下优化嘛。你要考虑数据模型是否匹配所要解决的问题,运维因素,持久化保证,性能(需要多少个结点),可扩展性,是<br /> 否简单(搞这么复杂以后会不会老要我来支持啊),等等。</p> <p></p> <p> 其他同学提到了memcached,有人评论:现在memcached已经只相当于Redis最简单的功能了,只能作为缓存。Redis不仅能缓存,还能承担很多存储任务。此外还有人提及HyperDex,但其ACID特性实现Warp是专有的产品。</p> <p></p> <p> 此前的这个大型NoSQL比较文章,仍然有一定参考价值:http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis</p> <p><strong><br /></strong></p> <h2><strong>有了Cluster,Sentinel是不是就废啦。</strong></h2> <p> 还没那么快,Sentinel还在与Cluster并行继续开发中。目前单实例场景下需要HA的话,它还是最佳选择。但长远(可能很长远哦)看,我们会用Cluster解决Sentinel的使用场景,不过在那之前我们会很早就告诉大家的。</p> <p></p> <p><strong>谁能给我更详细地讲讲"embedded string"对象编码是啥,它针对什么工作负荷?能找到的文档都太老了。</strong></p> <p> 这事儿简单。一般Redis里会有包含类型字段的对象结构,还有一个指针指向实际的对象表示。假设类型是REDIS_STRING,就得有指针指向一个"sds"字符串(sds是字符串库用的名字)。</p> <p></p> <p> <br /> 现在有了embedded<br /> string之后,就提供了一种特殊的字符串对象,用一个位置保持对象结构和字符串本身。这样内存利用更有效,而且能够大大改进内存本地性,所以差不多所<br /> 有使用字符串对象的东西(字符串,或者比较大的要用字符串对象作为集合值的集合对象)性能都更好。</p> <p></p> <p> 这种特殊字符串只用于小字符串(工作负荷里大多数字符串都不大)。</p> <p></p> <h2>Redis</h2> <p> <br /> Redis是一个开源的高级key-value(键-值)缓存与存储,以高性能著称。它也常被称为数据结构服务器,因为其中的键可以存各种数据结构包括<br /> 字符串、散列、列表、集合、有序集合、位图和hyperloglog。Redis的出现,很大程度补偿了memcached这类KV数据库的不足。不仅可<br /> 以用于缓存,也可以用于一些场景的存储,在很多情况下是关系数据库很好的补充。它提供了Python,Ruby,Erlang,PHP客户端,使用非常方<br /> 便。</p> <p></p> <p></p> <h2>原文链接:http://www.lupaworld.com/portal.php?mod=view&aid=251638</h2> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信