2024-03-16 02:16:54
Redis 是一种内存数据库,使用多种数据结构存储数据,以下是其 9 种主要数据结构类型及其特性用途的详细说明:
键值对作为最基础的结构,键值对由唯一的字符串键和对应的值组成。值可以是字符串、列表、哈希表等任意数据结构类型,形成嵌套存储模式。例如,键 "user:1001" 可映射到包含用户信息的哈希表。其核心优势在于快速通过键定位数据,但无法直接对值内容进行操作。
字符串(String)字符串是 Redis 最简单的结构,支持存储文本、数字或二进制数据(如图片片段),最大容量 512MB。其操作原子性使其适用于计数器(INCR/DECR)、缓存场景(如存储会话令牌)及分布式锁(SETNX)。例如,SET page:views 100 可记录页面访问量。
列表(List)列表是按插入顺序排列的字符串集合,支持双向链表操作。通过索引(如 LINDEX)或范围(如 LRANGE)访问元素,头部(LPUSH)和尾部(RPUSH)插入效率极高。典型应用包括消息队列(生产者 LPUSH,消费者 RPOP)、时间线排序(如社交媒体动态)及最新消息展示。
集合(Set)集合存储无序且唯一的字符串元素,支持交集(SINTER)、并集(SUNION)、差集(SDIFF)等集合运算。其去重特性适用于标签系统(如文章标签去重)、共同好友计算(SINTER)及访问控制(如黑名单过滤)。例如,SADD tags:article1 "tech" "AI" 可添加文章标签。
有序集合(Sorted Set)有序集合在集合基础上为每个元素关联分数(score),按分数升序排列。支持按分数范围(ZRANGEBYSCORE)或排名(ZRANK)获取元素,适用于排行榜(如游戏得分)、优先级队列(如任务调度)及范围查询(如时间窗口内事件)。例如,ZADD leaderboard 1000 "player1" 可更新玩家分数。
哈希表(Hash)哈希表以字段-值对形式存储数据,适合表示对象(如用户信息)。通过字段名(如 HGET user:1001 name)快速访问值,支持批量操作(HMSET/HMGET)及字段级增减(HINCRBY)。其空间效率高于序列化对象,常用于缓存复杂结构数据。
地理空间(GEO)地理空间结构基于有序集合实现,存储经纬度坐标并支持距离计算(GEODIST)、附近查询(GEORADIUS)及范围搜索。典型应用包括地图服务(如查找附近商家)、物流跟踪(如车辆位置监控)及社交约会(如匹配附近用户)。例如,GEOADD cities -122.2758 37.8044 "Oakland" 可添加城市坐标。
超日志(HyperLogLog)超日志是一种概率数据结构,用于高效估算基数(如独立用户数)。其内存占用极低(约 12KB),误差率 0.81%,适用于大规模数据去重统计(如 UV 计算)。例如,PFADD visitors "user1" 可添加访问用户,PFCOUNT visitors 获取估算值。
流(Stream)流是 Redis 5.0 引入的结构,支持消息持久化、消费者组及消息回溯,适用于实时数据处理(如日志收集)、事件溯源(如订单状态变更)及聊天应用(如群组消息)。通过 XADD 添加消息,XREAD 消费消息,XGROUP 管理消费者组。例如,XADD mystream * field1 value1 可发布消息。
选择建议: