网站运营推广主要做什么的泰安房产网站
news/
2025/9/23 9:32:50/
文章来源:
网站运营推广主要做什么的,泰安房产网站,wordpress quform,app网站建设费用目的
Redis和Msql来保持数据同步#xff0c;并且强一致#xff0c;以此来提高对应接口的响应速度#xff0c;刚开始考虑是用mybatis的二级缓存#xff0c;发现坑不少#xff0c;于是决定自己搞
要关注的问题点
操作数据必须是唯一索引
如果更新数据不是唯一索引#…目的
Redis和Msql来保持数据同步并且强一致以此来提高对应接口的响应速度刚开始考虑是用mybatis的二级缓存发现坑不少于是决定自己搞
要关注的问题点
操作数据必须是唯一索引
如果更新数据不是唯一索引则数据库更新后的值与缓存不一致而查询还会走缓存而查询的值是脏值。
查询唯一数据数据值必须是全部字段
假如B交易查询字段不是全部字段进行查询放入缓存A交易进行查询时从缓存获取由于A交易需要全部字段所以就会出现不可预知的问题。
查询缓存数据后必须要在程序中再次进行条件判断
因为在redis中存储的的key是唯一索引所以当查询数据后只会命中唯一索引的数据其他附带查询条件不生效。
例如唯一索引为user_id 那么执行select * from t_user_auth_info where user_id‘111’ and user_level‘1’是条件user_level是不会生效
高并发场景下要注意脏数据的控制 假设是以上流程图在更新操作第一步删除缓存后线程切换到查询线程查询操作判断缓存中没有数据就会查询数据库并把数据存入到缓存中这时线程在切换到更新线程进行数据库的更新这会就会造成数据库的数据与缓存有不一致性。
最终方案
基于以上问题我们的最终流程图如下 以上流程图在进行更新操作时增加删除缓存lock如果这会查询操作判断缓存中有数据就直接返回数据如果没有再次判断有没有存在删除缓存lock,如果有则走数据库查询并返回不放入缓存如果没有则查询数据库并放入缓存并返回。
注意 登记缓存标识时增加缓存lock失效时间因为有可能删除缓存和数据库更新成功了而删除缓存lock失败了那这样后续查询就都走数据库了这个方案就失去意义了。
代码实现方案
通过aop对db的操作方法进行拦截查询方法采用一个切面删除和更新方法采用一个切面然后再按照以上流程进行编写我们这边是使用框架进行封装最后只需要开发人员配置以下xml即可
cache-configcache-entity pocom.demo.po.AuthUser key-prefixSYSTEM_Person po-throwstrue key-expire key-expire-time-unitkey-propertiesuserId/key-properties /cache-entity
/cache-config
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912061.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!