首页 > 编程知识 正文

如何避免读取脏数据,在db技术中脏数据是指什么

时间:2023-05-03 10:13:57 阅读:167260 作者:367

这里是修真院后方的小教室,所有的分享句子都来源于

【背景介绍】【知识分析】【常见问题】【解决方案】【编码实战】【思维拓展】【更多讨论】【参考文献】

通过8个方面深入分析后端知识/技能,并在本篇中分享:

【脏数据是什么? 缓存中可能出现脏数据吗? 如果发生脏数据该怎么办? 】

你好。 我是IT修真院上海分院第十期的学生幽默小栗旬。 是诚实、纯洁、善良的java程序员。 今天和大家分享。 修真院官网java (职业)任务六、深思中的知识点——

脏数据是什么? 缓存中可能出现脏数据吗? 如果发生脏数据该怎么办?

(1)背景介绍:

脏数据:从目标中取出的数据已过期、错误或没有意义的数据称为脏数据。

脏读:读取的数据称为脏读。

)2)知识分析) 1、数据库中的并发事务问题:

脏读:并发访问时,不同的事务处理相同的数据,在事务a修改了数据且未提交的时候,事务b读取了该数据,事务a读取了修改后的数据

丢失更新:对同一行中数据不同的事务进行更新,并复盖结果

幻读:事务a前后读取2次,之后读取1次的数据增多,事务b在2次读取的中途已经进行了数据插入

不可重复读取:事务a读取事务b修改前后的2次数据,不符合隔离型

隔离级别:可以解决上述问题。 mysql的缺省可重新读取隔离级别仅在于数据库与读取的数据不匹配

2、mybati主缓存中的脏数据:

我的mybatis一级缓存—默认为SqlSession级别。 在session中查找的所有数据都放在session中,下次查询相同id的数据时,会直接将缓存流向缓存而不是数据库进行检索。

mybatis缓存的脏数据:如果不同的sqlSession在操作数据库,l1缓存只会生成脏数据,以确保当前sqlSession的添加和删除操作在l1缓存中自动更新。

3、mybati二级缓存中的脏数据:

我的mybatis辅助缓存—在会话工厂级别与namespace相关联。 将相同的namespace放置在缓存对象中,并且在此namaspace上执行非sselect语句时,将清除整个namespace的所有缓存。

mybatislevelcache脏数据:导致脏读取的操作通常发生在多个表的关联操作中。 例如,两个不同的mapper涉及同一表的添加/删除检查操作。 当一个映射器对此表执行查询操作时,另一个映射器执行更新操作并刷新缓存,然后第一个映射器再次查询时,这次查询的数据为脏数据。 发生脏读的原因是他们的操作缓存不一样。

因此,不建议使用mybatis主辅助缓存,建议使用名为memcached或redis的第三方缓存。

)3)常见问题:如何在redis中更新缓存以避免脏读?

(4)解决方案:读写部分:

redis存在数据{

读取redis数据

}else{

读取数据库,保存redis并设置超时时间

更新部分:

数据库更新(if )。

设置redis更新超时时间

(5)编码实战)演示读写部分和更新部分

)6)拓展思路)其他方法进行redis数据的更新

1、积极更新:后台点击更新缓存按钮,在DB中查找最新的数据集合,删除原始缓存数据,将新数据保存到缓存中(或通过定时任务进行) )。

问题:如果在更新过程中删除缓存后,业务正好在执行查询,此时返回的数据将为空,从而影响用户体验。 透过高并发DB可能会导致服务崩溃

2、用户触发更新:前台获取数据时,发现没有缓存数据,数据库中将数据同步到缓存

问题:如果并发请求的缓存数据不存在,则会发生并发查询数据操作

3、预加载数据:后台点击刷新缓存按钮,从DB中查找最新的数据集合。 这里不删除缓存,通过遍历数据来复盖和删除无效数据

问题:逻辑麻烦,更新机制行不通

(7)参考文献:百度谷歌

)8)进一步讨论) Q1 )数据库的脏数据和redis的脏数据的差异?

A1 )数据库的脏数据是用户操作数据保存的,与保存的数据实际上不一致。 redis脏数据相对于数据库数据,如果redis数据与数据库内的数据不一致,则成为脏数据

Q2 )文中代码实战中的redis更新方式有什么缺点?

A2 )缺点:增加的判断方法在效率低、同时量多的情况下,效率的影响变大

Q3 )如何主动进行redis更新?

A3 )在后台管理中,设置按钮,更新redis的操作一般在晚上用户访问量较少的时候,从数据库中检测数据并放入redis

(9)鸣谢:

感谢朱明星wgdxxm。 本教程是根据他们以前的技术共享完成的。

(10 )结束语:

今天的共享到此为止。 请称赞、转发、留言、拍砖头~

PPT链路视频链路

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。