雨翔河
首页
列表
关于
redis5.0 正式版的一些新特性之我见
2018-11-07 12:00
## redis5.0正式版的一些新特性之我见 > 前几天redis的5.0版本正式上线,有很多新特性跟以前的版本不太一样。 1. #### 其中最不一样的就是加了一种新的流数据类型 关于redis的流处理其实可以专门写一篇文章来详细介绍. redis的流处理实现了一套和kafka类似的生产者消费组模式,实现逻辑不一样,但是目标是一样的:允许一组客户端一起消费消息流。 和kafka的区别,Redis流中的消费者group可能在某种程度上类似于基于分区的消费者group,但是要注意的是,Redis流实际是不一样的。partition只是逻辑存在的,消息只是放在一个Redis的key中,因此不同客户端的服务方式取决于谁去准备处理这些新消息,而不是哪个partition客户端从哪个partition读取消息。 2. #### 新的redis模块API:定时器,集群,字典 3. #### RDB 现在可存储LFU 和LRU 信息 redis的持久化方式一般有两种,一种是rdb的,还有一种是aof,rdb就是隔一段时间将内存中的数据记录dump到磁盘上去持久化。 而redis新增的LFU这类的内存逐出策略是在redis4.0版本才引进的,最初仅仅是用来做内存逐出,后来渐渐支持基于LFU的热点key发现机制。 4. #### redis集群管理的代码原来是用ruby写的,现在迁移到c了,理论上效率能上升一个等级。 5. #### 新的命令:在排序集合里面找到最高或者最低的成员并删除。还有它对应的阻塞命令。 6. #### Active defragmentation version 2. 内存碎片整理升级到了第二代,也就是第二个版本,我看了官方的记录,redis内存碎片整理功能是在4.X的版本有的,5.0正式版这次对这个功能进行了升级, 以往遇到redis内存碎片的解决办法就是重启。0.0,不知道各位看官是否有更好的方案。 7. #### 增强了HyperLogLog的实现,这个说来就复杂了,这玩意儿在redis算不上一种新的数据结构,这是一种基数算法,可以通过HyperLogLog利用极小的内存空间来完成独立总数的统计, 比如ip啊id之类的统计且能容忍少量误差。举个简单的例子,比如我们把每日IP记录下来,假设每天有一亿个IP访问,如果使用集合的话,一天的内存使用就是1.5G,假设我们存储一个月的记录,就需要45G容量。但是使用HyperLogLog的话,一天12K,一个月360K。 至于内部实现原理,看redislabs网站说的是HyperLogLog实现和Bloom过滤器类似,这个就很简单熟悉了,当然里面还有更加精妙和复杂的东西,我就不多解释了,因为我也没了解过。。。 8. #### 内存报告功能更强大 9. #### 很多命令是包含子命令的,现在这些都有了help的选项,这样查找命令的使用方式能方便很多。 10. #### 优化了连接的性能,客户端频繁连接和断开连接时,性能表现更好 11. #### BUG修复,BUG列表就不详细说 12. #### Jemalloc 更新到了5.1 redis本身是没有实现内存池内存分配这些组件的,一般都是站在巨人的肩膀上来做事情 redis在2.4.4版本之后都是将Jemalloc包含进去了,所以可以直接用,当然也有用tcmalloc,至于他们之间区别,我感觉可以再写一篇文章来论述,其实我也不太懂,反正很厉害。。。 13. #### LOLWUT 命令被添加进入了redis,我是觉得有点秀。。。 这个东西已经不是骚操作可以形容了,应该称为蒂花之秀,简直6的不行,因为加入这个功能发生过一场redis技术界的小战争,不外乎就是争议很大,这是个啥呢,看图: 虽然这个功能没有提供任何技术上有用的东西,俗称没卵用,有的人甚至说这特么是扯淡,但是为啥却被放进去了redis里面,这其实是我觉得技术上最有趣的地方,也是老一辈的极客们想告诉我们这些前仆后继的年轻人的话,计算机是人类发明的,并且它不可能总以无脑的纯技术的推理去做事情,有人使用的系统,就应该偶尔有些乐趣,彩蛋,甚至可以说是吐槽,他们其实也是我们,不应该总是给人输出技术,也应该输出些和生活有关的快乐。 14. #### 不在使用slave这个单词作为描述集群环境中的从机器。 这个我想吐槽下,特么技术界现在也掀起来一股文字狱,人权人士认为slave这个词带有侮辱性质,带有侵犯性质,让一部分人想起美国旧时的黑奴制度,为了政治正确,大量XX人士强行投票要求redis不得使用slave这个词语。 15. #### 对网络层进行了优化,看起来速度能提升点。 16. #### 对lua脚本进行了一些修改,写lua脚本更加方便 17. #### 动态的处理频率以平衡空闲CPU使用和响应能力。 18. #### redis的核心在很多方面都进行了优化和改动。 19. #### 加入了很皮的命令CLIENT UNBLOCK,和 CLIENT ID。 先说CLIENT ID,这个命令可以拿到当前操作的id,它会返回当前连接的id。 CLIENT UNBLOCK就是只要遇到了阻塞的情况,比如这些命令BRPOP或XREAD或WAIT,那么你再发个CLIENT UNBLOCK去就能取消阻塞了。 所以5.0之后就会有这种骚操作: ``` Connection A : > CLIENT ID 6666 > BRPOP key1 key2 key3 0 Connection B: > CLIENT UNBLOCK 6666 1 ```
类型:工作
标签:redis,linux
Copyright © 雨翔河
我与我周旋久
独孤影
开源实验室