在springboot这种单例模式下,本地锁只能锁住当前线程,当其他服务的请求过来时是锁不住的,这时就需要使用分布式锁。

每个服务只放行一个请求过来,也大大减少了数据库的压力,这种方式可行吗?不行!如果每个服务的请求都是读数据库的话,每个服务都放行一个请求来构建缓存,没有太大问题,确实大大减少了数据库的压力。 但是!如果有两个请求是往数据库写数据,就会导致其他服务的内存与数据库的数据不一致性。

当第一个请求往数据库写数据,然后去替换缓存,这时由于网络原因,第二个请求过来,又更改了数据库,往缓存中写入了数据,这时第一个请求写入缓存覆盖了第二个请求写入缓存的数据,就会导致数据的不一致性。

本地锁

当请求过来时,先在方法中加上本地锁,拿到锁之后判断缓存中是否有数据,有数据直接返回释放掉锁,没有数据查询数据库。

上面的两张图,看见输出了两次查询了数据库可以可以看见,我们的本地锁实效了 没有锁住本地线程只放行一个请求去查询数据库,而是放了两个请求去查询数据库。 原因是没有保持查询数据库和刷新

第三章 本地锁和分布式锁的区别相关推荐

  1. 花5min就能搞清楚redis和zookeeper分布式锁的区别,太有必要读一下了

    今天有个师弟问到了我这个问题,我说网络上文章有很多,自己查一下吧,他说读了好几篇还是不太清楚,于是我就搜了一下,呃-- 最终还是耐心地给他上了一课,他听完以后感激涕零,想到他晚上回到家,倒上二两散装白 ...

  2. Redis与Zookeeper实现分布式锁的区别

    Redis与Zookeeper实现分布式锁的区别 1.分布式锁解决方案 1.采用数据库 不建议 性能不好 jdbc 2.基于Redis实现分布式锁(setnx)setnx也可以存入key,如果存入ke ...

  3. 分布式锁的三种实现方式_分布式锁的多种实现方式

    目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题.分布式的CAP理论告诉我们"任何一个分布式系统都无法同时满足一致性(Consistency) ...

  4. 三、基于ZK实现分布式锁

    一.分布式锁介绍 分布式锁主要用于在分布式环境中保护跨进程.跨主机.跨网络的共享资源实现互斥访问,以达到保证数据的一致性. 二.架构介绍 在介绍使用Zookeeper实现分布式锁之前,首先看当前的系统 ...

  5. Java三种方式实现redis分布式锁

    一.引入原因 在分布式服务中,常常有如定时任务.库存更新这样的场景. 在定时任务中,如果不使用quartz这样的分布式定时工具,只是简单的使用定时器来进行定时任务,在服务分布式部署中,就有可能存在定时 ...

  6. 分布式锁的三种实现方式_分布式锁的几种实现方式~

    目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题.分布式的CAP理论告诉我们"任何一个分布式系统都无法同时满足一致性(Consistency) ...

  7. redis和zookeeper实现分布式锁的区别

    Redis实现分布式锁 1.根据lockKey区进行setnx(set not exist,如果key值为空,则正常设置,返回1,否则不会进行设置并返回0)操作,如果设置成功,表示已经获得锁,否则并没 ...

  8. Java实现分布式锁的三种方式

    文章目录 前言 一.基于数据库实现分布式锁 二.Redisson实现分布式锁 三.Zookeeper实现分布式锁 四.总结 前言 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问 ...

  9. 年轻人,看看 Redisson 分布式锁—可重入锁吧!太重要了

    作者 | 李祥    责编 | 张文 来源 | 企鹅杏仁技术站(ID:xingren-tech) 引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面 ...

最新文章

  1. 1013 Battle Over Cities(并查集解法)
  2. win10下用Linux搭建pythonnodejs开发环境
  3. Docker Hello World容器运行报错的解决办法
  4. C# 多种方式发送邮件(附帮助类)
  5. 《Python编程从入门到实践》记录之类的创建
  6. 【Linux】Linux中文本编辑器和系统管理命令
  7. c++代码好玩_Python开源学习:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...
  8. LVM原理、创建、扩容、缩减、快照详解
  9. 第一章 CLR执行模型
  10. 在vue 中使用Stylus
  11. 肌电信号 原始信号 积分_实验室人必看!复杂的色谱峰要如何正确积分?
  12. matlab画坐标系,Matlab如何绘制十字坐标系??
  13. 有关产品项目管理的ISO/IEC/IEEE标准
  14. C# winform 魔兽MH全图 :WjeWar V1.5 (完全开源)
  15. Android 颜色透明度大全
  16. 小白刷LeeCode(算法篇)6
  17. Excel报表的制作
  18. 读“人生有一种牛逼,叫我能背下来”
  19. 矿大计算机学院的周裕浩,中矿大计算机学院举办“图灵教育计划”电子信息专业交流会...
  20. html判断手机浏览器,JS判断浏览器iOS(iPhone)、Android手机移动端

热门文章

  1. Hdu 1496 Equations(巧妙哈希)
  2. Dango Web 开发指南 学习笔记 3
  3. 《Essential C++》学习笔记 第三章:泛型编程风格(一)
  4. 你好,WeDataSphere!
  5. 计算机系统中三级存储器结构,计算机三级存储体系(1)
  6. OSChina 周三乱弹——最近你炒股了吗?
  7. python比c语言好学吗-总算找到c语言和python哪个好学
  8. 【SaltStack官方版】—— EventsReactor系统—BEACONS
  9. 正面管教php_正面管教之PHP(家长帮助家长)
  10. SAP 批量导出客户主数据