IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【Redis】Redis7.0新特性汇总(详细) -> 正文阅读

[大数据]【Redis】Redis7.0新特性汇总(详细)

Redis 7.0 RC1

Redis 7.0包含一系列面向用户的新特性、显著的性能提升和诸多其他改进、也包含一些对旧版本向后兼容性存在潜在破坏的改变,我们强烈建议用户在升级之前认真检阅发行笔记,用户需要特别关心的有以下几点:

  • Redis 7将以在一个文件夹下、多个文件的方式存储AOF文件;
  • Redis 7将RDB文件的版本升级为10,与之前的RDB文件版本不再兼容;
  • 当加载较旧的RDB文件时,Redis 7会即时地将ziplist编码的key转为listpacks,这种转换适用于从磁盘加载文件或从master节点复制文件,当然也会略微增加加载时间;
  • 参阅后面提到的破坏性变更的部分。

新特性

  • Redis Functions:Redis函数,一种新的通过服务端脚本扩展Redis的方式,函数与数据本身一起存储。函数还被持久化到AOF文件,并从主文件复制到副本,因此它们与数据本身一样持久,见:https://redis.io/topics/functions-intro;

  • ACL改进:支持基于key的细粒度的权限,允许用户支持多个带有选择器的命令规则集,见:https://redis.io/topics/acl#key-permissions 和https://redis.io/topics/acl#selectors;

  • sharded-pubsub:分片发布/订阅支持,之前消息会在整个集群中广播,而与订阅特定频道/模式无关。发布行为会连接到集群中的所有节点,而不用客户端连接到所有节点都会收到订阅消息。见 https://redis.io/topics/pubsub#sharded-pubsub

  • 在大多数情况下把子命令当作一类命令处理(Treat subcommands as commands)(影响 ACL类别、INFO 命令统计等)

  • 文档更新:提供命令的元数据和文档,文档更完善,见https://redis.io/commands/command-docs 、https://redis.io/topics/command-tips

  • Command key-specs:为客户端定位key参数和读/写目的提供一种更好的方式;

  • 多部分 AOF 机制避免了 AOF 重写的开销;

  • 集群支持主机名配置,而不仅仅是 IP 地址;

  • 客户端驱逐策略:改进了对网络缓冲区消耗的内存的管理,并且提供一个选项,当总内存超过限制时,剔除对应的客户端;

  • 提供一种断开集群总线连接的机制,来防止不受控制的缓冲区增长;

  • AOF:增加时间戳和对基于时间点恢复的支持;

  • Lua:支持 EVAL 脚本中的函数标志;

  • Lua:支持 Verbatim 和 Big-Number 类型的 RESP3 回复;

  • Lua:可以通过 redis.REDIS_VERSION、redis.REDIS_VERSION_NUM来获取 Redis 版本。

Redis命令变化

详情查阅:https://redis.io/commands/

用户相关

  • 新增命令:

    • ZMPOP:ZMPOP numkeys key [key …] MIN | MAX [COUNT count] 从提供的key列表对应的第一个非空zset中,pop一个或多个元素(member-score pairs)

    • BZMPOP:ZMPOP的阻塞形式。

    • LMPOP:LMPOP numkeys key [key …] LEFT | RIGHT [COUNT count] 从提供的key列表对应的第一个非空list中,pop一个或多个元素

    • BLMPOP:LMPOP的阻塞形式

    • SINTERCARD:SINTERCARD numkeys key [key …] [LIMIT limit] 此命令类似于SINTER,但它不返回结果集,只返回结果的基数。返回由所有给定集合的交集产生的集合的基数。

    • ZINTERCARD:ZINTERCARD numkeys key [key …] [LIMIT limit] 此命令和ZINTER类似,但它不返回结果集,只返回结果的基数。

    • SPUBLISH:SPUBLISH channel message 将消息发布到指定的分片channel。

    • SSUBSCRIBE:SSUBSCRIBE channel [channel …] 将客户端订阅到指定的分片channel。

    • SUNSUBSCRIBE:SUNSUBSCRIBE [channel [channel …]] 从给定的分片channel取消客户端订阅,如果没有,则从所有channel取消客户端订阅。

    • PUBSUB SHARDCHANNELS:PUBSUB SHARDCHANNELS [pattern] 列出当前活动的分片channel。

    • PUBSUB SHARDNUMSUB:PUBSUB SHARDNUMSUB [channel [channel …]] 返回指定分片channel的订阅数,在没有channel参数的情况下调用此命令是有效的,在这种情况下,它只会返回一个空列表。

    • EXPIRETIME:EXPIRETIME key 返回给定key过期的绝对Unix时间戳(自1970年1月1日起),以秒为单位。

    • PEXPIRETIME:PEXPIRETIME key 与EXPIRETIME具有相同的语义,但返回绝对Unix过期时间戳(以毫秒为单位,而不是以秒为单位)。

    • EVAL_RO:这是EVAL命令的只读形式,无法执行修改数据的命令(RO:Read-Only)。

    • EVALSHA_RO:EVALSHA命令的只读形式。

    • FUNCTION:函数命令的容器命令,使用FUNCTION HELP可以查看相关的命令

    • FCALL:调用一个方法

    • FCALL_RO:调用一个只读方法

  • 命令变更:

    • EXPIRE 命令组支持 NX/XX/GT/LT 选项

      • NX:key没有过期时间才可以设置过期时间
      • XX:key已经存在过期时间才可以设置过期时间
      • GT:新的过期时间大于当前的才设置
      • LT:新的过期时间小于当前的才设置
    • SET 命令支持组合 NX 和 GET 标志:SET key value … NX GET

    • BITPOS, BITCOUNT 接受 BIT 索引

    • SORT_RO 命令在只读副本上运行

    • SHUTDOWN 支持参数 NOW、FORCE、ABORT

      • NOW:跳过等待滞后的副本
      • FORCE:忽略通常会阻止服务器退出的任何错误
      • ABORT:取消正在进行的关机操作,并且不能与其他标志组合
    • CONFIG SET/GET 可以在一次调用中自动处理多个配置

    • QUIT 提升为真正的命令,HOST: 和 POST 从命令列表中降级

    • XADD 通过 -* 支持自动序列号

