【缓存应用】谈谈redis应用场景

关于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