翻译过来就是redis 的各种数据结构的特性以及应用场景。
缓存系统
Redis 作为内存数据库,读写速度极快,适合作为缓存层减轻后端数据库压力。常见场景包括会话缓存、页面缓存、高频查询结果缓存。通过设置过期时间,可自动淘汰陈旧数据,保持缓存新鲜度。
实时排行榜(Sorted set)
Redis 的有序集合(Sorted Set)能高效处理排行榜需求。例如游戏积分榜、热搜榜单、销售排名等场景。利用 ZADD 和 ZRANGE 命令可实现实时更新和快速查询,时间复杂度为 O(log N)。
Sorted Set(有序集合)是一种结合了 Set 和 Hash 特性的数据结构,每个成员(member)关联一个分数(score),通过分数实现自动排序。成员唯一,但分数可重复。成员按分数从小到大排序(默认),分数相同时,按字典序排序。
常用命令示例
ZADD leaderboard 100 "Alice" 200 "Bob" # 添加成员及分数
ZRANGE leaderboard 0 -1 WITHSCORES # 查询所有成员(带分数)
ZRANGEBYSCORE leaderboard 150 300 # 查询分数在150~300的成员
ZREVRANK leaderboard "Alice" # 获取成员的逆序排名
ZUNIONSTORE result 2 set1 set2 WEIGHTS 1 2 # 合并两个有序集合(set2分数×2)
消息队列 (List ,Stream)
Redis 的 List 和 Stream 数据结构支持发布/订阅模式,适用于轻量级消息队列。例如任务队列、日志处理、事件通知等场景。LPUSH(头部增加)/RPOP(尾部删除) 组合可实现 FIFO 队列,而 Stream 支持多消费者组和消息持久化。
List 是基于双向链表实现的线性的数据结构,支持从列表头部(LPUSH/LPOP)或尾部(RPUSH/RPOP)添加/移除元素,时间复杂度为 O(1)。
Stream 提供复杂的日志式存储和消费能力:
- 消息持久化:每条消息包含唯一 ID(时间戳-序列号),支持持久化存储。
- 消费者组:允许多个消费者组独立消费同一流,组内消费者通过
XREADGROUP竞争消息。 - 阻塞监听:支持
XREAD阻塞等待新消息,适合实时订阅场景。 - 回溯消费:可通过消息 ID 重新消费历史数据,支持
XRANGE按范围查询。
计数器与限流
Redis 的原子操作(如 INCR)适合实现计数器功能,例如用户点赞数、页面访问量统计。结合 EXPIRE 命令可实现限流,如 API 调用频率控制、防刷机制等。
相关命令
INCRBY key increment:按指定步长递增INCRBYFLOAT key increment:支持浮点数递增DECR key:原子性递减DECRBY key decrement:按指定步长递减
分布式锁
通过 SETNX(或 RedLock 算法)可实现分布式锁,解决多进程/多服务的资源竞争问题。例如秒杀系统中的库存扣减、定时任务调度等场景。需注意锁的超时和续期问题以避免死锁。
地理位置服务
Redis 的 GEO 模块支持地理位置存储和查询,适用于附近的人、门店搜索、路径规划等场景。命令如 GEOADD 和 GEORADIUS 可快速计算经纬度范围内的目标。
GEO 存储经纬度,支持距离计算、范围查询。
会话存储
分布式系统中,Redis 可集中管理用户会话(Session)。相比传统 Cookie 或本地存储,Redis 会话支持跨服务器共享,且能灵活控制过期时间,适合微服务架构。
实时数据处理
Redis 的高吞吐特性适合实时分析场景,例如监控数据统计、实时日志分析。通过结合 Lua 脚本,可在服务端执行复杂计算,减少网络开销。
注意事项
- 数据持久性:Redis 默认异步持久化(RDB/AOF),若需强一致性需配置
appendfsync always,但会牺牲性能。 - 内存限制:数据量超出内存容量时需配合淘汰策略(如
allkeys-lru),或考虑分片集群。 - 复杂查询:Redis 缺乏 SQL 数据库的复杂查询能力,需提前设计键值结构或配合其他数据库使用。
965

被折叠的 条评论
为什么被折叠?



