【1】redis线程模型:单线程工作模型
【2】单线程怎么能支持高并发?
1.io多路复用的程序,非阻塞
2.基于内存的操作
3.单线程避免了多线程的频繁上下文切换问题
【3】redis不能支持高并发的瓶颈在哪里?单机
【4】若要支持10万的高并发,怎么办?读写分离 主从架构 master、slave
主从架构————>读写分离————>支持10万读写分离的架构
【5】redis缓存雪崩和穿透
缓存雪崩现象:缓存宕机、几千几万个请求直接访问数据库,数据库也宕机,导致整个服务也宕机。
【6】解决缓存雪崩:
1.保证集群的可用性(主从服务)
2.缓存不可用时,基于系统内部的缓存ehcache
3.限流加降级组件。hystrix限流,避免数据库被打死。或者降级访问友情提示页面等
4.redis持久化机制。尽快恢复缓存集群,一旦重启,自动从磁盘上加载数据恢复内存中的数据
【7】缓存穿透
缓存穿透是指查询一个不存在的key数据,由于缓存没命中需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,流量大时DB会挂掉,这也是经常提的缓存命中率问题
解决:
1.如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库
2.在控制层对要查询的key进行校验,不符合则丢弃,然后再放行给后面的正常缓存处理逻辑