0
点赞
收藏
分享

微信扫一扫

Linux服务器开发,MySql缓存策略

海滨公园 2022-02-11 阅读 50

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习
MySql有哪些提升读写性能的方式?

  • 连接池 阻塞io+线程池
  • 异步连接 非阻塞io
  • sql执行处罚:及时执行+预编译执行
  • 读写分离
  • 缓存方案
    主从复制解决了单点故障的问题。

读策略

  • 先看cache里有没有数据,有直接返回。
  • 如果没有,再去MySql里拿数据。
  • 如果MySql里有数据,缓存到cache
  • 如果没有,那就是没有

最终一致性以及强一致性。

写策略

  • 先删除cache,再删除MySql
  • 先删除cache,再修改MySql。改进后直接修改缓存,设置过期时间,修改MySql去掉过期时间。
  • 先删除cache,再添加MySql。改进后直接修改缓存,设置过期时间,修改MySql去掉过期时间。

异步操作和同步操作相比,主要节约了网络传输的时间。

缓存穿透

redis和MySql中都不存在,redis没有数据就会一直请求MySql,而MySql也没有只能返回。当大量请求堆积到MySql,最后终于不堪重负。、
解决方案:

  • 发现MySql不存在,将redis设置<key,nil>设置过期时间,下次访问不在访问MySql,容易造成很多无效的redis缓存数据。
  • 设置布隆过滤器,不存在的热点数据直接过滤掉。

缓存击穿

redis没有,MySql有数据。当有大量并发请求,请求堆积MySql过大。某一个Key的大量请求。

  • 加锁,有锁就操作,没锁就休眠。
  • 将很多热key设置不过期。

缓存雪崩

redis宕机,数据全部为空,造成搞垮MySql。多个Key的大量请教。

  • 高可用的集群方案,如哨兵模式,cluster模式。
  • 设置随机时期值或其他机制错开失效时间。
  • redis开启持久化。
举报

相关推荐

0 条评论