千家信息网

Redis中的事务/锁

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Redis支持简单的事务Redis与 mysql事务的对比注: rollback与discard 的区别如果已经成功执行了2条语句, 第3条语句出错.Rollback后,前2条的语句影响消失.Disc
千家信息网最后更新 2026年11月01日Redis中的事务/锁

Redis支持简单的事务

Redis与 mysql事务的对比

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

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

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

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


(使用multi后,并没有真正执行,而是放到一个queued(队列)里,exec后才会执行)


(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监听

语句 事务 乐观 悲观 成功 作用 只是 只有 命令 对象 想法 语法 问题 队列 变化 影响 监听 适当 危险 世界 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 耶加雪菲 互联网科技工作委员会主任 中关村互联网 科技集团 互联网科技工作委员会副主任毛军 上海万想互联网科技 新华互联网科技校企合作 顺网科技2021年互联网排名 华脉科技工业互联网产品 蓝色互联网科技 互联网科技实习生岗位职责 华服互联网科技官网 武汉健翔互联网络科技有限公司 互联网科技人工智能实验室 翼展科技 首家互联网医院 深圳艾果互联网通讯科技 恒生互联网科技业指数调整周期 互联网企业科技类企业如何做账 互联网领先科技宣传片 宇信科技在杭州互联网排第几 北京军民互联网科技公司 上海卓越科技互联网 互联网科技金融 卓越科技互联网 招聘 互联网科技素材视频竖屏 福建科技产业互联网发展 移动互联网年度科技创新 互联网科技人工智能实验室 民营互联网公司国防科技 阿里互联网科技企业 张家口科技产业互联网平台
0