一、Bitmap 位图
位图本质是String 字符串类型的扩展 ,用一个字符串模拟 bit 数组,数组下标就是偏移量,支持位运算。 适用场景:用户签到、在线状态统计。所有位图命令以 BIT 开头。
基础命令
-
SETBIT key offset value:设置指定偏移量 bit 的值(0 或 1)SETBIT dianzan 0 1
SETBIT dianzan 1 0 -
GETBIT key offset:获取指定偏移位置的 bit 值GETBIT dianzan 0
GETBIT dianzan 1
逐个 bit 设置比较麻烦,可以直接用
SET命令配合十六进制一次性批量设置多个 bit。SET dianzan "\xF0":十六进制F0,二进制前 4 位为 1,后 4 位为 0。
统计与查找
-
BITCOUNT key:统计位图中值为 1 的 bit 数量 -
BITPOS key bit:查找第一个出现对应 bit 的偏移位置BITPOS dianzan 0
BITFIELD 位域
在位图中存储小整数,适合保存玩家等级、属性这类小数值。
# 设置无符号8位整数,下标0,值为1
BITFIELD player:1 set u8 #0 1
# 设置无符号32位整数,下标1,值为100
BITFIELD player:1 set u32 #1 100
# 获取无符号32位整数,下标1
BITFIELD player:1 get u32 #1
二、Redis 事务
Redis 事务通过 MULTI、EXEC、DISCARD 实现。
MULTI:开启事务,进入事务模式,后续命令不会立刻执行,全部放入命令队列缓存,返回QUEUED。EXEC:一次性执行队列里所有命令。DISCARD:放弃事务,清空队列。
⚠️ 重点:Redis 事务不保证全部命令执行成功 。 若队列中某条命令执行报错,不会回滚,其他正常命令依旧执行。 示例:
MULTI
SET K2 v2
GET K2
EXEC
举例:事务里
SET K3 3、SET K4 V4、SET K5 5,如果 K4 类型错误执行失败,K3、K5 依然会正常写入。
三、Redis 持久化
Redis 内存数据断电丢失,持久化就是把内存数据落盘保存,两种方案:RDB、AOF。
RDB(快照)
在指定时间间隔,把内存全部数据生成快照写入磁盘文件(dump.rdb)。
- 配置:
save指令配置触发快照条件 - 查看 rdb 文件:Linux
xxd dump.rdb查看十六进制内容 save:主线程执行,会阻塞 Redisbgsave:fork 子进程单独完成快照保存,不阻塞主线程,但依然需要耗时,无法秒级持久化- 优点:适合数据备份;缺点:存在数据丢失窗口
AOF(追加日志)
记录每一条写命令,以追加的方式写入 AOF 文件。 开启配置:appendonly yes 重启 Redis 时,重新回放 AOF 内命令恢复数据。
四、主从复制
将一台 Redis(主节点)的数据复制到其他 Redis 实例(从节点),一对多,单向复制:主写,从读。 从节点同步主节点全部数据,保持数据一致。
配置方式:
- 命令行临时配置(不推荐):
slaveof 主IP 主端口 - 修改 redis.conf 配置文件(推荐)
实操步骤:
- 复制一份主节点 redis 配置文件
- 复制新配置文件作为从节点,修改:端口、pidfile、dbfilename(区分不同实例)
- 开启
replicaof 127.0.0.1 6379指定主节点地址端口- 分别启动主、从 Redis 实例,使用
info replication查看主从状态
支持配置多个从节点。
五、哨兵模式(Sentinel)
解决主节点宕机无法自动恢复的问题,实现自动故障转移。 哨兵是独立运行的进程,三大能力:监控、通知、自动故障转移。
配置实操:
-
新建
sentinel.conf配置文件sentinel monitor master 127.0.0.1 6379 1
-
启动哨兵:
redis-sentinel sentinel.conf
- 当主节点宕机,哨兵集群内部选举出一个哨兵领导者,自动挑选新主节点,完成故障切换。
- 多哨兵节点:保证高可用,防止单点故障。