Redis7.0到底有什么变化?

494 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

此前闹得沸沸扬扬Dragonfly,不知道jym听说没有。

Dragonfly为最近的开源的内存数据缓存系统,用 C/C++ 编写。据说Dragonfly 可能是世界上最快的内存存储系统,它提供了对 Memcached 和 Redis 协议的支持,但能够以更高的性能进行查询,运行时内存消耗也更少。与 Redis 相比,Dragonfly 在典型工作负载下实现了 25 倍的性能提升。

对此Redis官方回应,请用Redis7.0对比。好的,我们就一起来学习Redis7.0的新特性。

Redis7.0新特性:

  • 新增Function自定义函数库,函数库支持持久化与可复制。
  • Lua脚本(脚本本身代码)不再支持持久化和复制,仅对命令执行结果进行持久化和复制。
  • ACL支持对Pub/Sub channel的权限控制。
  • 支持Multi-Part AOF。
  • 支持Client-Eviction。
  • 支持Sharded-Pub/Sub。
  • 支持命令执行耗时直方图。
  • 支持子命令级别的性能统计。
  • Ziplist编码替换为Listpack编码。
  • 支持Global Replication Buffer。

性能提升

我们比较关注的性能提升,来look look:

  • Hash、List、ZSet 这些数据结构底层本来是依赖 ziplist 的,在这个版本里面,已经修改成了 listpack。
  • 列表(List)的数据类型可以存储超过4GB的单个元素
  • 降低了copy-on-write期间的内存使用
  • 在使用大量散列(Hash)或者有序集合(Zset)时节省了大量的内存

官方: image.png 我给jym翻译一下: image.png

新增命令

新增ZMPOP, BZMPOP,LMPOP, BLMPOP等新命令,对于EXPIRE和SET命令,新增了更多的命令参数选项。 例如,ZMPOP的格式如下: ZMPOP numkeys key [key ...] MIN|MAX [COUNT count],而BZMPOP是ZMPOP的阻塞版本。

更多命令请查看Redis官方文档

配置更新

  • 允许忽略副本上的磁盘持久性错误(#10504)

  • 当副本无法执行主机发送的命令时,允许死机中止(#10504)

  • 允许配置SIGTERM和SIGINT的关闭标志(#10594)

  • 允许将操作系统特定标识符附加到Redis套接字(#10349)

7.0版本更新内容更多详情请查看官方文档

Redis VS Dragonfly

说了这么多,Redis和Dragonfly到底谁更牛掰呢?当然是Redis。和Redis7比较,Redis 的吞吐量比 Dragonfly高 18% - 40%。 Redis VS Dragonfly.png

7.0.1更新特性:

  • 添加怀疑系统时钟源设置缓慢的警告
  • 添加--检查系统命令行选项。(#10636)
  • 允许只读脚本(*_RO命令和没有写入标志的命令)
  • 在客户端暂停写入期间(#10744)
  • 在EVAL_RO、EVALSHA_RO和FCALL_RO的COMMAND命令中添加只读标志(#10728)
  • redis服务器命令行参数现在接受一个带空格的字符串对于多参数配置(#10660) image.png

官方目前已经更新到7.0.5 image.png 各版本更新内容请看 Redis发布更新内容