前言
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-6。INCREX 是一个新命令,它集成了自增、边界检查和过期时间,能原子性地 实现窗口计数器限流-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 的任何字段被 hset、hdel 等操作。 |
__subkeyevent@<db>__:<event> |
`<key_len>: | :` | 监听特定操作类型 。例如,监听所有 Key 上发生的 hset 事件。 |
__subkeyspaceitem@<db>__:<key>\n<subkey> |
<event> |
监听特定 Key 的特定字段 。例如,只监听 user:100 的 name 字段是否变化。 |
|
| `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-8。A是g$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聚合器
ZUNION、ZINTER等集合运算命令新增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也发布了一些实用特性,可以试试