热点数据的缓存
缓存是 redis 使用最高的一种使用场景,仅仅使用 set/get 就可以实现。在使用redis存储热点数据的时候需要结合expire设置过期时间。
需要考虑的问题:1、如何更好的设置缓存;2、如何保持缓存与上游数据的一致性;3、如何解决缓存雪崩,缓存击穿问题
限时业务
redis中可以使用expire命令设置一个键的生存时间,到时间后redis会删除它。利用这一特性可以运用在限时的优惠活动信息、手机验证码等业务场景。
计数器
redis由于incrby命令可以实现原子性的递增,例如,点赞数、收藏数、分享数等。
频率控制
在高并发的秒杀活动、分布式序列号的生成、具体业务还体现在比如限制一个手机号发多少条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。
排行榜
借助redis的SortedSet按照得分对热点数据进行排序,例如,展示最近、最热、点击率最高、活跃度最高等等条件的top list。
分布式锁
使用分布式锁是为了解决一些性能问题,如分布式定时任务防止执行多次 (做好幂等性),而且鉴于单点 redis 挂掉的可能性很小,可以使用这种单机版的分布式锁。这个主要利用redis的setnx命令进行,setnx:"set if not exists"就是如果不存在则成功设置缓存同时返回1,否则返回0 。结合过期时间使用,防止死锁的出现。
点赞、好友等相互关系
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
例如,用户点赞列表、用户收藏列表、用户关注列表等。
记录用户判定信息
记录用户判定信息的需求也非常普遍,可以知道一个用户是否进行了某个操作。例如,用户是否点赞、用户是否收藏、用户是否分享等。
会话缓存
使用Redis进行会话缓存。例如,将web session存放在Redis中。
消息队列
Redis能作为一个很好的消息队列来使用,通过list的lpop及lpush接口进行队列的写入和消费,本身性能较好能解决大部分问题。但是,不提倡使用,更加建议使用rabbitmq等服务,作为消息中间件。
1、没有ack(消息确认机制),有可能丢消息; 2、需要做redis的持久化配置
https://segmentfault.com/a/1190000012244418?utm_source=tag-newest
业务使用方式
String(字符串): 应用数, 资讯数等, (避免了select count(*) from …)
Hash(哈希表): 用户粉丝列表, 用户点赞列表, 用户收藏列表, 用户关注列表等。
List(列表):消息队列, push/sub提醒。
SortedSet(有序集合):热门列表, 最新动态列表, TopN, 自动排序。