管理相关

  • 新增命令:

    • COMMAND DOCS:返回有关命令的文档信息。默认情况下,回复包含服务器的所有命令。可以使用可选的命令名参数指定一个或多个命令的名称;

    • COMMAND LIST:返回一个服务端命令名称的数组

    • LATENCY HISTOGRAM:以直方图的形式为每个指定的命令名报告延迟的累积分布。如果未指定命令名,则将回复包含延迟信息的所有命令

    • CLUSTER LINKS:Redis集群中的每个节点都与集群中的每个对等方保持一对长时间存活的TCP链路:一个用于向对等方发送出站消息,另一个用于接收来自对等方的入站消息,CLUSTER LINKS将所有此类对等链接的信息输出为一个数组,其中每个数组元素都是一个映射,其中包含单个链接的属性及其值。

    • CLUSTER DELSLOTSRANGE:根据指定范围删除集群中node上的槽位,参数为槽位范围列表,也就是说可以同时操作多个槽位范围,下同

    • CLUSTER ADDSLOTSRANGE:在node上添加指定范围的槽位

    • CLIENT NO-EVICT:参数为ON或者OFF,当打开并且配置了客户端驱逐时,及时当前客户端达到了所配置的客户端驱逐条件,也不会被驱逐,关闭则正常执行驱逐流程

    • ACL DRYRUN:模拟指定用户执行给定的命令。此命令可用于测试给定用户的权限而无需启用该用户,且避免运行该命令的副作用

  • 命令变更:

    • COMMAND INFO:可以没有参数,返回所有命令的信息
    • SLOWLOG GET:支持传入-1,获取所有条目

命令返回值变化

  • COMMAND 和 COMMAND INFO 扩展了提示、关键字和子命令
  • ACL CAT、COMMAND LIST 列出子命令
  • OBJECT ENCODING 返回 listpack 而不是 ziplist
  • 集群分片支持主机名
  • COMMAND 命令:添加blocking和module标志
  • MODULE LIST 回复包括路径和参数

