我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Redis中的事务/锁

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Redis中的事务/锁

Redis支持简单的事务

Redis与 mysql事务的对比

Redis中的事务/锁

注: rollback与discard 的区别
如果已经成功执行了2条语句, 第3条语句出错.
Rollback后,前2条的语句影响消失.
Discard只是结束本次事务,前2条语句造成的影响仍然还在

注:
在mutil后面的语句中, 语句出错可能有2种情况
1: 语法就有问题,
这种,exec时,报错, 所有语句得不到执行

2: 语法本身没错,但适用对象有问题. 比如 zadd 操作list对象
Exec之后,会执行正确的语句,并跳过有不适当的语句.

(如果zadd操作list这种事怎么避免? 这一点,由程序员负责)

Redis中的事务/锁
(使用multi后,并没有真正执行,而是放到一个queued(队列)里,exec后才会执行)

Redis中的事务/锁
(discard之后啥都没变,因为只是放在队列里。严格的说只能叫取消,不能叫回滚)

思考:
我正在买票
Ticket -1 , money -100
而票只有1张, 如果在我multi之后,和exec之前, 票被别人买了---即ticket变成0了.
我该如何观察这种情景,并不再提交

悲观的想法:
世界充满危险,肯定有人和我抢, 给 ticket上锁, 只有我能操作. [悲观锁]

乐观的想法:
没有那么人和我抢,因此,我只需要注意,
--有没有人更改ticket的值就可以了 [乐观锁]

Redis的事务中,启用的是乐观锁,只负责监测key没有被改动.

具体的命令---- watch命令
例:
redis 127.0.0.1:6379> watch ticket (监控ticket,如果发生了变化,则执行不成功)
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> decr ticket
QUEUED
redis 127.0.0.1:6379> decrby money 100
QUEUED
redis 127.0.0.1:6379> exec
(nil) // 返回nil,说明监视的ticket已经改变了,事务就取消了.
redis 127.0.0.1:6379> get ticket
"0"
redis 127.0.0.1:6379> get money
"200"

watch key1 key2 ... keyN
作用:监听key1 key2..keyN有没有变化,如果有变, 则事务取消

unwatch
作用: 取消所有watch监听

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Redis中的事务/锁

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

redis中事务机制及乐观锁的实现

Redis事务机制在MySQL等其他数据库中,事务表示的是一组动作,这组动作要么全部执行,要么全部不执行。 Redis目前对事物的支持相对简单。Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他的clie
2022-06-04

Redis实现事物以及锁的方法

目录一、什么是Redis事物二、Redis 事务命令三、命令行演示四、事物注意事项五、事务三特性六、分布式锁一、什么是Redis事物Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其
2022-07-27

事务和锁-

数据库加锁是修改哪一条加锁,还是在页上加锁,还是在表上加锁,数据库来决定如果你更改的是两条记录,就在两条记录上加锁,如果你更改的是很多条,这个时候数据库一看一条一条加锁太麻烦,给整个页加锁更省事,或者给整个表加锁更加省事加锁的级别越大,数据库越省事,数据库越省
事务和锁-
2021-01-25

redis事务

简介可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入,不许加塞作用在一个队列中,一次性,顺序性,排他性的执行一系列命令开启事务示例remoteSelf:1>multi"OK"remoteSelf
redis事务
2015-05-18
2023-09-08

redis 实战-redis 事务

redis 实战-redis 事务  1.描述    redis 事务单独的隔离操作:事务中的所有命令都会序列化、按顺序执行。事务在执行过程中,不会被其他客户端发送过来的命令请求所打断。   redis 事务没有隔离级别的概念:队列中的命令没有提交之前都不会实
redis 实战-redis 事务
2021-02-21

java中redis事务怎么配置的

本文介绍了Redis事务配置的详细步骤,包括开启事务、执行命令、提交或回滚事务、监视键、失败重试等。此外,还提供了Redis事务配置的选项、示例代码和性能考虑因素,帮助开发人员配置和管理Redis事务。
java中redis事务怎么配置的
2024-04-02

MySQL 事务和锁

事务概述当多个用户访问同一份数据时,一个用户在更改数据的过程中,可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态变为另外一个一致性状态,使用事务处理是非常必要的,事务具有以下四个特性:原子性(Atomicity):事务中所有操作视为一个原
MySQL 事务和锁
2020-12-06

Redis系列(九):Redis的事务机制

提到事务,相信大家都不陌生,事务的ACID四大特性,也是面试时经常问的,不过一般情况下,我们可能想到的是传统关系型数据库的事务,其实,Redis也是提供了事务机制的,本篇博客就来讲解下Redis的事务机制。1. 事务演示Redis的事务提供了一种将多个命令请求
Redis系列(九):Redis的事务机制
2016-07-18

编程热搜

目录