Redis借鉴了Linux操作系统对于版本号的命名规则:
版本号第二位如果是奇数,则为非稳定版本(例如2.7、2.9、3.1),如果是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2),
当前奇数版本就是下一个稳定版本的开发版本,例如2.9版本是3.0版本的开发版本,所以我们在生产环境通常选取偶数版本的Redis。
1.Redis2.6
Redis2.6在2012年正是发布,经历了17个版本,到2.6.17版本,相对于Redis2.4,主要特性如下:
- 服务端支持Lua脚本。
- 去掉虚拟内存相关功能。
- 放开对客户端连接数的硬编码限制。
- 键的过期时间支持毫秒。
- 从节点支持只读功能。
- 两个新的位图命令:bitcount和bitop。
- 增强了redis-benchmark的功能:支持定制化的压测,CSV输出等功能。
- 基于浮点数自增命令:incrbyfloat和hincrbyfloat。
- redis-cli可以使用--eval参数实现Lua脚本执行。
- shutdown命令增强。
- 重构了大量的核心代码,所有集群相关的代码都去掉了,cluster功能将会是3.0版本最大的亮点。
- info可以按照section输出,并且添加了一些统计项
- sort命令优化
2.Redis2.8
Redis2.8在2013年11月22日正式发布,经历了24个版本,到2.8.24版本,相比于Redis2.6,主要特性如下:
- 添加部分主从复制的功能,在一定程度上降低了由于网络问题,造成频繁全量复制生成RDB对系统造成的压力。
- 尝试性的支持IPv6.
- 可以通过config set命令设置maxclients。
- 可以用bind命令绑定多个IP地址。
- Redis设置了明显的进程名,方便使用ps命令查看系统进程。
- config rewrite命令可以将config set持久化到Redis配置文件中。
- 发布订阅添加了pubsub。
- Redis Sentinel第二版,相比于Redis2.6的Redis Sentinel,此版本已经变成生产可用。
3.Redis3.0(里程碑)
Redis3.0在2015年4月1日正式发布,相比于Redis2.8主要特性如下:
Redis最大的改动就是添加Redis的分布式实现Redis Cluster。
- Redis Cluster:Redis的官方分布式实现。
- 全新的embedded string对象编码结果,优化小对象内存访问,在特定的工作负载下载速度大幅提升。
- Iru算法大幅提升。
- migrate连接缓存,大幅提升键迁移的速度。
- migrate命令两个新的参数copy和replace。
- 新的client pause命令,在指定时间内停止处理客户端请求。
- bitcount命令性能提升。
- cinfig set设置maxmemory时候可以设置不同的单位(之前只能是字节)。
- Redis日志小做调整:日志中会反应当前实例的角色(master或者slave)。
- incr命令性能提升。
4.Redis3.2
Redis3.2在2016年5月6日正式发布,相比于Redis3.0主要特征如下:
- 添加GEO相关功能。
- SDS在速度和节省空间上都做了优化。
- 支持用upstart或者systemd管理Redis进程。
- 新的List编码类型:quicklist。
- 从节点读取过期数据保证一致性。
- 添加了hstrlen命令。
- 增强了debug命令,支持了更多的参数。
- Lua脚本功能增强。
- 添加了Lua Debugger。
- config set 支持更多的配置参数。
- 优化了Redis崩溃后的相关报告。
- 新的RDB格式,但是仍然兼容旧的RDB。
- 加速RDB的加载速度。
- spop命令支持个数参数。
- cluster nodes命令得到加速。
- Jemalloc更新到4.0.3版本。
5.Redis4.0
可能出乎很多的意料,Redis3.2之后的版本是4.0,而不是3.4、3.6、3.8。
一般这种重大版本号的升级也意味着软件或者工具本身发生了重大改革。下面是Redis4.0的新特性:
- 提供了模块系统,方便第三方开发者拓展Redis的功能。
- PSYNC2.0:优化了之前版本中,主从节点切换必然引起全量复制的问题。
- 提供了新的缓存剔除算法:LFU(Last Frequently Used),并对已有算法进行了优化。
- 提供了非阻塞del和flushall/flushdb功能,有效解决删除了bigkey可能造成的Redis阻塞。
- 提供了memory命令,实现对内存更为全面的监控统计。
- 提供了交互数据库功能,实现Redis内部数据库的数据置换。
- 提供了RDB-AOF混合持久化格式,充分利用了AOF和RDB各自优势。
- Redis Cluster 兼容NAT和Docker。
6.Redis5.0
- 新增加的Stream(流)数据类型,这样redis就有了6大数据类型。它弥补了其它5种数据类型不能实现的功能,比如List数据类型只能先进先出,或者后进先出,不能从中间去数据,但是Stream可以实现。 Stream 详情介绍 : http://www.redis.cn/topics/streams-intro.html
- 新的Redis模块api : Times and Cluster api,是一个抽象的集群消息总线,用于方便开发分布式系统。
- RDB(redis datebase)现在用于存储 LFU(最近最少使用淘汰算法) 和 LRU(最近不经常使用淘汰算法)元数据信息。
- 集群管理器从ruby(redis-trib.rb)移植到c代码。以前创建集群时候需要通过ruby脚本来创建,现在用c代码重新编写,不用在额外按照ruby了。
- 新增加有序集合的sorted set4个命令:ZPOPMIN ,ZPOPMAX和它们的阻塞变种。
- 主动内存碎片整理功能version2版本,依赖于Jemalloc内存分配器。
- 增强HyperLogLog实现,这个功能是估算集合基数,redis5优化这个算法来节省空间。
- 更好的内存统计报告(碎片整理和内存报告)。 当我们在redis里存一个key时候,redis会给这个key分配一个存储空间,但是当把这个key删了,redis是不会立即回收这个已经删除key所占用的空间。因此如果反复增加删除key的话,会产生很多内存碎片。这就会影响之后申请大块连续的内存空间,所以进行内存碎片整理很有必要。
在redis4点时候已经有自动整理内存碎片的功能了,不过那时候功能还属于实验阶段。下图是redis4文档所说 redis5是在redis4的基础上将内存碎片自动清理功能进行了完善,现在该功能已经成熟。 那么这个功能有如下作用: 1.在redis运行期间自动进行内存碎片清理,可以实时释放内存空间。 2.通过内存报告来了解整个系统的内存使用情况。 在redis配置文件中查看内存碎片控制相关参数 参数说明: 1) activedefrag:内存碎片功能启动配置项,当为yes就表示开启该功能。 2)active-defrag-ignore-bytes:当内存浪费小于100M就忽略,大于100M就启动内存碎片整理,这个值可以设置的。 3)active-defrag-threshold-lower:当内存浪费小于10%就暂时忽略,大于10%就启动内存碎片整理,这个值可以设置的。
- 许多带有子命令的命令现在都有一个help子命令。
- 客户端断开和连接时候性能更好。
- 错误修复和改进。
- Jemalloc升级到5.1版本。