
Redis 常用8 种数据结构String、List、Hash、Set、ZSet、Geo、Bitmap、HyperLogLog附带底层、用法、典型场景。一、1. String字符串底层简单动态字符串 SDS最大 512MB。常用命令set / get / mset / mget / incr / decr / setnx / expire应用场景缓存用户信息、商品数据、接口结果最常用计数器文章阅读量、点赞数、访问次数分布式锁setnx expire 实现简单锁限流IP 限流、接口防刷全局唯一 IDincr 自增生成 ID会话存储登录 token、session二、2. List列表底层双向链表头尾操作极快中间访问慢。常用命令lpush / rpush / lpop / rpop / lrange / brpop阻塞弹出应用场景消息队列 / 简易队列lpush rpop阻塞队列brpop 实现简单延时/消费队列时间线、信息流朋友圈、动态列表、评论列表栈lpush lpop三、3. Hash哈希底层ziplist / hashtablefield-value 结构。常用命令hset / hget / hmset / hmget / hincrby / hdel应用场景存储对象用户信息、商品信息比 String 更省内存购物车用户ID→商品ID→数量短字段聚合数据多个小字段统一管理对比存单个对象优先 Hash不要拆多个 String。四、4. Set集合底层intset / 哈希表无序、去重。常用命令sadd / smembers / sismember / sinter / sunion / sdiff / spop应用场景去重访客 IP 去重、点赞用户去重交集/并集/差集◦ 共同好友、共同关注◦ 好友推荐、粉丝对比随机抽奖spop 随机弹出中奖用户标签系统文章/用户标签五、5. ZSet有序集合 / Sorted Set底层ziplist / 跳表(skiplist)去重 按 score 排序。常用命令zadd / zrange / zrevrange / zrank / zrem / zscore应用场景高频考点排行榜热度榜、积分榜、销量榜、直播间榜单延时队列score 存时间戳轮询取到期任务带权重排序优先队列、任务权重排序范围查询按分数区间筛选数据六、6. Bitmap位图本质还是 String按位操作。常用命令setbit / getbit / bitcount应用场景签到统计用户每日签到1 位代表 1 天活跃状态用户在线/离线标记海量布尔值统计极度省内存七、7. HyperLogLog基数统计概率算法有误差0.81%极小内存统计海量去重数量。常用命令pfadd / pfcount / pfmerge应用场景页面 UV 统计独立访客数海量数据去重计数不计明细只算总数特点只存数量不存原始数据。八、8. Geo地理位置基于 ZSet 实现存储经纬度。常用命令geoadd / geohash / geopos / geodist / georadius应用场景附近的人 / 附近门店距离计算、范围查找二、场景选型速查表面试直接背• 单纯缓存、计数器、分布式锁、限流 → String• 对象、购物车、多字段实体 → Hash• 队列、栈、信息流、消息队列 → List• 去重、交集并集、好友、标签、抽奖 → Set• 排行榜、延时队列、有序任务 → ZSet• 签到、布尔状态、海量标记 → Bitmap• 大数据量 UV、独立访客计数允许误差→ HyperLogLog• 经纬度、附近位置 → Geo三、高频面试补充List 为什么适合做队列双向链表头尾 O(1)阻塞命令 brpop 可实现简单消息队列。ZSet 底层为什么用跳表不用红黑树跳表范围查询、排序、区间遍历更优实现简单内存友好。Hash 与 String 存对象区别Hash 可单独更新某个字段省内存String 需要整存整取。HyperLogLog 误差标准误差 0.81%适合统计量不要求绝对精确。