关于redis应用场景总结
1.计数器相关应用场景
高并发的秒杀活动、分布式序列号的生成
限制手机短信发送数量、接口每分钟请求次数
工单号递增计数场景
可以使用redis的 incrby命令实现原子性的递增
2.限时业务应用场景
限时的优惠活动信息、手机验证码
redis中可以使用expire命令设置一个键的生存时间,到时间后redis会删除它。
3.热点数据缓存应用场景
缓存热点数据,启用 allkeys-lru 淘汰策略
系统功能如下:
- 可以发布文章;
- 可以对文章进行点赞;
- 在首页可以按文章的发布时间或者文章的点赞数进行排序显示;
文章信息 HASH 来存储
文章包括标题、作者、赞数等信息,在 Redis 中使用 HASH 来存储每种信息以及其对应的值的映射
Redis 使用命名空间的方式来实现类似表的功能、命名空间可以扩展树的深度 set test1:test2:test3 123 类似json
键名的前面部分存储空间名,后面部分存储空间 ID,整个组成Hash的健名
由于redis访问速度块、支持的数据类型比较丰富,所以redis很适合用来存储热点数据,另外结合expire,
我们可以设置过期时间然后再进行缓存更新操作,这个功能最为常见,我们几乎所有的项目都有所运用。
4.排行榜相关问题应用场景
排行榜方面查询速度普遍在关系型数据库偏慢,可以借助redis的SortedSet进行热点数据的排序。
在活动中,我们需要展示各个部门的点赞排行榜, 所以我针对每个部门做了一个SortedSet,然后以用户的openid作为上面的username,
以用户的点赞数作为上面的score, 然后针对每个用户做一个hash,通过zrangebyscore就可以按照点赞数获取排行榜,
然后再根据username获取用户的hash信息,这个当时在实际运用中性能体验也蛮不错的。
5.分布式锁应用场景
使用redis的setnx命令进行
setnx:"set if not exists"就是如果不存在则成功设置缓存同时返回1,否则返回0
在定时任务中首先 通过setnx设置一个lock,如果成功设置则执行,如果没有成功设置,则表明该定时任务已执行
给这个lock加一个过期时间,比如说30分钟执行一次的定时任务,那么这个过期时间设置为小于30分钟的一个时间 就可以,
这个与定时任务的周期以及定时任务执行消耗时间相关
6.延时操作应用场景
7.分页模糊搜索应用场景
redis的set集合中提供了一个zrangebylex方法,语法如下:
ZRANGEBYLEX key min max [LIMIT offset count]
通过ZRANGEBYLEX zset - + LIMIT 0 10 可以进行分页数据查询,其中- +表示获取全部数据
8.队列应用场景
redis有list push和list pop