Redis8.8新特性

前言

Redis8.8新增了一些特性,可以学习参考

Redis8.8新特性

Redis官网

可以查阅Redis官网

ruby 复制代码
https://redis.io/docs/latest/develop/whats-new/8-8/

Redis8.8安装

为了方便,采用docker镜像安装部署,以下是安装命令

配置redis.conf

1、在路径/opt/redis/conf/下,新增一个redis.conf

内容为

bash 复制代码
# ===== 网络 =====
bind 0.0.0.0
port 6379
protected-mode yes

# ===== 安全 =====
requirepass YourStrongP@ssw0rd!

# ===== 持久化 =====
# RDB 快照策略
save 900 1
save 300 10
save 60 10000
dir /data

# AOF 持久化
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

# ===== 内存管理 =====
maxmemory 2gb
maxmemory-policy allkeys-lru

# ===== Redis 8.8 新特性相关 =====
# 开启 Hash 字段级通知(需包含 K 和 h,且开启细分事件)
notify-keyspace-events "KEA"

# ===== 日志 =====
loglevel notice
logfile ""

# ===== 其他 =====
tcp-backlog 511
timeout 300
tcp-keepalive 300

**备注:**Redis上面有密码

docker安装

执行下面docker指令

bash 复制代码
docker run -d   --name redis-8.8.1   --restart unless-stopped   -p 6379:6379   -v /opt/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:ro   -v /opt/redis/data:/data   redis:8.8.1   redis-server /usr/local/etc/redis/redis.conf

redis镜像尽量用最新,别用8.8.0版本,安装成功之后,会有以下结果

进入到容器里面执行指令

进入容器
bash 复制代码
docker exec -it 容器id /bin/bash

进入到容器里面

进入redis客户端

执行

bash 复制代码
cd /usr/local/bin
启动客户端
复制代码
redis-cli

Redis8.8新特性

ARSET

Redis 8.8 引入了原生的 Array 数据结构,支持按 O(1) 时间复杂度进行索引读写,且存储非常紧凑

执行

arduino 复制代码
ARSET myarray2 0 "first" 1 "second"

执行

复制代码
ARGET myarray2 0
复制代码
ARLEN myarray2
INCREX

限流是 Redis 的常见场景,但此前通常需要编写复杂的 Lua 脚本-3-6INCREX 是一个新命令,它集成了自增、边界检查和过期时间,能原子性地 实现窗口计数器限流-1-4

💡 例子:限制每分钟最多处理100个请求

shell 复制代码
# 限制接口 /api/login 每分钟最多调用 100 次
# 该命令尝试将计数器增加 1,如果结果超过 100,操作会被拒绝
INCREX rate:api:login EX 60 UBOUND 100
# 返回: (新计数器值, 实际增加的数值)
# 当计数器超过100,该命令会返回错误或特殊响应,以拒绝本次请求
Hash 变更通知更细

四种频道类型与消息格式

这是字段级通知的核心。与旧版只有 __keyspace@<db>__:<key>__keyevent@<db>__:<event> 两种频道不同,Redis 8.8 新增了四种专用频道,提供了极大的灵活性-2-9

频道格式 消息载荷(Payload)内容 典型使用场景
__subkeyspace@<db>__:<key> ` :` 监听特定 Key 的所有字段变化 。例如,监听 user:100 这个 Hash 的任何字段被 hsethdel 等操作。
__subkeyevent@<db>__:<event> `<key_len>: :` 监听特定操作类型 。例如,监听所有 Key 上发生的 hset 事件。
__subkeyspaceitem@<db>__:<key>\n<subkey> <event> 监听特定 Key 的特定字段 。例如,只监听 user:100name 字段是否变化。
`subkeyspaceevent@: ` <subkey_len>:<subkey> 监听特定 Key 的特定事件 。例如,只监听 user:100 发生的 hdel 事件。

消息格式说明

  • 消息载荷中,字段名采用 长度前缀编码<len>:<subkey>),以支持二进制安全的字段名-2-8
  • 当操作涉及多个字段时(如 HMSET),载荷中会包含多个 <len>:<subkey>,用逗号 分隔-8。 要启用 Redis 8.8 的 Hash 字段级通知,notify-keyspace-events 配置必须同时包含数据类型的标志和频道类型的标志 -8

你之前的命令 CONFIG SET notify-keyspace-events STIV 只开启了频道类型(S T I V),但缺少了最重要的数据类型标志 h (代表 Hash 命令)-4-8。这正是收不到消息的根本原因。

🔧 正确的配置方法

你需要执行以下命令来开启配置:

arduino 复制代码
redis-cli config set notify-keyspace-events hSTIV

或者启用所有常用的数据类型和所有子键频道类型:

arduino 复制代码
redis-cli config set notify-keyspace-events AKEhSTIV

注意 :这里的 h 标志不是指 "hash 数据结构",而是指会触发这些通知的 "hash 命令" -4-8Ag$lshztdxea 的别名,代表几乎所有标准事件类型。

执行

arduino 复制代码
config set notify-keyspace-events AKEhSTIV

