2026-10-21 18:27:43
Redis支持5种主要数据类型,每种类型具有独特特性并适用于不同场景,以下是详细介绍:
1. String(字符串)计数器:利用INCR/DECR实现原子计数(如文章点赞数、商品库存)。
全局ID生成:通过INCRBY生成唯一ID(如订单号)。
分布式Session:存储用户会话数据,结合EXPIRE实现自动过期。
分布式锁:使用SETNX(仅当键不存在时设置)或Lua脚本实现锁机制。
位图统计:通过SETBIT/BITCOUNT统计独立用户数(如每日活跃用户)。
缓存数据:替代Memcached存储任意格式数据(需序列化结构化数据)。
结构化数据存储:如用户信息(昵称、年龄、积分),直接修改单个字段(如HINCRBY user:1001 score 10)。
索引构建:为对象创建反向索引(如按用户名查询用户ID)。
ID生成器:通过HINCRBY为不同类型生成唯一ID(减少键数量)。
消息队列:生产者用LPUSH添加任务,消费者用RPOP获取任务(无ACK机制需结合Sorted Set处理失败任务)。
最新消息排行:如微博时间线,用LPUSH插入新消息,LTRIM限制列表长度。
粉丝/关注列表:存储用户关系链,支持分页查询(LRANGE)。
去重列表:如存储用户关注列表(自动去重)。
共同关系计算:求两个用户的共同好友(SINTER)、推荐好友(SUNION)。
标签系统:存储用户标签(如“大美女”“土豪”),支持快速查询标签归属。
排行榜:存储用户分数(如游戏排名),用ZREVRANGE获取前N名。
带权重的任务队列:按分数倒序处理任务(如重要消息优先执行)。
时间线排序:以时间戳为分数存储动态(如Twitter时间线)。
过期项目处理:用Unix时间作为分数,定期清理过期数据。
Redis的5种数据类型覆盖了从简单键值存储到复杂关系计算的多种需求:
通过组合这些数据类型和命令,可构建高性能的分布式系统(如缓存、消息队列、实时分析等)。实际使用时需根据数据特征(如是否需要排序、是否允许重复)选择合适类型。