目录
一、数据库
二、缓存
Redis的缓存穿透、缓存雪崩、缓存击穿问题及有效解决方案-优快云博客
三、互斥锁
四、消息队列(轻量级)
使用Redis作为消息队列到底靠不靠谱?与专业级的MQ区别又在哪里?-优快云博客
五、实时排行榜
六、计数器
什么是计数器,如文章的阅读量、微博点赞数、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。我们可以先写入Redis再定时同步到数据库,Redis提供的incr命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景。
计数功能应该是最适合 Redis 的使用场景之一了,因为它高频率读写的特征可以完全发挥 Redis 作为内存数据库的高效。在 Redis 的数据结构中,string、hash和sorted set都提供了incr方法用于原子性的自增操作,下面举例说明一下它们各自的使用场景:
(1)如果应用需要显示每天的注册用户数,便可以使用string作为计数器,设定一个名为REGISTERED_COUNT_TODAY的 key,并在初始化时给它设置一个到凌晨 0 点的过期时间,每当用户注册成功后便使用incr命令使该 key 增长 1,同时当每天凌晨 0 点后,这个计数器都会因为 key 过期使值清零。
(2)每条微博都有点赞数、评论数、转发数和浏览数四条属性,这时用hash进行计数会更好,将该计数器的 key 设为weibo:weibo_id,hash的 field 为like_number、comment_number、forward_number和view_number,在对应操作后通过hincrby使hash 中的 field 自增。
(3)如果应用有一个发帖排行榜的功能,选择sorted set更合适,将集合的 key 设为POST_RANK。当用户发帖后,使用zincrby将该用户 id 的 score 增长 1。sorted set会重新进行排序,用户所在排行榜的位置也就会得到实时的更新。
七、抽奖等一系列实时高数据互动场景
利用set结构的无序性,通过 Spop( Redis Spop 命令用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。 ) 随机获得值。
//点赞这条微博
sadd like:t1001 u3001
//取消点赞
srem like:t1001 u3001
//是否点赞
sismember like:t1001 u3001
//点赞的所有用户
smembers like:t1001
//点赞数
scard like:t1001

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



