悲观锁:

很悲观,认为什么时候都会出现问题,无论做什么都会加锁!

乐观锁:

  • 很乐观,认为什么时候都不会出现问题,所以不会上锁!更新数据的时候去判断一下,在此期间是否有人修改过这个数据
  • 获取version
  • 更新的时候比较version

Rides监视测试

正常执行成功

127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> set out 0
OK
127.0.0.1:6379> watch money    # 监视 money 对象
OK
127.0.0.1:6379> multi    # 事务正常结束,数据期间没有发生变动,这个时候就正常执行成功
OK
127.0.0.1:6379(TX)> DECRBY money 20
QUEUED
127.0.0.1:6379(TX)> INCRBY out 20
QUEUED
127.0.0.1:6379(TX)> exec
1) (integer) 80
2) (integer) 20

测试多线程修改值,使用watch 可以当做redis的乐观所操作

127.0.0.1:6379> watch money    # 监视 money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> DECRBY money 10
QUEUED
127.0.0.1:6379(TX)> INCRBY out 10
QUEUED
127.0.0.1:6379(TX)> exec    # 执行之前,另外一个县城,修改money的值,这个时候,就会导致事务执行失败
(nil)

上段代码执行exec前新开一个连接修改money值

127.0.0.1:6379>  get money
"80"
127.0.0.1:6379> set money 1000
OK

上边情况,发生失败后,重新获取最新值进行操作

Rides 入门(五)实现乐观锁相关推荐

  1. 什么是乐观锁和悲观锁

    一.什么是乐观锁 乐观锁,顾名思义就是总是假设最好的情况,每次获取数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和 CAS ...

  2. Spring Data JPA 从入门到精通~@Version处理乐观锁的问题

    @Version 处理乐观锁的问题 @Version 乐观锁介绍 我们在研究 Auditing 的时候,发现了一个有趣的注解 @Version,源码如下: package org.springfram ...

  3. 五分钟学会悲观乐观锁-java vs mysql vs redis三种实现

    1 悲观锁乐观锁简介 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果 ...

  4. redis setnx 原子性_Redis从入门到深入-分布式锁(26)

    1. 分布式锁 1.1 简介 锁 是一种用来解决多个执行线程 访问共享资源 错误或数据不一致问题的工具 如果 把一台服务器比作一个房子,那么 线程就好比里面的住户,当他们想要共同访问一个共享资源,例如 ...

  5. Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁( ...

  6. 图文并茂的带你彻底理解悲观锁与乐观锁

    这是一篇介绍悲观锁和乐观锁的入门文章.旨在让那些不了解悲观锁和乐观锁的小白们弄清楚什么是悲观锁,什么是乐观锁.不同于其他文章,本文会配上相应的图解让大家更容易理解.通过该文,你会学习到如下的知识. 1 ...

  7. 我知道乐观锁,但是我的确不知道CAS啊,到底什么是CAS

    目录 写在前面 一.初识CAS(比较并交换) 二.CAS原理(自旋锁.unsafe类) 三.CAS是什么 四.CAS缺点 五.ABA问题 写在前面 相信很多小伙伴对乐观锁.悲观锁都不陌生,但是说到ja ...

  8. 线程调度、公平锁和非公平锁、乐观锁和悲观锁、锁优化、重入锁

    1. 线程调度 线程调度指的就是给线程分配使用处理器的过程.主要的调度方式有两种:协同式调度和抢占式调度. 1.1 协同式调度 线程完成自己的任务之后主动通知系统切换到另一个线程上. 优点: 实现简单 ...

  9. 最全Java锁详解:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁

    在Java并发场景中,会涉及到各种各样的锁,比如:高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景,这些锁有对应的种类:公平锁,乐观锁,悲观锁等等,这篇文章来详细介绍各种锁的分类: 公 ...

最新文章

  1. 链表问题11——两个单链表相交的系列问题(一):找到有环链表的环入口节点
  2. Pandas读取csv时 设置列名
  3. 计算机网络华为模拟器,资源分享之计算机网络虚拟实践
  4. jquery easyui dataGrid动态改变排序字段名
  5. 【小白学习keras教程】八、Sequential Model和模型函数API两种模型建立方法
  6. dijkstra算法c++_Matlab 二维模拟退火算法最优路径(主程序)
  7. [BZOJ2429][HAOI2006]聪明的猴子(最小生成树)
  8. java学习(156):反序列化
  9. jQuery初识 - jQuery案例练习
  10. 030、JVM实战总结:G1分代回收原理深度图解:为什么回收性能比传统GC更好?
  11. 使用$.getJSON解决ajax跨域访问 JQuery 的跨域方法(服务器端为wordpress程序)
  12. Linux+ps进程解释,linux ps查看进程命令详解
  13. web网页设计实例作业 ——校园文化(7页) html大学生网站开发实践作业
  14. Postgresql临时表
  15. 2021年物联网竞赛-A卷-ZigBee【CC2530】
  16. Vulnhub-Tiki
  17. 设计之美 --大道至简
  18. mosaic数据增强
  19. 数学脱式计算在线计算机,三年级数学脱式计算.doc
  20. Error: tunneling socket could not be established, cause=getaddrinfo ENOTFOUND 11000

热门文章

  1. 如何选择合适的 Neo4j 版本(2022版)
  2. Knockout subscribe,computed,extend
  3. JavaWeb项目-快递代领-需求规格说明书(一)-软件工程-小组项目
  4. Wrappers or
  5. C语言~取反关键字//~1不是0
  6. 《例说51单片机(C语言版)(第3版)》——1-5 MCS-51的开发流程与工具
  7. java面向对象有哪些特征
  8. 爱因斯坦的“读书会“
  9. 我的Linux学习记录(蓝桥)————用户及文件权限管理
  10. labelme 使用教程