核心概述Redis 的高性能与灵活性源于其八大核心数据类型。不同于关系型数据库的固定表结构每种类型都有独特的底层实现、操作命令及适用场景。掌握它们是高效使用 Redis 的关键。一、String字符串最基础的“万能类型”所有 Key 都是 String 类型Value 可存字符串、数字或二进制数据。1. 底层实现SDS简单动态字符串结构len实际长度O(1) 获取free空闲空间预分配buf[]字节数组二进制安全末尾加\0核心优势动态扩容小于 1MB 时翻倍扩容大于 1MB 时每次增 1MB。二进制安全通过len读取长度不依赖\0可存储图片等二进制数据。2. 核心命令命令说明SET key value [EX seconds]设置值可指定过期时间GET key获取值APPEND key value追加字符串STRLEN key获取长度INCR / DECR key整数自增/自减 1INCRBY key increment整数增加指定数值SETNX key value键不存在时设置用于分布式锁3. 实战场景缓存热点数据如首页 Banner、商品信息 JSON计数器阅读量、销量分布式锁SETNX存储二进制数据头像、图片片段二、Hash哈希对象型数据存储适合存储对象可单独操作字段比 String 存 JSON 更省内存、更高效。1. 底层实现自适应结构压缩列表ziplist字段数 512 且字段值 64 字节时使用连续内存节省空间。字典dict超过阈值后切换类似 Java HashMap数组链表增删改查 O(1)。支持动态扩容/缩容。2. 核心命令命令说明HSET key field value设置字段值HGET key field获取字段值HGETALL key获取所有字段和值大数据量慎用建议HSCANHDEL key field删除字段HLEN key字段数量HEXISTS key field判断字段是否存在3. 实战场景存储用户信息user:info:1001字段为 name/age存储商品详情灵活修改单个属性购物车cart:user:1001字段为商品 ID值为数量三、List列表有序、可重复的线性结构支持两端高效操作适合队列、栈等场景。1. 底层实现quicklistRedis 3.2结构双向链表 压缩列表。每个节点是一个 ziplist兼顾内存紧凑性和操作效率。两端操作 O(1)中间操作 O(n)。2. 核心命令命令说明LPUSH / RPUSH key value从左侧/右侧插入LPOP / RPOP key从左侧/右侧弹出LRANGE key start stop获取指定范围元素LLEN key获取长度BLPOP key timeout阻塞式左侧弹出消息队列3. 实战场景消息队列LPUSHBRPOP最新消息列表LPUSHLRANGE获取最新 N 条栈先进后出LPUSHLPOP队列先进先出LPUSHRPOP四、Set集合无序、不可重复支持集合运算适合去重、标签、共同好友等。1. 底层实现自适应结构整数集合intset所有元素为整数且数量 ≤ 512 时使用有序数组内存极低。字典dict超过阈值或含非整数时使用元素作为 keyvalue 为 null操作 O(1)。2. 核心命令命令说明SADD key member添加元素自动去重SMEMBERS key获取所有元素慎用建议SSCANSISMEMBER key member判断是否存在SCARD key获取元素个数SINTER / SUNION / SDIFF交集 / 并集 / 差集3. 实战场景用户标签画像、推荐UV 去重统计SADDSCARD共同好友SINTER五、ZSet有序集合有序、不可重复每个元素关联分数score按分数排序支持范围查询。1. 底层实现跳跃表 字典跳跃表skiplist维护元素顺序支持范围查询效率 O(log n)。字典dict维护元素到分数的映射支持单点查询 O(1)。组合优势兼顾排序与快速查询。2. 核心命令命令说明ZADD key score member添加元素及分数ZRANGE / ZREVRANGE key start stop按分数升序/降序获取ZSCORE key member获取元素分数ZRANK / ZREVRANK key member获取升序/降序排名ZCOUNT key min max统计分数区间内元素个数3. 实战场景排行榜销量榜、热度榜优先级队列按优先级调度任务成绩排名学生成绩排序六、Bitmap位图紧凑布尔值存储每个 bit 位表示一个状态0/1内存占用极低。1. 底层实现基于String的字节数组每个字节含 8 个 bit。支持按位操作效率极高。2. 核心命令命令说明SETBIT key offset value设置某位的值GETBIT key offset获取某位的值BITCOUNT key统计值为 1 的位数BITOP operation destkey key对多个位图进行 AND/OR/XOR/NOT 运算3. 实战场景签到统计每天一个 bit 位在线状态用户 ID 作为 offset权限控制权限位掩码七、HyperLogLog基数统计海量数据去重统计估算集合中不重复元素的数量误差率约 0.81%内存仅 12KB。1. 底层实现基于概率算法通过统计哈希值的前导零个数估算基数。不存储元素本身适合对精度要求不高的海量去重场景。2. 核心命令命令说明PFADD key element添加元素PFCOUNT key获取基数估算值PFMERGE destkey sourcekey合并多个 HyperLogLog3. 实战场景网站 UV 统计用户访问去重商品浏览人数统计日志用户去重八、GEO地理空间地理位置存储与计算存储经纬度支持距离计算、附近地点查找。1. 底层实现基于ZSet将经纬度转换为geohash作为 score地点名作为 member。利用 ZSet 的排序特性实现范围查询。2. 核心命令命令说明GEOADD key lon lat member添加地理位置GEOPOS key member获取经纬度GEODIST key m1 m2 [unit]计算两地距离GEORADIUS key lon lat radius unit根据圆心查找附近地点GEORADIUSBYMEMBER key member radius根据地点查找周边3. 实战场景外卖商家定位查找用户附近商家打车平台查找附近车辆景点距离计算九、总结选型对比与建议数据类型核心特性底层实现核心场景String万能、二进制安全SDS缓存、计数器、分布式锁Hash对象存储、字段独立ziplist dict用户信息、购物车List有序、可重复、两端操作quicklist消息队列、最新列表Set无序、不可重复、集合运算intset dict标签、去重、共同好友ZSet按分数排序、范围查询skiplist dict排行榜、优先级队列Bitmap紧凑布尔值、位操作String字节数组签到、在线状态HyperLogLog海量去重、估算基数概率算法UV 统计、海量去重GEO地理位置、距离计算ZSet geohash附近地点、地图服务选型核心原则贴合业务场景不必追求复杂类型。简单场景用 String对象场景用Hash。排序用 ZSet去重用HyperLogLog。布尔状态用 Bitmap地理位置用GEO。