代码编织梦想

使用 watch 监控
悲观锁:
很悲观,什么时候都会出问题,无论做什么都加锁,效率较低

乐观锁:
很乐观,与悲观锁相反。

Redis的乐观锁实现过程:
1.更新数据的时候去判断一下,在此期间是否修改过数据。
2.获取version
3.更新的时候比较version

测试Redis watch

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 40
QUEUED
127.0.0.1:6379(TX)> incrby out 40
QUEUED
127.0.0.1:6379(TX)> exec #事务正常执行结束,数据期间没有发生变动,可以正常执行
1) (integer) 60
2) (integer) 40
127.0.0.1:6379> 

当多线程修改值,使用watch 检测到另一线程操作money导致发生变动,事务提交执行的时候,就会失败,使用watch可以当做redis 的乐观锁操作
当watch检测到数据变动的时候,此时watch失效,可以使用unwatch取消监视,再重新监视值,开启事务。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46999174/article/details/127169765

Redis 事务 watch实现乐观锁-爱代码爱编程

Redis事务介绍 简介相关命令Redis事务不保证原子性部分失败的情况全部失败的情况Watch实现乐观锁 简介 Redis 事务就是一组命令的集合,在事务提交时一次性顺序执行,其他客户端提交的命令不会插入到事务执行队列中。一次性、顺序性、排他性 Redis事务没有隔离级别,事务中的命令被加入执行队列时,并不会实际执行,只有

Java使用redis事务以及watch实现乐观锁秒杀-爱代码爱编程

乐观锁基于CAS(Compare And Swap)思想(比较并替换),是不具有互斥性,不会产生等待而消耗资源,但是需要反复的重试,但也是因为重试的机制,能比较快的响应。因此我们可以利用redis来实现乐观锁。 思路: 1.利用reids的watch功能,监控optimisticLockKey 的状态值 2.获取optimisticLockKey 的值 3

redis基本事务操作+实现乐观锁(watch)-爱代码爱编程

一、什么是原子性?? 同时失败或者同时成功!! 理解如下: 原子性即是,A原有5块石头,B原有3块石头;现有如下操作: A让C给予B一块石头,那么应该发生的事情有,A失去一块石头,变为4块,B得到一块石头变为5块;此时交易成功。 不排除有意外情况,比如C在给予B的过程中,B出门了,那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态, A

java redis 实现乐观锁,redis中事务机制及乐观锁的实现-爱代码爱编程

Redis事务机制 在MySQL等其他数据库中,事务表示的是一组动作,这组动作要么全部执行,要么全部不执行。 Redis目前对事物的支持相对简单。Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他的client命令。当一个client在一个链接中发出multi命令时,这个链接会进入一个事务上下文,该连接后续的命令

Redis WATCH实现乐观锁-爱代码爱编程

Redis WATCH实现乐观锁   WATCH监视! 悲观锁: 很悲观,什么时候都会出现问题,无论什么都会加锁! 乐观锁: 很乐观,认为什么时候都不会出现问题,所有不会上锁!更新数据的时候去判断一下,在此期间是否有人修改过这个数据version! 获取version 更新的时候比较version   测试 127

java redis知识-redis乐观锁-爱代码爱编程

锁机制 乐观锁:1)通过版本号来实现,先查询获取版本号,在更新的时候校验版本号并修改。 悲观锁:同步关键字就是悲观锁,也称为排它锁。 乐观锁还让用户查询当前版本号,悲观锁如果不释放,查都不让查询。 乐观锁存在多种实现方式:mysql数据库版本号,redis实现,CAS实现等。 在并发情况下,使用锁机制,防止争抢资源。 悲观锁是对数据的修

Redis事务,Redis实现悲观锁,乐观锁-爱代码爱编程

Redis 事务 redis 事务可以一次执行多个命令,并带有三个保证 exec命令执行前,多个命令被放入队列缓存exec命令执行后,缓存队列中的命令顺序执行,一旦有一个有误,不影响其它命令的执行在事务执行过程中,其它客户端提交的命令请求不会插入到当前的缓存命令队列redis事务执行的三个阶段 开启事务(multi)命令入队(queue)执行事务(e

Redis:分布式锁Watch-爱代码爱编程

Redis:分布式锁Watch 关键词 watch乐观锁(判断是否发生变化)秒杀简单实现一、利用Watch实现Redis乐观锁 乐观锁基于CAS(Compare And Swap)思想(比较并替换),是不具有互斥性(乐观),不会产生锁等待而消耗资源,但是需要反复的重试,但也是因为重试的机制,能比较快的响应。因此我们可以利用redis来实现乐观锁。具体

redis 实现乐观锁-爱代码爱编程

redis是单线程程序但是支持多进程同时访问同一个redis服务。这个时候就需要锁机制来处理一些并发问题。 redis提供了watch指令来实现乐观锁。watch和事务配合使用,往往写在multi之前,用来监视一个key,比如watch money。那么在接下来的事务被exec之前,如果money这个key的值被其它进程改动,那么这个事务就会放弃执行,以保

Redis学习:Redis实现乐观锁-爱代码爱编程

实际这部分是接着事务那一块,加了一个watch命令。 这里要有一个乐观锁和悲观锁的概念: 悲观锁: 很悲观,认为什么时候都会出现问题,无论做什么都会加锁 乐观锁: 很乐观,认为什么时候都不会出现问题,所以不会上锁!更新数据的时候去判断一下,在此期间是否有人修改过这个数据 获取version 更新的时候比较version watch命令 使用wat

Redis实现乐观锁(监控Watch)-爱代码爱编程

悲观锁: 很悲观,认为什么时候都加锁,无论做什么都会加锁 乐观锁: 很乐观,认为什么时候都不会出现问题,所以不会加锁,更新数据的时候去判断一下,在此期间是否有人修改过这个数据 获取version 更新的时候比较version Redis监视测试 正常执行成功 127.0.0.1:6379> set money 100 OK 127.0

redis实现乐观锁-爱代码爱编程

悲观锁:认为什么时候都会出问题,无论做什么都加锁,影响性能。 乐观锁:认为什么时候都不会出问题,所以不上锁,更新的时候去判断数据是否被修改。 redis实现: 访问线程1 # 0时刻 set in 100 # 1时刻 set out 0 # 2时刻 watch in # 3时刻 multi # 4 时刻 decrby in 20 # 5时刻 inc

利用watch实现redis乐观锁_新时代农民~的博客-爱代码爱编程

乐观锁基于 CAS ( Compare And Swap )思想(比较并替换),是不具有互斥性,不会产生锁等待而消 耗资源,但是需要反复的重试,但也是因为重试的机制,能比较快的响应。因此我们可以利用redis 来实 现乐观锁。具体思路如下: 1 、利用 redis 的 watch 功能,监控这个 re

redis watch机制实现分布式乐观锁_dream21st的博客-爱代码爱编程

在 Redis中使用 watch 命令可以决定事务最终是执行还是回滚。通常情况下,会在multi命令之前使用 watch 命令监控某些键值对,然后使用 multi 命令开启事务,执行各种对数据结构进行操作的命令,这个时候这些

redis 监控 watch实现乐观锁_redis的watch实现乐观锁-爱代码爱编程

监控! Watch 悲观锁: 很悲观,认为什么时候都会出问题,无论做什么都会加锁! 乐观锁: 很乐观,认为什么时候都不会出问题,所以不会上锁! 更新数据的时候去判断一下,在此期间是否 有人修改过这个数据 获取version更新的时候比较 version Redis测监视测试 正常执行成功! 127.0.0.1:6379> se