排行榜是许多应用(如游戏、电商、社交媒体)的常见功能,Redis的有序集合(Sorted Set)是实现实时排行榜的理想选择。
游戏积分榜: 玩家的积分作为Sorted Set的成员分数,玩家ID作为成员。当玩家积分变化时,更新Sorted Set中的对应成员分数。Redis的Sorted Set能够高效地进行范围查询(如获取前N名)和排名查询。
商品销量榜: 统计商品的实时销量,并按照销量进行排名。当商品销量增加时,更新Sorted Set中对应商品的销量分数。
文章热门度榜: 根据文章的阅读量、点赞数、评论数等综合指标计算热门度,并实时更新排行榜。
2.3 计数器与限流
Redis的原子操作和数据结构使其成为实现计数器和限流的绝佳工具。
网站访问量计数器: 使用Redis的INCR命令实现原子性的访问量计数。例如,INCR page_views:article_id可以统计文章的访问量。
用户点赞/转发/评论计数: 类似访问量计数,可以为每个用户或内容维护一个计数器。
接口访问频率限制(限流): 可以结合Redis的INCR、EXPIRE和滑动窗口 新加坡电话号码库 算法实现接口的QPS(每秒查询数)或每日访问次数限制,防止恶意攻击和资源滥用。例如,使用INCR user
2.4 分布式锁
在分布式系统中,为了保证共享资源的原子性操作和数据一致性,通常需要分布式锁。Redis提供了实现分布式锁的简单而有效的方式。
基于SETNX实现: 使用SETNX (SET if Not eXists)命令,当键不存在时设置键值,并返回1,表示获取锁成功;否则返回0,表示获取锁失败。结合过期时间(EXPIRE)可以防止死锁。
Redlock算法: 对于更严谨的分布式锁需求,Redis官方提出了Redlock算法,它要求在多个独立的Redis实例上获取锁,以提高锁的可靠性。
2.5 消息队列
虽然Redis不是专业的MQ(Message Queue),但其列表(List)适用于一些简单场景。
生产者-消费者模式: 生产者通过LPUSH或RPUSH命令将消息推入列表,消费者通过BRPOP(阻塞式弹出)命令从列表头部获取消息。BRPOP的阻塞特性使得消费者无需忙等待,提高了效率。
异步任务处理: 将耗时的任务放入Redis列表,后台工作线程异步地从列表中取出任务进行处理。