Redis事务的基本概念
Redis事务允许将多个命令打包成一个单元,按顺序执行,确保这些命令要么全部执行,要么全部不执行。事务通过MULTI、EXEC、DISCARD和WATCH四个核心命令实现。事务的特性包括原子性、一致性和隔离性,但不支持回滚。
Redis事务的核心命令
MULTI用于开启一个事务,之后的命令会被放入队列中,直到EXEC被调用时一次性执行。DISCARD用于取消事务,清空命令队列。WATCH用于监视一个或多个键,如果在事务执行前这些键被修改,事务会被中断。
# 开启事务
MULTI
# 添加命令到队列
SET key1 value1
SET key2 value2
# 执行事务
EXEC
事务的原子性
Redis事务的原子性体现在命令队列中的所有命令会被连续执行,不会被其他客户端命令打断。如果其中一条命令失败,后续命令仍会执行,不会回滚已执行的命令。例如:
MULTI
SET key1 "value1"
INCR key1 # 错误命令,因为key1不是数字
SET key2 "value2"
EXEC
执行后,key1会被设置为"value1",key2会被设置为"value2",而INCR命令的错误不会影响其他命令。
使用WATCH实现乐观锁
WATCH命令可以监视一个或多个键,如果在EXEC执行前这些键被其他客户端修改,事务会被放弃。这种机制类似于乐观锁,适用于需要检测数据变化的场景。
WATCH balance
balance_val = GET balance
MULTI
SET balance $balance_val - 10
EXEC
如果balance在`W
Redis事务的基本概念
Redis事务允许将多个命令打包成一个单元,按顺序执行,确保这些命令要么全部执行,要么全部不执行。事务通过MULTI、EXEC、DISCARD和WATCH四个核心命令实现。事务的特性包括原子性、一致性和隔离性,但不支持回滚。
Redis事务的核心命令
MULTI用于开启一个事务,之后的命令会被放入队列中,直到EXEC被调用时一次性执行。DISCARD用于取消事务,清空命令队列。WATCH用于监视一个或多个键,如果在事务执行前这些键被修改,事务会被中断。
# 开启事务
MULTI
# 添加命令到队列
SET key1 value1
SET key2 value2
# 执行事务
EXEC
事务的原子性
Redis事务的原子性体现在命令队列中的所有命令会被连续执行,不会被其他客户端命令打断。如果其中一条命令失败,后续命令仍会执行,不会回滚已执行的命令。例如:
MULTI
SET key1 "value1"
INCR key1 # 错误命令,因为key1不是数字
SET key2 "value2"
EXEC
执行后,key1会被设置为"value1",key2会被设置为"value2",而INCR命令的错误不会影响其他命令。
使用WATCH实现乐观锁
WATCH命令可以监视一个或多个键,如果在EXEC执行前这些键被其他客户端修改,事务会被放弃。这种机制类似于乐观锁,适用于需要检测数据变化的场景。
WATCH balance
balance_val = GET balance
MULTI
SET balance $balance_val - 10
EXEC
如果balance在`W
950

被折叠的 条评论
为什么被折叠?



