Redis常见应用场景!
Redis常见应用场景!
月伴飞鱼登录鉴权:
用户登录鉴权,以及对应的登录验证码或Token到期失效。
- Redis Key的超时失效功能,非常适合于这种业务场景。
计数器:
类似于知乎的帖子点赞、收藏,电商的库存扣减等。
- 在高并发场景下,用MySQL数据库去硬扛这种读写压力是比较吃力的。
Redis的INCR、DECR、INCRBY、DECRBY相关命令,则解决了这个问题。
粉丝关注:
Set是一个无序的天然去重的集合
- 即:Key-Set。
Set还提供了求交集、求并集等一系列直接操作集合的方法
- 非常适合于求共同或单方好友、粉丝、爱好之类的业务场景。
1 | redis> SADD Tony Mary //Mary成为了Tony的粉丝 |
排行榜:
Zset(SortedSet),是Set的可排序版。
通过增加一个排序属性score来实现的
- 适用于排行榜和时间线之类的业务场景,且在高并发场景下具备非常优秀的性能。
防刷:
防刷:用户在极短时间内,频繁发起请求去调用系统中的某个接口,该情况下需要对其进行限制。
举例:限制用户每秒钟只能下单一次,若用户在一秒钟内连续三次下单
- 这时只有第一个下单是成功的,其他两个会通过Redis的过期时间机制,对其进行限制。
消息队列:
Redis可以通过list数据结构实现消息队列的功能,这样可以在电商秒杀
- 或者在线教育集中约课等高并发写场景下,提供消峰功能。
浏览器历史记录:
每当访问一个新的网页,浏览器就会自动存储下来
- 当点击 后退 按钮时,最近一次访问的网页就会展示出来。
可以通过
Redis list
来实现栈功能,进而实现浏览器历史记录场景。
用户签到:
用户签到、用户出勤、当天活跃用户等场景,用Redis Set数据结构也可以实现
- 但用户量级庞大的情况下,会极大占用内存空间。
这种情况下,非常适合
Redis BitMap
数据结构,通过其bit位来进行状态存储。
网站UV统计:
通过
Redis Set
存储用户ID的方式进行解决,非常耗费内存空间
- 可以使用
HyperLogLog
。Redis
HyperLogLog
提供不精确的去重计数方案,标准误差是 0.81%
- 但仅仅占用12k的内存空间,非常适用于大型网站UV统计这种空间消耗巨大,但数据不需要特别精确的业务场景。
统计一个亿的Keys
HyperLogLog:
Redis提供了一个扩展类型HyperLogLog用于基数统计,计算
2^64
个元素大概只需要12KB的内存空间。但是
HyperLogLog
是存在误差的,大概是在0.81%
,如果需要精准的统计,还是需要使用Set
。