面经 - Redis的数据基本类型
五种基本类型
- String(字符串)
特点: Redis中最基础的数据类型,一个键对应一个值,值可以是字符串、数字或者二进制数据,最大能存储512MB。
应用场景:
缓存:存储用户会话、页面内容等。
计数器:文章阅读量、库存扣减等。
分布式锁:通过SETNX实现简单锁机制。
短有效期数据:验证码(结合EXPIRE)。
常用命令:SET、GET、INCR、DECR、APPEND、SETNX等。
List(列表)
特点:双向链表,支持头部(Left)和尾部(Right)操作,元素可重复。
应用场景:
消息队列:生产者通过LPUSH推送任务,消费者通过BRPOP获取。
最新动态:存储用户最新发布的文章(如LPUSH+LTRIM限制长度)。
分页查询:LRANGE分页获取历史记录。
常用命令:LPUSH/RPUSH、LPOP/RPOP、LRANGE、BLPOP(阻塞式弹出)。Hash(哈希)
特点:键值对集合,适合存储对象(如用户信息)。
应用场景:
对象存储:用户信息(HMSET user:1 name “Alice” age 30)。
部分更新:修改用户单个字段(HSET user:1 age 31)
聚合统计:商品详情页的多属性缓存。
常用命令: HSET、HGET、HMSET、HGETALL、HINCRBY。Set(集合)
特点:无序且唯一的元素集合,支持交并差运算。
应用场景:
标签系统:用户兴趣标签(SADD user:1:tagstech music)
去重:记录文章的唯一访问用户(SADD article:100:views user:1)。
共同好友:SINTER user:1:friends user:2:friends。
常用命令:SADD、SMEMBERS、SINTER(交集)、SUNION(并集)、SISMEMBER。ZSet(有序集合)
特点:元素唯一,每个元素关联一个分数(score),按分数排序。
应用场景:
排行榜:游戏积分排名(ZADD leaderboard 1000 “PlayerA”)。
带权重队列:任务优先级调度(分数表示优先级)。
时间轴:按时间戳排序的动态(ZADD timeline 1630000000 “event1”)。
常用命令:ZADD、ZRANGE、ZREVRANGE、ZRANK、ZINCRBY。
三种特殊类型
- BitMap(位图)
特点:基于字符串的位操作,支持按位存取。
应用场景:用户签到记录(每天对应一个位)、活跃用户统计。
常用命令统计:SETBIT、GETBIT、BITCOUNT。 - HyperLoglog
特点:基数统计(估算集合中不重复元素的数量),存在误差。
应用场景:拥挤UV(独立访客数),误差率约0.81%。
常用命令: PFADD、PFCOUNT、PFMERGE。 - GEO(地理位置)
特点:基于有序集合实现,存储经纬度。
应用场景:附近的人、商家地理位置查询。
常用命令:GEOADD、GEODIST、GEORADIUS。


