为什么要使用Redis ?
速度快 ,走内存, 不用去查硬盘,内存速度比硬盘快很多 。
可以利用分布式线程安全的特性,操作一些相关的业务。 多个WEB服务器,同时操作1条要求线程安全的数据。
Redis为什么那么快?
基于内存
Redis大KEY怎么处理?
Redis过期时间怎么处理?
Redis 雪崩的处理?
同一个时间点,缓存全部过期(或者缓存故障),这时候,全部的请求到达数据库。 导致数据库压力瞬间过高。
事前:
保证redis高可用(集群模式,哨兵模式)。
ehcache,二级缓存, 小范围缓存。
发生的时候(事中):
Hystrx
限流+降级: 对数据库进行限流,避免将数据库弄宕机。
例如,数据库可以承担2000个请求, 现在由于缓存挂了导致5000请求到达数据库。 限制2000个请求到达数据库, 剩下的3000个请求走降级逻辑。
事后:
尽快重启,恢复Redis。要开启持续化,保证Redis数据不丢失。
Redis穿透的处理?
多个请求都没有对应的缓存,每次都会去数据库查询。可能每次数据库里面都没有找到数据, 这样每次都会去查库, 但是每次都不会缓存。
可以将这些缓存穿透这些请求key,放一个对应的空value,这样,下次请求的时候可以返回空值。
会有几个问题:
- 如果这个key,下次在数据库里面有值,这样就查不出来。
- 如果每次的key都不一样, 每次都缓存,意义也不大。
- 这样会产生大量的key占用了redis的空间。
问题1, 可以将这缓存设置一个比较短的过期时间 ,5秒~10秒,过期,这样下次就可以进行数据库查询了。
Redis 击穿的处理?
缓存击穿是穿透的一个特殊的表现,有一个热点的key,承接着大量的并发, 这时候过期了, 这大量的并发会直接到达数据库, 这个就叫做缓存击穿。
热点数据不过期,数据有更新的时候,进行redis更新。
会导致Redis占用过大。 有的热点数据可能过几个月就不是热点了。
给热点数据续期,每次访问,修改热点数据的key的有效期。写一些逻辑,这个数据访问了1000次,给续期一下, 然后清零,再次到达1000次访问,再次续期清零。
分布式锁, 例如1w个请求, 同时到达,只有1个能够获取到锁,然后去数据库里面查询,将数据放到redis, 那么剩下的请求就可以到达redis里面去获取到数据了。
Redis的删除机制是怎么样的?
100毫秒随机检查一些KEY ,是过期的key就删除。 每次获取key的时候,先检查这个key是否过期,如果过期,就删除掉。
针对已经过期的内存
还有就是内存淘汰机制:
线程安全原理? 为为什么线程安全?
单线程。
热点数据的处理, 怎么设置过期时间?如何续期?
Redis里面的结构?槽位?
Redis装满了怎么办?
纵向扩展。搭建集群模式。
怎么保证高可用?
Master 结点一定要开启持持久化。
不然Master一重启,就会将所有空数据同步到salve。全部结点清空。
怎么保证高并发?
读写分离,用多个Redis支撑读。10w并发以下,1主多从架构。
使用哨兵模式和使用集群模式。
网友评论