脏读

  • 脏读:在业务中读取的数据出现不一致的错误。
package demo;/* 脏读:数据不一致的错误。* *  在对一个对象的方法加锁的时候,需要考虑业务的整体性,*  在demo中为setUser/getUser方法同时加锁synchronized同步关键字,*  保证业务的原子性,不然会出现业务错误。* */
public class DirtyRead {private String userName = "lc";private String password = "123";//设置User的名、密码public synchronized void setUser(String userName, String password){this.userName = userName;try {Thread.sleep(3000);} catch (Exception e) {e.printStackTrace();}this.password = password;System.out.println("There set UserName : "+userName +"---password:----"+password);}//得到User信息public synchronized void getUser(){System.out.println("There get UserName : "+userName +"---password:----"+password);}//testpublic static void main(String[] args) throws InterruptedException {final DirtyRead dr1 = new DirtyRead();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {dr1.setUser("Jack", "123456");}});/** t1线程只休眠等待1s,但是在setUser方法中,有Thread.sleep(3000);等待3秒。* 也就是说,在set方法还没有执行完,主线程就开始调用getUser方法。* 这样就造成了数据的不一致性,脏读* */t1.start();t1.sleep(1000);dr1.getUser();}
}
getUser方法没有加synchronized时:结果
There get UserName : Jack---password:----123
There set UserName : Jack---password:----123456getUser方法加上synchronized时:结果
There set UserName : Jack---password:----123456
There get UserName : Jack---password:----123456

关系型数据库中的一致性表现

  • 我们常说的ACID:原子性、一致性、隔离性、永久性
场景描述:
一个用户A在9:00访问数据库表table。查询一个数据num=100,假设table数据量1000W
,需要10分钟才能查询到num,
然后一个用户B , 在9:05访问数据库,对数据num进行Update,num=200。
问:用户A查询到的数据num的值,是100还是200?
  • 用户A在9:00发起的查询,他查询到的数据永远只是9:00这一刻数据库的数据,所以是num=100,
  • 为什么?
比如说Oracle数据库中有个Undo的概念,类似于日志,记录修改数据的旧值。
A——9:00发起查询,在9:10查到num=?
B在9:05提交update了num=200。
A在查到num的值的时候,发现num有更改过,数据库就去Undo中找旧值返给A。
就旧值返给A,即使没有,报一个异常snapshot too  old的异常。
数据库让它报异常都不会将num=200返回给A,这就是关系型数据库的一致性表示。

脏读和数据库一致性的分析相关推荐

  1. Redis 缓存实战——缓存、数据库一致性问题分析与解决方案

    引言 缓存与数据库一致性的问题自从出现了缓存概念后就一直被提及,它是一个缓存方案的先天缺陷,只要存在缓存,就势必会讨论缓存与数据库一致性的问题. 一致性问题还广泛存在于各种分布式存储场景中,如主从一致 ...

  2. 好文推荐 | 缓存与数据库一致性问题深度剖析 (修订)

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 来源:后端技术漫谈 当我们在做数据库与缓存数据同步时,究竟更新缓存,还是删 ...

  3. 分布式MySQL数据库TDSQL架构分析

     分布式MySQL数据库TDSQL架构分析 发表于11小时前| 次阅读| 来源程序员电子刊| 0 条评论| 作者雷海林 MySQLTDSQL腾讯架构 width="22" he ...

  4. 缓存和数据库一致性问题,看这篇就够了

    作者 | Magic Kaito 来源 | 水滴与银弹 如何保证缓存和数据库一致性,这是一个老生常谈的话题了. 但很多人对这个问题,依旧有很多疑惑: 到底是更新缓存还是删缓存? 到底选择先更新数据库, ...

  5. 故障分析:数据库一致性关闭缓慢问题诊断

    想必我们大家都知道,Shutdown immediate即一致性关闭数据库,数据库下次启动不需要做实例恢复即可open数据库.那么当数据库一致性关闭出现缓慢等状况时,该怎么办呢?那我们就来一起分析一下 ...

  6. 缓存与数据库一致性保证

    缓存与数据库一致性保证 本文主要讨论这么几个问题: (1)啥时候数据库和缓存中的数据会不一致 (2)不一致优化思路 (3)如何保证数据库与缓存的一致性 一.需求缘起 上一篇<缓存架构设计细节二三 ...

  7. Redis 双写一致性问题分析

    Redis 双写一致性问题分析 1.更新数据库,不动缓存 只设置过期时间(兜底). 如果说业务不要求强一致性,这样就可以了,像12306抢票的时候,票数就不是准的,只要去下单买票的的时候,判断db的库 ...

  8. 缓存和数据库一致性问题

    文章目录 1. 缓存和数据库一致性问题 2. 三个经典的缓存模式 2.1 Cache-Aside 2.1.1 读缓存 2.1.2 写缓存 2.1.3 延迟双删 2.1.4 如何确保操作缓存和操作数据库 ...

  9. 如何保证缓存和数据库一致性?

    如何保证缓存和数据库一致性? 引入缓存提高性能 缓存利用率和一致性问题 并发引起的一致性问题 删除缓存可以保证一致性吗? 如何保证两步都执行? 主从延迟和延迟双删问题 可以做到强一致性吗? 总结 如何 ...

最新文章

  1. python和c混合编程 gil_终于搞明白python与gil
  2. 怎么安装SharePoint2013 preview 在SQL2012 和 Windows Server 2008 R2 SP1
  3. Android之IPC通信中的UID和PID识别
  4. 王飞跃教授:生成式对抗网络GAN的研究进展与展望
  5. zookeeper源码分析之leader选举
  6. 5.2.2 std::atomic_flag的相关操作
  7. anaconda下载太慢怎么办_Windows10下anaconda成功运行Cython
  8. mysql dump 主从_mysqldump导出数据中带主从同步的状态信息参数:master-data和dump-slave...
  9. 「WC 2019」数树
  10. laravel安装指定版本
  11. 一个设置提升Microsoft Store下载速度
  12. Storport MSI (Message Signaled Interrupts)
  13. c++求解一元二次方程的解
  14. 共享内存的创建和映射shmget()和shmat()
  15. linux grep -r 查询相关名字的文件以及ps指令
  16. ha456 jar下载 免费 亲测有效
  17. spring整合quartz框架定时任务实战
  18. 合肥工业大学计算机与信息学院研究生招生,合肥工业大学计算机与信息学院有关研究生分配的有关规定...
  19. 《走近动物园管理员——ZooKeeper》
  20. 震惊!刷脸吃饭时代真的来临——相思豆餐厅引进乐牛人脸识别智盘系统

热门文章

  1. substring java_Java String.substring()用法
  2. VIM: quickFix窗口的使用
  3. 播放失败246106异常代码_web前端面试题:您能读懂的Promise源码实现(手写代码)...
  4. jupyter notebook上完美运行tensorflow、keras
  5. aurora IP中选择了小端支持,但小端体现在了什么地方呢?
  6. HDLBits 系列(35)Lemmings Game
  7. HDLBits 系列(3)Priority Encoder(Case/Casez)
  8. 遇见BUG(3)critical warning也要关注!
  9. 中小型制造企业如何玩转MES系统?
  10. HTML5上传图片,后台使用java