值得注意的变更

  • 将bind参数修改为非默认值,将不再隐式禁用protected-mode
  • 删除EVAL脚本逐字复制、传播和删除执行逻辑
  • ACL:发布/订阅频道默认被阻塞 (acl-pubsub-default=resetchannels)
  • SCRIPT LOAD 和 SCRIPT FLUSH 不再传播到副本/AOF
  • ACL:在启动文件和命令行参数中声明重复的 ACL 用户将导致错误(之前最后一个声明将覆盖其他声明)
  • 主从复制:TTL 总是被复制为绝对(非相对)毫秒时间戳
  • 在可写副本上,对于过期的key,处理多键命令会先触发过期逻辑
  • CONFIG SET maxmemory 在开始驱逐逻辑之前返回
  • AOF: 新的 Multi-Part 机制将数据作为一组多个文件的集合存储在指定文件夹中
  • 删除STRALGO命令,保留LCS命令,但仅作为作用于key的独立命令
  • 移除gopher协议支持
  • 为了更好的安全性,默认禁用MODULE和DEBUG命令
  • 拒绝 MULTI/EXEC 事务中的快照创建和其他管理命令
  • 当replica-serve-stale-data=no时,PING现在被-MASTERDOWN拒绝
  • ACL GETUSER的返回结果现在对keys和channels使用ACL语法
  • COMMAND的返回结果删除randomsort-for-scripts标志,现在作为命令提示的一部分
  • 对不存在的列表,带计数的 LPOP/RPOP 返回空数组
  • INFO commandstats现在可展示每个子命令的统计信息
  • ZPOPMIN/ZPOPMAX命令用在非zset类型、count为0时,会报错
  • LPOP/RPOP用于在count为0时返回错误
  • CONFIG GET bind 返回当前的有效值,即使使用了隐式的默认值
  • CONFIG REWRITE命令将模块作为loadmodule选项重写到配置文件中,以防有人在运行时使用模块加载或卸载命令
  • 配置项repl-diskless-sync现在默认是yes
  • 关闭时,Redis可以选择等待副本在复制链路上赶上
  • 大多数命令,如CONFIG SET, REWRITE, RESETSTAT允许在加载时执行
  • READONLY 和 READWRITE允许在加载时或者旧的副本上执行
  • 修复SELECT, WAIT, ROLE, LASTSAVE, READONLY, READWRITE, ASKING等命令的ACL分类
  • 使在未经认证的连接上,现在也允许RESET
  • SCRIPT LOAD允许在旧的副本上执行

改进与优化

安全性

  • 敏感的命令和配置默认被禁用了;
  • 更改配置项 bind 和保护模式的安全性;
  • Sentinel模式下避免记录auth-pass值;
  • Redis-cli:敏感命令绕过历史文件。

性能和资源利用率

  • 集群模式下内存消耗和延迟有显著改善;
  • 在使用多个哈希或zset键的情况下,可以显著节省内存;
  • 复制积压和副本使用一个全局共享复制缓冲区;
  • 显著减少了copy-on-write的内存开销;
  • 释放集群发送缓冲区中未使用的容量;
  • 充分利用客户端结构内存进行回复缓冲;
  • 在Hash、List、Zset中用listpack替换ziplist;
  • List类型可以支持存储4GB以上的元素;
  • 按模块为阻塞的客户端重用临时客户端对象;
  • 移除命令参数计数限制,动态增长argv缓冲区;
  • 优化列表类型操作;
  • 改进fsync,避免对磁盘的大量写入;
  • BITSET 和 BITFIELD SET仅在值实际更改时传播;
  • 改善客户端被模块计时器解除阻塞时的延迟;

平台/工具链支持相关

  • jemalloc 升级到 5.2.1
  • 修复NetBSD和OpenBSD上的RSS指标;
  • 检查macOS、FreeBSD和OpenBSD上的somaxconn(系统中每一个端口最大的监听队列的长度)系统内核参数设置;
  • MacOS上更好的fsync,提高停电安全性。

其他

  • master重启后,支持部分同步;
  • redis启动时,即使没有加载文件,也会创建一个基础的AOF文件;
  • 在repl-diskless-load=swapdb期间,副本继续提供数据,以获得更好的可用性;

ACL工具变化

  • redis-cli --json:增加 -2 选项;
  • redis-cli --scan:添加休眠间隔选项;
  • redis-cli --replica:跳过 RDB 生成;
  • redis-cli --functions-rdb:仅生成带函数的 RDB;
  • redis-cli -X:从标准输入中获取任意参数;
  • redis-benchmark -x:从标准输入获取参数;
  • redis-benchmark:添加 URI 支持;
  • redis-cli monitor和pubsub 可以使用 Ctrl+C 中止,保持 cli 活动。

