Mysql缓存策略

缓存方案

如何mysql提升读写性能的方式?

1. 连接池 阻塞io + 线程池

2. 异步连接 + 非阻塞io

3.sql执行触发(两种):1即时执行 2预编译执行 prepare:提升执行效率,跳过了词法句法分析,跳过了权限验证,跳过了优化器

4. 读写分离:写操作写到主数据库,读操作读从数据库。存在一致性问题:从数据库是异步的方式从主数据库中拿到数据,同一时刻,主数据库比从数据库更新,数据库不一致。两种一致性,最终一致性和强一致性

满足强一致性:读也从主数据库读

主从复制:解决了单点故障的问题

5. 缓存方案:将热点用户数据放入缓存(用户)  区别mysql内部的缓冲池:缓存MySQL内部的热点数据(操作)

方式:memcached、redis

 

针对热点数据进行讨论,热点数据有哪些状态?

1.mysql有,cache没有  //通过策略避免

2.mysql没有,cache有    //不正常,避免

3. mysql和chache 都有,数据不一致  //不正常

4. mysql和cache都有,数据一致  //追求

5.mysql和cache都没有   //正常

 

读策略:

1.先看cache是否有数据,如果有直接返回;

2. 如果没有,去访问mysql

3. 如果mysql有,缓存数据到cache

4.如果MySQL没有,不做操作

 

写策略:

删除:先去删除缓存,再去删除mysql

修改:先删除缓存,再修改mysql。原因:如果有两个用户同时修改,会造成cache的混淆,因为主要依据是mysql,也容易造成cache与数据库不一致

插入:先删除缓存,再去修改mysql,原因同上,防止已经有这个数据了

这种不能频繁修改

此时还不能达到第四种情况,达到了第一种情况

强一致性:修改完mysql后,再同步到cache

 

另一种方案:

修改:先修改缓存,设置过期时间(200ms,这个时间大于mysql同步到cache的时间),MySQL同步到cache时,需要删除过期时间

插入同上

这个性能比上面的方案高,但是此时mysql宕机了,就会只修改cache,不会修改mysql,访问时,就会拿到一个错误数据,作为业务逻辑。

可以用的前提是:mysql宕机,业务停摆,错误没有影响数据库,但是影响客户的显示。

 

 

mysql同步数据到redis:

原理:主从复制,利用中间件伪装成从数据库。怎么伪装?仿照从数据库的协议

posted @ 2022-08-21 17:32  放弃吧  阅读(102)  评论(0编辑  收藏  举报