zhanxuewei
Published on 2024-04-23 / 23 Visits
0
0

Redis有哪些常用应用场景?

Redis十大核心应用场景深度剖析

一、高性能缓存系统

页面缓存:

  • 缓存HTML片段/API响应(TTL控制失效)

  • 典型命令:SETEX product:123 3600 "{json}"

热点数据加速:

  • 数据库查询结果缓存(如用户信息)

  • 避免缓存穿透方案:布隆过滤器+空值缓存

二、会话存储(Session Storage)

分布式会话共享

  • 比Cookie更安全的数据存储

  • 典型结构:HSET session:sd7f9 user_id 123 last_active 20250709

支持集群模式下会话保持

三、实时排行榜

Sorted Set实现:

ZADD leaderboard 10000 "player1"

ZREVRANGE leaderboard 0 9  # 获取TOP10shell

应用场景:

  • 游戏积分榜

  • 电商销量排行

  • 热搜关键词统计

四、消息队列系统

List实现基础队列:

  • LPUSH/RPOP实现FIFO队列

  • BRPOP实现阻塞消费

Stream实现高级队列(5.0+):

  • 支持消费者组

  • 消息回溯能力

五、秒杀系统核心组件

关键技术实现:

  • 库存预减:DECR product:123:stock

  • 请求限流:INCR ip:127.0.0.1 + EXPIRE

  • 防重复提交:SETNX order:user1:pid 1

六、社交网络功能

关系型数据存储:

  • 粉丝集合:SADD user:123:followers 456

  • 共同关注:SINTER user:123:followers user:456:followers

实时消息推送:

  • 使用Pub/Sub实现在线状态通知

七、地理位置服务

GEO数据结构:

  • GEOADD cities 116.405285 39.904989 "北京"

  • GEORADIUS cities 116.40 39.90 100 km

典型应用:

  • 附近的人

  • 网点查询

  • 配送范围计算

八、限流与计数器

滑动窗口限流:

-- Lua脚本实现精确限流

local current = redis.call('INCR', KEYS[1])

if current == 1 then 

    redis.call('EXPIRE', KEYS[1], ARGV[1])

end

应用场景:

  • API调用限制

  • 短信发送频控

九、分布式锁

Redlock算法实现:

  • SET resource_name my_random_value NX PX 30000

  • 配合Lua脚本保证原子性释放

应用场景:

  • 定时任务调度

  • 资源互斥访问

十、实时数据分析

基于HyperLogLog:

  • 统计UV:PFADD uv:20250709 user1

  • 去重计算:PFCOUNT uv:20250709

位图统计:

  • 用户签到:SETBIT sign:123:202507 9 1

  • DAU计算:BITOP OR result sign:20250709 sign:20250708

技术选型建议

优先考虑场景:需要低延迟(<1ms)、高并发(>10k QPS)的业务

规避场景:大数据量(>10GB)、复杂事务、强一致性要求


Comment