Redis复习-------Redis数据类型

​ Redis数据类型分为5大基础数据类型和扩展数据类型,本文仅详细讲讲5大基础数据类型和4个常用的数据类型

一、基础数据类型

1.字符串(String)

​ 定义:字符串是Redis 最基础的类型,是二进制安全的字符串(可存储任意数据,如文本、数字、二进制内容),最大存储容量 512MB。

​ 其核心特性主要有:

​ 1.支持字符串 / 数字操作(自增、自减、拼接);

​ 2.支持按位操作(Bit 级);

​ 3.支持过期时间设置。

​ 而常用命令则有:

​ 1.增改:SET key value [EX 秒] [PX 毫秒](设置值,可扩展设置过期时间)APPEND key str(将str和key对应的vue拼接);

​ 2.查询:GET key(根据key获取vue)、STRLEN key(根据key获取长度);

​ 3.数字操作:INCR key(自增 1)、DECRBY key num(自减指定值)、INCRBYFLOAT key num(浮点自增);

​ 4.位操作:SETBIT key offset value(设置位)、GETBIT key offset(获取位)、BITCOUNT key(统计 1 的位数)。

​ 其适用场景主要有:

​ 1.缓存简单数据(如用户 Token、商品详情 JSON);

​ 2.计数器(如文章阅读量、接口请求量);

​ 3.分布式锁(SET key value NX EX);

​ 4.位图统计(如用户签到、活跃用户标记)。

2.哈希(Hash)

​ 定义:键值对的集合(类似 "对象"),每个 Hash 可包含多个 field-value 字段,field 和 value 都是字符串。

​ 核心特性:

​ 可单独操作某个字段(无需修改整个 Hash),底层是压缩列表(小数据)或哈希表(大数据)。

​ 常用命令:

​ 1.增改:HSET key field value(单个字段)、HMSET key field1 val1 field2 val2(多个字段);

​ 2.查询:HGET key field、HMGET key field1 field2(多个字段)、HGETALL key(所有字段)、HLEN key(字段数);

​ 3.删除:HDEL key field1 field2;

​ 4.判断:HEXISTS key field(字段是否存在)。

​ 适用场景:

​ 1.存储对象类数据(如用户信息:user:100 {name:"张三", age:20});

​ 2.部分字段更新(如仅修改用户的手机号,无需重写整个对象)。

3.列表(List)

​ 定义:有序的字符串链表,元素可重复,支持两端插入 / 弹出,底层是压缩列表(小数据)或双向链表(大数据)。

​ 核心特性:其是有序(按插入顺序),支持范围查询、阻塞操作。

​ 常用命令:

​ 1.插入:LPUSH key val1 val2(左插)、RPUSH key val1 val2(右插);

​ 2.弹出:LPOP key(左弹)、RPOP key(右弹)、BRPOP key 超时时间(阻塞右弹);

​ 3.查询:LRANGE key start end(范围获取,0 -1 表示所有)、LLEN key(长度);

​ 4.修改:LSET key index value(指定索引设值);

​ 5.删除:LREM key count value(删除 count 个值为 value 的元素)。

​ 适用场景:

​ 1.消息队列(基于 LPUSH + BRPOP 实现简单队列);

​ 2.最新消息列表(如 "用户最新评论",LPUSH 新增 +LRANGE 取前 N 条);

​ 3.栈 / 队列结构(左插左弹是栈,左插右弹是队列)。

4.集合(Set)

​ 定义:无序、唯一的字符串集合,底层是哈希表。

​ 核心特性:其可以自动去重,支持交集、并集、差集等集合运算。

​ 常用命令:

​ 1.增删:SADD key val1 val2(添加)、SREM key val1 val2(删除);

​ 2.查询:SMEMBERS key(所有元素)、SCARD key(元素数)、SISMEMBER key val(是否存在);

​ 3.集合运算:SINTER key1 key2(交集)、SUNION key1 key2(并集)、SDIFF key1 key2(差集);

​ 4.随机操作:SRANDMEMBER key [count](随机取 count 个元素)、SPOP key [count](随机删 count 个元素)。

​ 适用场景:

​ 1.标签系统(如 "用户喜欢的标签",自动去重);

​ 2.共同好友 / 兴趣统计(如 SINTER user:100:follows user:200:follows 取共同关注);

​ 3.抽奖系统(SPOP 随机抽取中奖者)。

5.有序集合(ZSet)

​ 定义:类似 Set,但每个元素关联一个 "分值(score,double 类型)",按 score 从小到大排序(score 相同则按元素字典序排序),底层是压缩列表(小数据)或跳表 + 哈希表(大数据)。

​ 核心特性:其也是有序(按 score),支持按排名 / 分值范围查询,也支持分值更新。

​ 常用命令:

​ 1.增改:ZADD key score1 val1 score2 val2(添加 / 更新);

查询:

​ 2.按排名:ZRANGE key start end [WITHSCORES](升序取排名区间)、ZREVRANGE key start end(降序);

​ 3.按分值:ZRANGEBYSCORE key min max [WITHSCORES](取分值区间);

​ 4.排名 / 分值:ZRANK key val(升序排名)、ZSCORE key val(获取分值);

​ 5.删除:ZREM key val1 val2(按元素删)、ZREMRANGEBYRANK key start end(按排名删);

​ 6.统计:ZCARD key(元素数)、ZCOUNT key min max(分值区间内的元素数)。

