前言
redis在面试中也是经常被问到的技术点,但运维的面试和开发的不同,运维最多问这几个问题(以三点工作经验的运维为例)
- redis你们主要用来做什么?
- 你们的redis主要用来存储哪些数据?
- redis 持久化怎么做的?
- redis的架构怎么做的?
看吧,连redis缓存雪崩,击穿,穿透都不会问,更不用说redis的基础命令了。今天我们主要来讨论前两个,redis主要用来做什么以及主要缓存哪些数据
毕竟redis还是开发用的多,当然作为一个优秀的运维,还是要了解下redis相关的知识,万一开发也不懂,你可以教教他嘛。
redis的使用场景
- 分布式锁(类似zookeeper,但是又比zookeeper弱)
- 消息通知 (类似于kafka,但是比kafka弱)
- 做缓存服务 ,读多写少的场景(类似于memcache,但有持久化)
- 统计网站访问量,当前在线人数
- 统计网站所有的独立IP
- 利用好友交集推荐好友
- 缓存电商网站初始化页面
- 热点数据:新闻的实时热点,微博热搜,需要频繁更新的热点数据。
redis有哪些数据类型
- String
- Hash (用来存储用户的ID,昵称,头像,积分)
- List :反向查找和遍历,reids分页
- set : 当你存储一个列表数据,又不希望出现重复数据,可以使用这个
- sort set : 按照某个权重进行排序,比如通过点击数做出排行榜的数据应用
游戏服务器用reids缓存哪些数据
- 玩家等级的排名,金钱的排名,战斗力的排名,排行榜实时刷新
- 多个服务器之间通过reids来交换数据,发送事件
- 瞬间变换的数据,比如金钱,经验,以及玩家完成任务的ID集合
- 玩家的活动数据
电商服务器redis缓存
- 不需要实时更新但及其消耗数据库的数据,比如网站首页商品的销售量排行榜,热搜商品。
- 需要实时更新,但数据更新频率不高的数据
- 每次获取这些数据都需要经过复杂的处理逻辑的数据,比如生成报表
什么是缓存击穿
比如一个游戏服务器,reids缓存了很多玩家的活动数据,这这些玩家很多已经长时间未登陆了,redis有过期删除机制,这些玩家的活跃数据已经过期,所以从redis中删除了。 也就是用户如果又突然登陆了是需要到数据库里读取数据,然后在缓存到redis的。 这一天运营搞了个活动,导致这一批过期用户都回来了,这些用户的活动数据就需要从数据库拉取,因为太多导致数据库超载。 这就是缓存击穿。
解决方案,就是把过期时间设置的更长一点,并且对数据库的操作添加限流。
几个相关的名词
- 失效:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中
- 命中:应用程序从cache中取数据,取到后返回。
- 更新:先把数据存到数据库中,成功后,再让缓存失效
总结
对于面试来说,这些就足够了,如果要深入了解,建议买一个本书查看,不过作为运维知道怎么维护就可以了,业务逻辑和使用都是开发在做,如果后期有做架构师的打算,那先学编程在学redis.