配置项变更

  • CONFIG SET/GET 命令在一次调用中可以处理多个配置;

  • 对于include配置项,支持全局模式匹配;

  • shutdown-timeout:关闭时等待复制副本的最长时间,默认10秒、未启用,仅当实例有副本时才适用;

  • maxmemory-clients:配置允许限制所有客户端的总内存使用量,默认未启用,可以配置实际的使用量(如1g),也可以配置相对于配置项maxmemory的百分比(1%~100%),当客户端连接占用内存超过改配置时,服务端会执行剔除客户端连接操作,尝试优先剔除内存占用最高的,这也成为客户端驱逐(client eviction)策略;

  • cluster-port:群集端口是群集总线将侦听入站连接的端口。默认为0、未启用,当设置为默认值0时,它将绑定到命令端口 +10000。设置此值需要您在执行cluster meet时指定群集总线端口;

  • bind-source-addr:默认情况下,传出连接(从副本到主机、从Sentinel到实例、集群总线等)不绑定到特定的本地地址。在大多数情况下,这意味着操作系统将根据路由和连接所通过的接口来处理。使用bind source addr可以配置要绑定到的特定地址,这也可能会影响连接的路由方式,默认未启用。

  • busy-reply-threshold:单位毫秒,默认值为5000,即5秒、未启用,和lua-time-limit功能相同,配置在Redis开始处理或拒绝其他客户端之前,EVAL脚本、函数以及某些情况下模块命令的最长时间;

  • repl-diskless-sync-max-replicas:如果启用无盘复制时存在延迟,则如果预期已连接的复制副本数量达到最大,则可以在达到最大延迟之前启动复制。默认值为0、启用,表示未定义最大值;

  • cluster-announce-hostname:集群可以使用此配置配置其公布的主机名,默认为空字符,未启用;

  • cluster-preferred-endpoint-type:集群公布客户端连接的方式,该配置有三个选项:‘ip’、‘hostname’、 ‘unknown-endpoint’,默认为ip,未启用;

  • latency-tracking:Redis 扩展的延迟监控可跟踪每个命令的延迟,延迟的开销非常小,并可通过INFO latencystats命令导出百分比分布,以及通过LATENCY命令导出直方图。默认为yes、未启用。

  • latency-tracking-info-percentiles:设置导出的数据百分比点,默认为:50 99 99.9;

  • cluster-allow-pubsublocal-when-down:这个配置项在最新的(7.0-rc3)配置文件中没找到,但是有cluster-allow-pubsubshard-when-down,默认为yes、未启用,当设置为yes时,允许节点在集群处于down状态时为pubsub shard流量提供服务,前提是它认为自己拥有这些槽位,这对于即使集群全局不处于稳定状态,应用程序仍想要使用pubsub功能会很有用;

  • cluster-link-sendbuf-limit:集群链路发送缓冲限制,是单个群集总线链路发送缓冲区内存使用量的限制,以字节为单位。如果超过此限制,群集链接将被释放。这主要是为了防止发送缓冲区在指向慢速对等方的链接上无限增长(例如,PubSub消息被堆积),默认为0、未启用,此限制处于禁用状态,当INFO中’mem_cluster_links’字段或’cluster links’命令输出中的’send buffer allocated’条目持续增加时,启用此限制;

  • 旧的ziplist相关配置改成了对应的listpack:list-max-listpack-*, hash-max-listpack-*, zset-max-listpack-* 。

INFO字段和自检命令变化

  • INFO:

    • 新的选项INFO latencystats,查看命令的延迟统计信息;

    • 新的指标项

      • total_active_defrag_time:内存碎片超过限制的总时间(以毫秒为单位)

      • current_active_defrag_time:自上次内存碎片超过限制以来经过的时间(以毫秒为单位)

      • total_eviction_exceeded_time:自服务器启动以来,已使用内存大于maxmemory的总时间

      • current_eviction_exceeded_time:自上次使用的内存超过maxmemory以来经过的时间,以毫秒为单位

      • evicted_clients:由于maxmemory-clients限制而被逐出的客户端数

      • mem_cluster_links:启用群集模式时,链接到群集总线上的对等方所使用的内存

      • total_cluster_links_buffer_limit_exceeded:这个在官方文档中未查询到,待实践

      • current_cow_peak:运行子fork时,写时复制内存的峰值大小(字节)

    • 移除了aof_rewrite_buffer_length;

    • 显示RESP版本信息;

  • INFO MEMORY:

    • 对Functions和EVAL脚本显示单独的内存使用;
    • 添加mem_total_replication_buffers:复制缓冲区消耗的总内存
    • 更改mem_clients_slaves的含义:副本客户端使用的内存——从Redis 7.0开始,副本缓冲区与复制积压共享内存,因此当副本未触发内存使用增加时,此字段可以显示0
  • MEMORY STATS:在群集模式下报告插槽到key的映射大小;

  • CLIENT LIST:

    • 增加tot-mem:此客户端在其各种缓冲区中消耗的总内存
    • multi-mem:缓冲的多个命令所消耗的内存
    • 显示RESP版本信息;
  • SENTINEL INFO:(官方文档中未找到该命令)

    • 增加tilt_mode_since:
  • LATENCY:追踪module-acquire-GIL延迟。

参考:

https://raw.githubusercontent.com/redis/redis/7.0/00-RELEASENOTES

https://github.com/redis/redis/blob/unstable/redis.conf

https://redis.io/commands/

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:56:15  更:2022-04-28 11:58:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:38:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码