文章目录
- [1. 初识 Redis](#1. 初识 Redis)
-
- [1.4 Redis 重大版本](#1.4 Redis 重大版本)
-
- [1.4.1 Redis 2.6](#1.4.1 Redis 2.6)
- [1.4.2 Redis 2.8](#1.4.2 Redis 2.8)
- [1.4.3 Redis 3.0](#1.4.3 Redis 3.0)
- [1.4.4 Redis 3.2](#1.4.4 Redis 3.2)
- [1.4.5 Redis 4.0](#1.4.5 Redis 4.0)
- [1.4.6 Redis 5.0](#1.4.6 Redis 5.0)
- [1.4.7 Redis 6.0](#1.4.7 Redis 6.0)
- [1.4.8 Redis 7.0](#1.4.8 Redis 7.0)
1. 初识 Redis
1.4 Redis 重大版本
Redis借鉴了Linux操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本(例如2.7、2.9、3.1),如果是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2)。当前奇数版本就是下一个稳定版本的开发版本,例如2.9版本是3.0版本的开发版本。所以我们生产环境通常选取偶数版本的 Redis,如果对于某些新的特性想提前了解和使用,可以选择最新的奇数版本。目前最新的版本是7.0版本。
1.4.1 Redis 2.6
Redis 2.6在2012年正式发布,相比于Redis 2.4,主要特性如下:
- 服务端支持
Lua脚本- 去掉虚拟内存相关功能。
- 放开对客户端连接数的硬编码限制。
- 键的过期时间支持毫秒。
- 从结点提供只读功能。
- 两个新的位图命令:
bitcount 和 bitop。- 增强了
redis-benchmark的功能:支持定制化的压测、CSV格式输出等功能。- 基于浮点数自增命令:
incrbyfloat 和 hincrbyfloat。redis-cli可以使用--eval参数实现Lua脚本执行。shutdown命令增强。Info可以按照setction输出,并且添加了一些统计项。- 重构了大量的核心代码,所i有集群相关的代码都去掉了,会在
3.0支持cluster功能。sort命令优化。
1.4.2 Redis 2.8
Redis 2.8在2013年正式发布,相比于Redis 2.6,主要特性如下:
- 添加部分主从复制的功能,在一定程度上降低了由于网络问题,造成频繁全量复制生成
RDB对系统造成的压力。- 尝试性地支持
IPv6。- 可以通过
config set命令设置maxclients。- 可以用
bind命令绑定多个IP地址。Redis设置了明显的进程名,方便使用ps命令查看系统进程。config rewrite命令可以将config set持久化到Redis配置文件中。- 发布订阅添加了
pubsub命令。Redis Sentinel第二版,相比于Redis 2.6的Redis Sentinel,此版本已经变成生产可用。
1.4.3 Redis 3.0
Redis 3.0在2015年正式发布,相比于Redis 2.8,主要特性如下:
Redis Cluster:Redis提供的官方分布式实现。- 全新的
embedded string对象编码结果,优化了小对象内存访问,在特定的工作负载时,下载速度大幅提高。- 优化了
LRU算法,大幅提供性能。migrate链接缓存,大幅提供键迁移的速度。migrate命令新增两个参数:copy和replace。client pause命令,在指定时间内中止处理客户端请求。bitcount命令性能提高。config set设置maxmemory时候能够设置不一样的单位(以前只能是字节)。Redis日志小作调整:日志中会反应当前实例的角色(master或者slave)。incr命令性能提高。
1.4.4 Redis 3.2
Redis 3.2在2016年正式发布,相比于Redis 3.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版本。
1.4.5 Redis 4.0
Redis 4.0在2017年正式发布,相比于Redis 3.2,主要特性如下:
- 提供了模块系统(
module),方便第三方开发者拓展Redis的功能。PSYNC 2.0:优化了以前版本中,主从节点切换必然引发全量复制的问题。- 提供了新的缓存剔除算法:
LFU(Last Frequently Used),注意LFU和LRU算法的不同之处,LRU的淘汰规则是基于访问时间,而LFU是基于访问次数的,并对已有算法进行了优化。- 提供了非阻塞
del 和 flushall / flushdb功能,新添加了unlink命令, 这个命令是del命令的异步版本, 它可以将删除指定键的操作放在后台线程里面执行。- 提供了
memory命令,实现对内存更为全面的监控统计。- 提供了交互数据库功能,实现
Redis内部数据库的数据置换。- 提供了
RDB-AOF混合持久化格式,充分利用了AOF和RDB各自优点。Redis Cluster兼容NAT和docker。
1.4.6 Redis 5.0
Redis 5.0在2018年正式发布,相比于Redis 4.0,主要特性如下:
- 新的流数据类型(
stream)。- 新的
Redis模块API:定时器、集群和字典API。RDB现在可存储LFU和LRU信息。redis-cli中的集群管理器从Ruby(redis-trib.rb)移植到了C语言代码。执行redis-cli --cluster help命令以了解更多信息。- 新的有序集合(
sorted set)命令:zpopmin / zpopmax和阻塞变体(blocking variants)。- 升级
Active defragmentation至v2版本。- 增强
HyperLogLog的实现。- 更好的内存统计报告。
- 许多包含子命令的命令现在都有一个
help子命令。- 客户端频繁连接和断开连接时,性能表现更好。
- 许多错误修复和其他方面的改进。
- 升级
Jemalloc至5.1版本。- 引入
client unblock和client id。- 新增
lolwut命令。- 在不存在需要保持向后兼容性的地方,弃用 "
slave" 术语。- 网络层中的差异优化。
- 增强对
Lua的支持:将Lua脚本更好地传播到replicas / AOF、Lua脚本现在可以超时并在副本中进入-BUSY状态。- 引入动态的
HZ(Dynamic HZ)以平衡空闲CPU使用率和响应性。- 对
Redis核心代码进行了重构并在许多方面进行了改进。
1.4.7 Redis 6.0
Redis 6.0在2020年正式发布,相比于Redis 5.0,主要特性如下:
Redis 6.0引入多线程IO,但多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程。- 实现了
client-side-caching(客户端缓存)功能。放弃了caching slot,而只使用key names。Redis 6.0开始在兼容RESP 2的基础上,开始支持RESP 3(RESP,Redis Serialization Protocol是Redis服务端与客户端之间通信的协议)。- 连接支持
SSL,更加安全。- 增强
ACL权限控制:支持对客户端的权限控制,实现对不同的key授予不同的操作权限、新增一个新的ACL日志命令,允许查看所有违反ACL的客户机、访问不应该访问的命令、访问不应该访问的密钥,或者验证尝试失败。这对于调试ACL问题非常有用。- 提升了
RDB日志加载速度。- 发布官方的
Redis集群代理模块Redis Cluster Proxy。- 提供了众多的新模块(
modules)API。
1.4.8 Redis 7.0
Redis 7.0在2022年正式发布,相比于Redis 6.0,主要特性如下:
- 将
AOF文件的存储方式改为在一个文件夹下存储多个文件。- 将持久化文件
RDB的版本升级为10,与之前的RDB文件版本不再兼容。- 在读取老的
RDB文件格式的时候将ziplist转换为listpack,这种转换发生于两种情况之下:从磁盘读取文件或者从一个主节点进行复制文件的时候。- 在
redis.conf配置文件中,protected-mode默认更改为yes,只有当你希望你的客户端在没有授权的情况下可以连接到Redis server的时候可以将protected-mode设置为no。- 在
ACL中,pub / sub channel默认是被阻塞的。- 在从节点中,
TTL的时间标识的是绝对时间,不再是相对时间,从而保证了过期数据被及时删除。- 不再支持
gopher协议。- 当在配置文件中设置
replica-serve-stale-data=no, 当主节点不再提供服务时,ping命令得不到返回值。