redis 8.0-M02版本发布更新了什么?为啥使用redis?
为什么要使用redis
在当今这个信息爆炸的时代,数据的处理速度和效率成为了企业成功的关键。然而,传统的数据库往往无法满足快速响应和高并发的需求,这就引出了一个矛盾:我们需要更快的存储和检索方式,但又不想牺牲数据的完整性和可靠性。Redis作为一个高性能的内存数据库,正是为了解决这一矛盾而生。它不仅提供了极低的延迟和高吞吐量,还支持丰富的数据结构,使得开发者能够灵活地应对各种复杂的应用场景。选择Redis,意味着选择了速度与灵活性的完美结合。
redis是什么
Redis是一个开源的高性能键值存储数据库,主要用于缓存和实时数据处理。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等,能够满足不同场景下的需求。由于其在内存中操作数据,Redis提供了极快的读写速度,适合用于需要高并发和低延迟的应用。
入门示例
想象一下,你正在开发一个社交媒体应用,用户在发布动态时需要即时更新他们的关注者列表。使用Redis,你可以将用户的关注者列表存储为一个集合,每当用户发布新动态时,应用可以快速地从Redis中检索出所有关注者,并将动态推送给他们。以下是一个简单的代码示例:
import redis
# 连接到Redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 用户发布动态
user_id = 'user:123'
post = 'Hello, world!'
# 将动态存储到Redis
r.lpush(f'posts:{user_id}', post)
# 获取用户的所有动态
posts = r.lrange(f'posts:{user_id}', 0, -1)
print(posts)
在这个示例中,我们使用Redis的列表数据结构来存储用户的动态,并且能够快速地检索和更新。
redis 8.0-M02版本更新了什么
Redis 8.0-M02版本引入了显著的性能改进,并且现在在Docker Hub上提供了Alpine和Debian的Docker镜像。Redis查询引擎现在支持水平和垂直扩展,以应对搜索、查询和向量工作负载。此外,未来的预发布版本将引入更多的发行版和升级路径。
更新日志
这是Redis社区版8.0的第二个里程碑版本。里程碑版本是非功能完整的预发布版本,不适合生产环境使用。一旦功能完整,我们将发布RC1。
亮点:
8.0-M02引入了显著的性能改进。Alpine和Debian的Docker镜像现在可以在Docker Hub上获取。未来的预发布版本将引入更多的发行版。此外,Redis查询引擎现在支持搜索、查询和向量工作负载的水平和垂直扩展。
支持的升级路径(通过复制或持久性)到8.0-M02
- 从之前的Redis版本(无模块)
以下升级路径(通过复制或持久性)到8.0-M02尚未测试,将在未来的预发布版本中引入:
- 从带模块的之前Redis版本(如RediSearch、RedisJSON、RedisTimeSeries、RedisBloom)
- 从Redis Stack 7.2或7.4
安全修复
- (CVE-2024-31449) Lua库命令可能导致堆栈溢出和潜在的远程代码执行。
- (CVE-2024-31227) 由于格式错误的ACL选择器可能导致拒绝服务。
- (CVE-2024-31228) 由于无界模式匹配可能导致拒绝服务。
错误修复
- 修复了在没有过期字段的哈希上使用RENAME/MOVE/SWAPDB/RESTORE时的键引用。
- 修复了在无触摸模式下从脚本调用TOUCH命令的问题。
- 修复了由于混合分片ID和非分片ID版本导致的集群节点配置损坏。
- 修复了SORT命令中的GET #选项。
模块API
- 扩展了RedisModule_OpenKey,以读取过期键和子键。
性能和资源利用改进
- 优化了ZADD和ZRANGE*命令。
- 优化了在列表包或整数集编码情况下的SSCAN命令。
- 优化了在列表包编码情况下的HSCAN/ZSCAN命令。
- 优化了大量依赖于bulk/mbulk回复的命令(例如LRANGE)。
- 避免冗余的临时字典使用,以优化ZUNION[STORE]和SUNION/SDIFF命令。
- 减少了在连续调用addReply*时对prepareClientToWrite的冗余调用。
注意事项
- 未来的预发布版本将引入更多的发行版、升级路径、功能和改进。
- 随着8.0的GA发布,我们将弃用Redis Stack。
总结
Redis 8.0-M02版本带来了显著的性能提升和新的功能支持,尤其是在Docker镜像的可用性和查询引擎的扩展性方面。随着未来版本的发布,用户将能够享受到更多的功能和更好的性能。
来源: