菜鸟笔记
提升您的技术认知

redis 常见数据类型-ag真人官方网

redis 常见数据类型

数据类型 特点 典型命令 应用场景 底层实现 内存优化建议
字符串
(string)
– 最基础类型
二进制安全(可存储图片、json 等)
– 最大支持 512mb
set key value
get key
incr key
mset k1 v1 k2 v2
– 缓存(如用户信息)
– 计数器(点赞数、访问量)
– 分布式锁(setnx
– 短字符串:embstr 编码(一次内存分配)
– 长字符串:raw 编码(两次内存分配)
– 避免大字符串(>10kb)
– 批量操作使用mset/mget
哈希
(hash)
– 键值对集合(field→value)
– 类似 java 的 hashmap
hset hash field value
hget hash field
hgetall hash
hincrby
– 存储对象(如用户详情)
– 存储配置项(如应用配置)
– 小哈希:压缩列表(ziplist)
– 大哈希:哈希表(hashtable)
– 控制元素数量(默认 < 512)
– 值长度 < 64 字节(触发压缩列表)
列表
(list)
– 有序可重复
– 支持双向插入 / 删除
– 底层为双向链表
lpush list value1 value2
rpop list
lrange list 0 -1
blpop
– 消息队列(fifo/lifo)
– 最新动态列表(如微博时间线)
– 小列表:压缩列表(ziplist)
– 大列表:快速列表(quicklist)
– 避免一次性获取全量数据(lrange 0 -1
– 使用blpop实现阻塞队列
集合
(set)
– 无序唯一
– 支持交集 / 并集 / 差集运算
sadd set member1 member2
smembers set
sinter set1 set2
scard
– 去重(如用户标签)
– 社交关系(共同好友)
– 抽奖系统(随机取元素)
– 整数集合(intset):全整数元素
– 哈希表(hashtable):含字符串元素
– 控制元素数量(>512 自动转为哈希表)
– 批量操作使用sunionstore
有序集合
(sorted set)
– 每个元素关联分数(score)
– 按分数排序(支持范围查询)
zadd zset score1 member1 score2 member2
zrange zset 0 -1 withscores
zincrby
– 排行榜(如游戏积分)
– 时间线(按时间戳排序)
– 带权重的任务调度
– 跳表(skiplist) 哈希表
– 小数据:压缩列表(ziplist)
– 避免大范围查询(zrange参数过大)
– 定期清理过期数据
位图
(bitmap)
– 基于位操作的字符串
– 每个位存储 0/1
setbit key offset value
getbit key offset
bitcount key
– 签到统计(每日 1 位)
– 用户活跃状态(亿级用户仅需 12.5mb)
– 布隆过滤器
– 基于字符串实现(本质是二进制数组) – 按位操作,避免整键读取
– 大位图可分段存储

补充说明

  1. 数据类型选择原则

    • 简单键值对:字符串(string)
    • 对象存储:哈希(hash)
    • 有序列表:列表(list)或有序集合(sorted set)
    • 去重与集合运算:集合(set)
    • 统计基数:hyperloglog
    • 位操作:位图(bitmap)
    • 地理位置:地理空间(geospatial)
  2. 内存优化关键

    • 压缩列表(ziplist):当哈希、列表元素较少且值较小时自动触发,内存占用更低。
    • 批量操作:使用mset/mgethmset/hmget减少网络开销。
    • 过期策略:合理设置expire时间,避免冷数据长期占用内存。
  3. 性能注意事项

    • o (n) 命令:如keys *lrange list 0 -1smembers,可能阻塞主线程,生产环境慎用。
    • 大对象:单个键值超过 10kb 时需谨慎,可能导致内存碎片或网络传输瓶颈。
  4. 底层编码转换
    redis 会根据数据量和类型自动转换编码(如小哈希从 ziplist 转为 hashtable),可通过object encoding key查看。

网站地图