Redis重大版本演进全解析:从2.6到7.0
目录
一、Redis 重大版本演进详述
1、Redis 2.6
2、Redis 2.8
3、Redis 3.0
4、Redis 3.2
5、Redis 4.0
6、Redis 5.0
7、Redis 6.0
8、Redis 7.0
二、安装并启动 Redis(先了解)
一、Redis 重大版本演进详述
Redis 在版本命名规则上借鉴了 Linux 操作系统的成熟经验:版本号的第二位数字若为奇数,则代表该版本为非稳定版本(例如 2.7、2.9、3.1),主要用于新功能的开发与测试;若为偶数,则代表稳定版本(例如 2.6、2.8、3.0、3.2),适合在生产环境中使用。当前,奇数版本实际上是下一个稳定版本的开发预览版,例如 2.9 版本即为 3.0 版本的开发基础。因此,在生产环境中,我们通常推荐使用偶数版本的 Redis;若希望提前体验并测试新功能,则可选择最新的奇数版本。截至目前,Redis 的最新版本为 7.0。以下,我们将对 Redis 发展历程中的一些重要版本及其特性进行详细阐述。
1、Redis 2.6
Redis 2.6 于 2012 年正式发布,相较于 Redis 2.4,其主要特性包括:
-
服务端 Lua 脚本支持:允许在服务端执行 Lua 脚本,增强灵活性。
-
虚拟内存功能移除:简化了内存管理,提高了系统稳定性。
-
客户端连接数硬编码限制解除:允许更灵活的客户端连接管理。
-
键过期时间支持毫秒级:提高了时间控制的精度。
-
从节点只读功能:增强了数据的安全性和一致性。
-
新增位图命令:bitcount 和 bitop,丰富了位图操作。
-
redis-benchmark 功能增强:支持定制化压测和 CSV 格式输出。
-
浮点数自增命令:incrbyfloat 和 hincrbyfloat,扩展了数值操作。
-
redis-cli 支持 Lua 脚本执行:通过 --eval 参数实现。
-
shutdown 命令增强:提供了更安全的关闭方式。
-
Info 命令输出优化:可按 section 输出,并添加了统计项。
-
核心代码重构:移除了所有集群相关代码,为 3.0 版本的 cluster 功能做准备。
-
sort 命令优化:提高了排序效率。
2、Redis 2.8
Redis 2.8 于 2013 年发布,相较于 Redis 2.6,其主要改进包括:
-
部分主从复制功能:降低了网络问题导致的全量复制压力。
-
IPv6 尝试性支持:为未来的网络扩展打下基础。
-
maxclients 参数可通过 config set 命令设置:提高了配置的灵活性。
-
bind 命令支持绑定多个 IP 地址:增强了网络访问控制。
-
明显的进程名设置:方便使用 ps 命令查看系统进程。
-
config rewrite 命令:将 config set 持久化到 Redis 配置文件中。
-
发布订阅添加 pubsub 命令:丰富了发布订阅功能。
-
Redis Sentinel 第二版:生产环境可用性得到提升。
3、Redis 3.0
Redis 3.0 于 2015 年发布,相较于 Redis 2.8,其主要特性包括:
-
Redis Cluster:官方分布式实现,提高了系统的可扩展性和容错性。
-
全新的 embedded string 对象编码结构:优化了小对象内存访问,提高了下载速度。
-
LRU 算法优化:大幅提升了性能。
-
migrate 链接缓存:提高了键迁移的速度。
-
migrate 命令新增参数:copy 和 replace,增强了迁移的灵活性。
-
client pause 命令:在指定时间内停止处理客户端请求,便于维护。
-
bitcount 命令性能提升:提高了位图统计的效率。
-
config set 设置 maxmemory 支持不同单位:提高了内存管理的灵活性。
-
Redis 日志调整:日志中会反映当前实例的角色(master 或 slave)。
-
incr 命令性能提升:提高了数值自增的效率。
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 版本:提高了内存管理的效率。
5、Redis 4.0
Redis 4.0 于 2017 年发布,相较于 Redis 3.2,其主要特性包括:
-
模块系统(module):方便第三方开发者拓展 Redis 的功能。
-
PSYNC 2.0:优化了主从节点切换时的全量复制问题。
-
新的缓存剔除算法:LFU(Last Frequently Used),基于访问次数进行淘汰,并对已有算法进行了优化。
-
非阻塞 del 和 flushall/flushdb 功能:新增了 unlink 命令,实现了删除操作的异步执行。
-
memory 命令:实现了对内存更为全面的监控统计。
-
交互数据库功能:实现了 Redis 内部数据库的数据置换。
-
RDB-AOF 混合持久化格式:充分利用了 AOF 和 RDB 的各自优点。
-
Redis Cluster 兼容 NAT 和 docker:提高了集群的部署灵活性。
6、Redis 5.0
Redis 5.0 于 2018 年发布,相较于 Redis 4.0,其主要改进包括:
-
新的流数据类型(stream):支持消息队列和日志收集等场景。
-
新的 Redis 模块 API:定时器、集群和字典 API,扩展了模块开发的能力。
-
RDB 可存储 LFU 和 LRU 信息:提高了缓存淘汰的准确性。
-
redis-cli 中的集群管理器移植到 C 语言代码:提高了集群管理的效率。
-
新的有序集合命令:zpopmin/zpopmax 和阻塞变体,丰富了有序集合的操作。
-
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 核心代码进行了重构并在许多方面进行了改进:提高了系统的整体性能。
7、Redis 6.0
Redis 6.0 于 2020 年发布,相较于 Redis 5.0,其主要特性包括:
-
多线程 IO:引入多线程处理网络数据的读写和协议解析,但执行命令仍然是单线程,提高了系统的吞吐量。
-
client-side-caching(客户端缓存)功能:放弃了 caching slot,只使用 key names,提高了数据访问的效率。
-
支持 RESP 3:在兼容 RESP 2 的基础上,开始支持 RESP 3(Redis Serialization Protocol 是 Redis 服务端与客户端之间通信的协议),提高了通信的效率。
-
连接支持 SSL:更加安全,保护了数据传输的安全性。
-
增强 ACL 权限控制:支持对客户端的权限控制,实现对不同的 key 授予不同的操作权限,新增了一个新的 ACL 日志命令,允许查看所有违反 ACL 的客户端、访问不应该访问的命令、访问不应该访问的密钥,或者验证尝试失败,这对于调试 ACL 问题非常有用。
-
提升了 RDB 日志加载速度:提高了系统启动的速度。
-
发布官方的 Redis 集群代理模块 Redis Cluster Proxy:简化了集群的管理和访问。
-
提供了众多的新模块(modules)API:扩展了 Redis 的功能。
8、Redis 7.0
Redis 7.0 于 2022 年发布,相较于 Redis 6.0,其主要改进包括:
-
AOF 文件存储方式改变:将 AOF 文件的存储方式改为在一个文件夹下存储多个文件,提高了文件管理的灵活性。
-
RDB 文件版本升级:将持久化文件 RDB 的版本升级为 10,与之前的 RDB 文件版本不再兼容,但提供了更好的性能和功能。
-
ziplist 转换为 listpack:在读取老的 RDB 文件格式的时候,将 ziplist 转换为 listpack,这种转换发生于两种情况之下:从磁盘读取文件或者从一个主节点进行复制文件的时候,提高了数据解析的效率。
-
protected-mode 默认更改为 yes:在 redis.conf 配置文件中,只有当你希望你的客户端在没有授权的情况下可以连接到 Redis server 的时候,可以将 protected-mode 设置为 no,提高了系统的安全性。
-
ACL 中 pub/sub channel 默认被阻塞:增强了系统的安全性。
-
从节点中 TTL 时间标识为绝对时间:不再是相对时间,从而保证了过期数据被及时删除,提高了数据的一致性。
-
不再支持 gopher 协议:简化了协议支持,提高了系统的安全性。
-
当在配置文件中设置 replica-serve-stale-data=no 时,当主节点不再提供服务时,ping 命令得不到返回值:提高了系统的故障检测能力。
二、安装并启动 Redis(先了解)
在上一节中,我们大致了解了 Redis 的几个重大版本。在本教程中,我们选择 Redis 5.0 版本进行介绍,原因是 Redis 5.0 已经支持了大部分的功能特性,而且相较于 Redis 7.0 版本,更容易进行安装和使用。
需要注意的是,Redis 的官方并不支持微软的 Windows 操作系统。这是因为 Redis 的许多特性都是和操作系统紧密相关的,支持 Windows 会增加维护成本。更重要的是,大部分公司都在使用 Linux 操作系统,而 Redis 在 Linux 操作系统上的表现已经得到了实践的证明。当然,Redis 作为一款优秀的开源技术,还是吸引到了微软公司的注意。微软公司的开源技术组在 Github 上维护了一个 Redis 分支:GitHub - microsoftarchive/redis: Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes不过我们还是强烈建议大家在Linux 上使用 Redis,以获得最佳的性能和稳定性。
接下来,我们将介绍在 Linux 上安装 Redis 的方法。由于安装过程涉及多个步骤和细节,我将在后续的博客中更新详细的安装过程。本博客将简要介绍安装的两个版本选择:
-
在 Ubuntu 20.04 上安装 Redis:Ubuntu 是一款流行的 Linux 发行版,适合初学者和开发者使用。
-
在 CentOS 7/8 上安装 Redis:CentOS 是一款稳定的企业级 Linux 发行版,适合在生产环境中使用。
具体的安装步骤和配置方法,请关注后续的博客更新。我们将提供详细的安装指南和配置说明,帮助大家顺利安装并启动 Redis。
安装 Redis Redis 5 系列,在 Linux 系统下安装 Redis:
- Redis 官方不支持 Windows 版本
- 微软维护了一个 Windows 版本的 Redis 分支
- 支持 CentOS 和 Ubuntu 系统
- 推荐使用 Docker 部署
学习建议:初学阶段建议在本地安装、学习 Redis 集群功能时再使用 Docker 环境