执行

ruby 复制代码
PSUBSCRIBE __subkeyspace@0__:user:100

然后另起一个客户端执行

sql 复制代码
HSET user:100 aa  98

这个时候,会看到

XNACK:流消息的显式拒绝与释放

在 Redis Streams 中,当一个消费者无法处理某条消息时,以前只能让它继续留在待处理列表(PEL)中,直到超时后被其他消费者认领,这会造成延迟-3。新命令 XNACK 允许消费者显式地拒绝(NACK) 一条消息,并立即将其释放,以便其他消费者可以重新处理-1-4

XNACK 支持三种模式,让失败处理更精细-3

  • SILENT:用于内部错误,下次可被其他消费者重试。
  • FAIL:用于资源不足,消息可被其他资源充足的消费者尝试。
  • FATAL:用于消息格式错误,将其标记为"毒药消息",便于归入死信队列。
bash 复制代码
XNACK key group <SILENT | FAIL | FATAL> IDS numids id [id ...]

正确的命令格式和示例

你需要先指定一种模式(SILENT, FAIL, 或 FATAL),然后加上 IDS 关键字,并指明要操作的消息数量。一个正确的命令如下-1

复制代码
XNACK mystream mygroup FAIL IDS 1 1526569435-0

这个命令会以 FAIL 模式(意味着当前消费者无法处理该消息)释放 ID 为 1526569435-0 的消息,让它能被组内其他消费者重新处理。

时序查询更省请求:单命令多聚合

Redis 8.8 支持 Time Series 范围查询一次返回多个聚合结果。

更新前

less 复制代码
TS.RANGE metrics:a:api - + AGGREGATION min 60000
TS.RANGE metrics:a:api - + AGGREGATION avg 60000
TS.RANGE metrics:a:api - + AGGREGATION max 60000

更新后

arduino 复制代码
TS.RANGE metrics:a:api - + AGGREGATION min,avg,max 60000
JSON.SET FPHA

Redis 8.8 给 JSON.SET 增加了 FPHA,可以显式指定齐次浮点数组的内部类型。

更新前

javascript 复制代码
JSON.SET user:1001 $ '[1.0,2.0,3.0]'

以前只能把数字数组写进去,但没法明确告诉 Redis 这是一组应该按哪种浮点类型存储的数值数组。

更新后

javascript 复制代码
JSON.SET user:1001 $ '[1.0,2.0,3.0]' FPHA FP16
COUNT聚合器

ZUNIONZINTER等集合运算命令新增COUNT聚合器,可以统计元素在输入集合中出现的次数。

vbnet 复制代码
ZADD set1 1 "a" 2 "b"
ZADD set2 1 "b" 3 "c"
# 交集,并统计每个元素出现的次数
ZINTER dest key 2 set1 set2 AGGREGATE COUNT
ZRANGE dest 0 -1 WITHSCORES  # 输出: "b" (score为2,表示在2个集合中出现)
搜索与查询增强
  • FT.HYBRID :支持CANDIDATES_PER_SHARD参数,可限制每个分片的候选向量数,减少集群模式下的开销。
  • FT.PROFILE :新增对混合查询(FT.HYBRID)的性能分析支持。
  • FT.AGGREGATE :新增组内排序归约器(COLLECT),可在分组后对文档进行排序。

bash

复制

下载

perl 复制代码
# 混合查询,限制每分片候选数为100
FT.HYBRID idx "*" "vector_field" KNN 10 "query_vector" CANDIDATES_PER_SHARD 100

# 性能分析混合查询
FT.PROFILE idx HYBRID QUERY "..." 

# 分组后收集并排序(示例概念)
FT.AGGREGATE idx "*" GROUPBY 1 @category REDUCE COLLECT 1 @score 

总结

Redis8.8也发布了一些实用特性,可以试试

相关推荐
geovindu1 小时前
java:Observer Pattern
java·开发语言·后端·观察者模式·设计模式·行为模式
云飞云共享云桌面1 小时前
钣金制造研发优化:不采购传统工作站,实现 SolidWorks 团队共用服务器开展三维建模
运维·服务器·网络·数据库·3d·制造
山甫aa1 小时前
【从零开始的 Web 后端学习】令牌技术一篇搞定(JWT 登录认证保姆级)
后端·学习·spring·web·jwt
wxwx_bscxy3221 小时前
springboot巡更系统10192
java·spring boot·后端·巡更系统
YUJIANYUE1 小时前
AspFox-类NetBox的ASP+Access迷你单文件服务器V202609
运维·服务器
lmy_loveF1 小时前
go 切换go version 版本
开发语言·后端·golang
harmony&1 小时前
DevOps 实战:从概念到 CI/CD 持续交付全流程
运维·ci/cd·devops
皮卡丘不断更1 小时前
视频自动剪、内容自动发:我的多平台营销自动化工作台
大数据·运维·自动化·视频剪辑·营销自动化·多平台运营·creatorhub
行者全栈架构师1 小时前
Spring Boot + FFmpeg 视频批量处理实战:压缩、HLS切片与异步任务引擎
后端