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 表示拥有)。

相关推荐
IT大白鼠1 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz1 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
lbb 小魔仙1 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
夕除1 天前
redis--018
redis
两锭子1 天前
Redis基础
redis
烟沙九洲1 天前
Redis 缓存穿透、缓存击穿、缓存雪崩
数据库·redis
字节探索1 天前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于樱花森上飞舞1 天前
【Redis】哨兵详解
java·开发语言·数据库·redis
Rain的Java大神之路2 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog2 天前
Java 接入Redis: 通用命令与键管理
java·服务器·redis