Redis 常见数据类型与应用场景总结

Redis 常见数据类型与应用场景总结

1. String(字符串)

特点

  • 最基本键值结构,值最大512MB
  • 支持文本/二进制数据,可存储数字
  • 底层结构:int/SDS(简单动态字符串)
  • 编码方式:int/embstr(短字符串)/raw(长字符串)

常用命令

SET key value
GET key
INCR key
DECR key
SETNX key value
MSET key1 val1 key2 val2

应用场景

  • 缓存对象(JSON格式/字段分离存储)
  • 计数器(阅读量/点赞量)
  • 分布式锁(SETNX + Lua脚本)
  • 共享Session存储

2. List(列表)

特点

  • 有序元素集合,支持双向操作
  • 底层结构:quicklist(3.2+版本)
  • 最大长度 2^32-1

常用命令

LPUSH/RPUSH
LPOP/RPOP
# 返回列表key中指定区间内的元素,区间以偏移量start和stop指定,从0开始
LRANGE key start stop

# 从key列表表头弹出一个元素,没有就阻塞timeout秒,如果timeout=0则一直阻塞
BLPOP key [key ...] timeout
# 从key列表表尾弹出一个元素,没有就阻塞timeout秒,如果timeout=0则一直阻塞
BRPOP key [key ...] timeout

应用场景

  • 消息队列(LPUSH+BRPOP)
  • 最新消息排行(LTRIM保持固定长度)
  • 阻塞队列实现

局限性:不支持消费组,消息需自行实现ID

3. Hash(哈希)

特点

  • 字段值映射表,适合存储对象
  • 底层结构:listpack(7.0+)或哈希表

常用命令

HSET key field value
HGETALL key
HINCRBY key field increment
HDEL key field

应用场景

  • 对象存储(用户信息等)
  • 购物车系统(用户ID+商品ID+数量)
  • 频繁修改的字段存储

4. Set(集合)

特点

  • 无序唯一元素集合
  • 底层结构:整数集合/哈希表
  • 支持交并差运算

常用命令

SADD key member
SINTER key1 key2
SISMEMBER key member
SPOP key

应用场景

  • 点赞/签到统计
  • 共同关注(交集)
  • 随机抽奖(SRANDMEMBER/SPOP)
  • 数据去重

5. Zset(有序集合)

特点

  • 带score排序的集合
  • 底层结构:listpack(7.0+)或跳表
  • 元素唯一,score可重复

常用命令

ZADD key score member
ZRANGE key start stop
ZREVRANK key member
ZRANGEBYSCORE

应用场景

  • 排行榜(文章热度排序)
  • 电话/姓名排序(ZRANGEBYLEX)
  • 延迟队列(score存时间戳)

6. BitMap(位图)

特点

  • 二进制位操作,极致空间利用
  • 底层基于String实现

常用命令

SETBIT key offset 1
GETBIT key offset
BITCOUNT key
BITOP AND/OR/XOR

应用场景

  • 用户签到统计
  • 活跃用户分析
  • 布隆过滤器实现

7. HyperLogLog

特点

  • 基数统计(0.81%误差率)
  • 固定12KB存储空间
  • 支持2^64元素统计

常用命令

PFADD key element
PFCOUNT key
PFMERGE destkey sourcekey

应用场景

  • 百万级UV统计
  • 大规模独立IP计数
  • 搜索词热度估算

8. GEO(地理位置)

特点

  • 基于Sorted Set实现
  • 使用GeoHash编码存储坐标
  • 支持半径查询

常用命令

GEOADD key lon lat member
GEOSEARCH key FROMLONLAT lon lat radius
GEODIST key member1 member2

应用场景

  • 附近的人/店铺查询
  • 打车服务位置匹配
  • 物流轨迹记录

9. Stream(流)

特点

  • 消息队列专用类型(5.0+)
  • 支持消息持久化/消费组
  • 自动生成全局唯一ID

常用命令

XADD key * field value
XREADGROUP GROUP group consumer
XACK key group id

应用场景

  • 消息队列(支持ACK确认)
  • 事件溯源系统
  • 日志收集管道

与专业MQ对比:内存限制,无磁盘持久化


总结对比表

数据类型特性典型场景版本
String简单键值缓存/计数器/锁1.0
List有序可重复消息队列/最新列表1.0
Hash字段映射对象存储/购物车2.0
Set无序唯一标签/社交关系1.0
Zset有序唯一排行榜/优先级队列1.2
BitMap位操作二值状态统计2.2
HyperLogLog基数估算大数据量UV统计2.8
GEO地理位置LBS服务3.2
Stream消息持久化/消费组消息队列5.0

使用建议

  1. String:简单键值场景首选,注意大value的内存消耗
  2. List:简单消息队列使用,注意消息可靠性处理
  3. Hash:字段频繁修改的对象存储,避免大hash问题
  4. Zset:排序场景必选,注意score设计
  5. Stream:需要消费组的复杂消息队列场景
  6. BitMap:二值状态统计时替代Set节省内存
  7. HyperLogLog:允许误差的大数据量统计场景
  8. GEO:地理位置相关服务直接使用内置API

注意:消息队列场景中,当消息量超过百万级或需要严格持久化时,建议使用专业MQ(如Kafka/RabbitMQ)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值