Redis是一种高性能的键值存储系统,支持多种丰富的数据类型,包括String(字符串)、Hash(哈希)、List(列表)、Set(集合)、ZSet(有序集合)、Bitmap(位图)、HyperLogLog(基数统计)、GEO(地理位置)和Stream(流),这些数据类型适用于缓存、排行榜、会话管理、实时计数、位置服务等多种场景,直接使用这些类型可以高效解决实际业务问题。
Redis数据类型详解
Redis支持五种基本数据类型:String、Hash、List、Set和ZSet。String类型用于存储字符串、整数或浮点数,常用于缓存和计数器;Hash类型存储字段-值对,适合对象存储如用户信息;List类型是链表,支持队列和栈操作,用于消息队列;Set类型是无序集合,支持交并差运算,用于标签系统;ZSet是有序集合,通过分数排序,完美用于排行榜。
String类型应用
String是Redis最简单的数据类型,可以存储文本、JSON或序列化对象。常见场景包括:缓存网页内容、分布式锁(SETNX命令)、计数器(如访问量PV/UV)、分布式Session。示例:INCR命令实现原子自增,MSET批量设置键值对,提高效率。
Hash、List和Set的使用场景
Hash适合存储结构化数据,如电商商品信息(HSET user:100 name 张三 age 25)。List用于实现消息队列(LPUSH/RPOP),或最新列表(如微博时间线)。Set用于共同好友计算(SINTER),或抽奖系统(SRANDMEMBER随机成员)。
ZSet和高级数据类型
ZSet(Sorted Set)通过score排序,应用在实时排行榜(ZADD/ZREVRANGE)。Bitmap用于位操作,实现用户签到(SETBIT/GETBIT),HyperLogLog统计UV(PFADD/PFCOUNT),GEO存储经纬度用于附近的人(GEOADD/GEORADIUS),Stream是Redis 5.0新增,用于日志流和消息队列。
实际应用案例
在电商中,Redis Hash存储用户信息,ZSet做热销榜单,GEO找附近店铺;游戏中使用Bitmap签到,HyperLogLog统计在线人数;社交App用List做朋友圈动态,Set管理粉丝列表。这些类型让Redis成为缓存和NoSQL的首选。
性能与选择建议
选择数据类型时考虑操作复杂度:String O(1),List头部/尾部O(1)中间O(N),ZSet范围查询高效。结合业务场景,避免滥用List模拟Set,以免内存浪费。
FAQ
Q: Redis String能存多大?
A: 单值最大512MB。
Q: ZSet适合什么排行榜?
A: 实时更新分数的高频排行,如游戏积分。
Q: GEO怎么查附近人?
A: 用GEORADIUS命令指定半径返回位置。
Q: HyperLogLog准确率如何?
A: 误差0.81%,适合海量数据基数统计。