​ 适用场景:

​ 1.排行榜(如 "商品销量榜",ZADD 存销量为 score,ZREVRANGE 取 Top N);

​ 2.延时队列(ZADD 存任务 + 超时时间为 score,定时 ZRANGEBYSCORE 取到期任务);

​ 3.范围统计(如 "分值在 80-100 的用户")。

二、扩展数据类型

1.HyperLogLog

​ 定义:用于基数统计的概率型数据结构,不存储具体元素,仅记录 "不重复元素的近似数量",误差率约 0.81%。

​ 核心特性:其内存占用极低(无论数据量多大,仅需约 12KB),不过其结果是近似值,非精确值。

​ 常用命令:

​ 1.PFADD key val1 val2(添加元素);

​ 2.PFCOUNT key1 key2(统计基数);

​ 3.PFMERGE destkey src1 src2(合并多个 HyperLogLog)。

​ 适用场景:

​ 1.独立访客(UV)统计(如 "网站每日 UV");

​ 2.搜索关键词去重计数。

2.Geo(地理位置)

​ 定义:Geo是基于 ZSet 实现的地理位置存储类型,可存储经纬度,并支持距离计算、范围查询。

​ 核心特性:

​ 其底层复用 ZSet(将经纬度编码为 score);支持球面距离计算。

​ 常用命令:

​ 1.增:GEOADD key 经度 纬度 地点名(如 GEOADD city 116.40 39.90 beijing);

​ 2.查:GEOPOS key 地点名(获取经纬度)、GEODIST key 地点1 地点2 [unit](计算距离,unit 可选 m/km/mi/ft);

​ 3.范围查询:GEORADIUS key 经度 纬度 半径 unit [WITHCOORD] [WITHDIST](根据坐标查范围内的地点);

​ 4.基于地点查范围:GEORADIUSBYMEMBER key 地点名 半径 unit。

​ 适用场景:

​ 1.附近的人 / 商家(如 "查找我附近 5km 的餐厅");

​ 2.地理位置关联服务(如物流轨迹)。

3.Stream

​ 定义:Redis 5.0+ 新增的消息队列类型,支持持久化、消费组、消息确认等特性,是更完善的队列实现。

​ 核心特性:其支持消息持久化(写入 RDB/AOF),且其也支持消费组(多消费者协同消费,避免重复);其消息 ID 自增(格式为 时间戳-序列号);拥有消息确认机制(ACK 机制,保证消费成功)。

​ 常用命令:

​ 1.生产消息:XADD key * field1 val1 field2 val2(* 表示自动生成消息 ID);

​ 2.消费消息(单个消费者):XREAD COUNT 数量 BLOCK 超时时间 STREAMS key 起始ID(0 表示从开头读,$ 表示从最新读);

​ 3.创建消费组:XGROUP CREATE key 组名 起始ID [MKSTREAM](MKSTREAM 表示若 Stream 不存在则创建);

​ 4.消费组消费:XREADGROUP GROUP 组名 消费者名 COUNT 数量 STREAMS key >(> 表示消费未被消费的消息);

​ 5.确认消息:XACK key 组名 消息ID1 消息ID2;

​ 6.查看未确认消息:XPENDING key 组名。

​ 适用场景:

​ 1.高可靠的消息队列(如订单通知、日志同步);

​ 2.分布式系统的异步通信(如微服务间的事件通知)。

4.Bitmap(位图)

​ 定义:本质是 String 类型的扩展,将字符串的每个字节视为二进制位,通过位操作实现高效的布尔值存储。

​ 核心特性:其使用内存高效(1MB 可存储 800 多万个布尔值),支持位与 / 或 / 异或等操作。

​ 常用命令:

​ 1.SETBIT key offset value(设置某一位的值,value 为 0/1);

​ 2.GETBIT key offset(获取某一位的值);

​ 3.BITCOUNT key [start end](统计 1 的位数);

​ 4.BITOP op destkey key1 key2(位运算:op 可选 AND/OR/XOR/NOT);

​ 5.BITPOS key value [start end](查找第一个值为 value 的位的位置)。

适用场景:

​ 1.用户签到(如 sign:user:100 中,offset 为日期,1 表示签到,0 表示未签);

​ 2.活跃用户标记(如 "统计 7 天内连续活跃的用户");

​ 3.权限标记(如每个位代表一个权限,1 表示拥有)。

相关推荐
Hello World呀5 小时前
登录时,redis出现错误
数据库·redis·缓存
企鹅侠客5 小时前
第02章—先导基础篇:初识Redis
数据库·redis·缓存
DemonAvenger6 小时前
Redis哨兵模式详解:自动故障转移与高可用保障
数据库·redis·性能优化
典孝赢麻崩乐急6 小时前
Redis复习----------Redis超高性能的原因
数据库·redis·学习·缓存
汪不止6 小时前
【 分布式唯一业务单号生成方案:Redis + 数据库双保险架构】
数据库·redis·分布式
典孝赢麻崩乐急6 小时前
Redis复习-------Redis事务
数据库·redis·缓存
橘子真甜~6 小时前
Reids命令原理与应用3 - Redis 主线程,辅助线程与存储原理
网络·数据库·redis·缓存·线程·数据类型·存储结构
rchmin7 小时前
Redis Key过期删除策略详解
java·redis
此生只爱蛋7 小时前
【Redis】Zset 有序集合
数据库·redis·缓存