【Redis中间件】#4 | 进阶数据类型语法

一、Bitmap 位图

位图本质是String 字符串类型的扩展 ,用一个字符串模拟 bit 数组,数组下标就是偏移量,支持位运算。 适用场景:用户签到、在线状态统计。所有位图命令以 BIT 开头。

基础命令

  1. SETBIT key offset value:设置指定偏移量 bit 的值(0 或 1)

    SETBIT dianzan 0 1
    SETBIT dianzan 1 0

  2. 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 事务通过 MULTIEXECDISCARD 实现。

  1. MULTI:开启事务,进入事务模式,后续命令不会立刻执行,全部放入命令队列缓存,返回 QUEUED
  2. EXEC:一次性执行队列里所有命令。
  3. DISCARD:放弃事务,清空队列。

⚠️ 重点:Redis 事务不保证全部命令执行成功 。 若队列中某条命令执行报错,不会回滚,其他正常命令依旧执行。 示例:

复制代码
MULTI
SET K2 v2
GET K2
EXEC

举例:事务里 SET K3 3SET K4 V4SET K5 5,如果 K4 类型错误执行失败,K3、K5 依然会正常写入。

三、Redis 持久化

Redis 内存数据断电丢失,持久化就是把内存数据落盘保存,两种方案:RDB、AOF。

RDB(快照)

在指定时间间隔,把内存全部数据生成快照写入磁盘文件(dump.rdb)。

  • 配置:save 指令配置触发快照条件
  • 查看 rdb 文件:Linux xxd dump.rdb 查看十六进制内容
  • save:主线程执行,会阻塞 Redis
  • bgsave:fork 子进程单独完成快照保存,不阻塞主线程,但依然需要耗时,无法秒级持久化
  • 优点:适合数据备份;缺点:存在数据丢失窗口

AOF(追加日志)

记录每一条写命令,以追加的方式写入 AOF 文件。 开启配置:appendonly yes 重启 Redis 时,重新回放 AOF 内命令恢复数据。

四、主从复制

将一台 Redis(主节点)的数据复制到其他 Redis 实例(从节点),一对多,单向复制:主写,从读。 从节点同步主节点全部数据,保持数据一致。

配置方式:

  1. 命令行临时配置(不推荐):slaveof 主IP 主端口
  2. 修改 redis.conf 配置文件(推荐)

实操步骤:

  1. 复制一份主节点 redis 配置文件
  2. 复制新配置文件作为从节点,修改:端口、pidfile、dbfilename(区分不同实例)
  3. 开启replicaof 127.0.0.1 6379指定主节点地址端口
  4. 分别启动主、从 Redis 实例,使用info replication查看主从状态
    支持配置多个从节点。

五、哨兵模式(Sentinel)

解决主节点宕机无法自动恢复的问题,实现自动故障转移。 哨兵是独立运行的进程,三大能力:监控、通知、自动故障转移。

配置实操:

  1. 新建sentinel.conf配置文件

    sentinel monitor master 127.0.0.1 6379 1

  2. 启动哨兵:redis-sentinel sentinel.conf

  • 当主节点宕机,哨兵集群内部选举出一个哨兵领导者,自动挑选新主节点,完成故障切换。
  • 多哨兵节点:保证高可用,防止单点故障。
相关推荐
广州山泉婚姻1 小时前
前后端分离的核心优势
前端·后端
IT_陈寒1 小时前
Vue的响应式让我加班到凌晨,问题竟出在这个不起眼的地方
前端·人工智能·后端
乱码三千1 小时前
使用 Docker-compose 搭建SRS直播中转服务端
后端·架构·github
y1su1 小时前
【Leetcode】1477. 找两个和为目标值且不重叠的子数组
数据结构·后端·算法·leetcode·职场和发展
愛芳芳2 小时前
Swagger2 多环境动态配置实战指南
java·后端·maven·springboot·swagger
JaguarJack2 小时前
PHP 8.6 只是个小版本,三十项弃用却已在为 PHP 9.0 铺路
后端·php·服务端
BingoGo2 小时前
PHP 8.6 只是个小版本,三十项弃用却已在为 PHP 9.0 铺路
后端·php
Bs_MoneyMagnet6 小时前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
AlienZHOU10 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试