- 利用Redis事务确保原子性:
- Redis事务通过
MULTI
、EXEC
命令实现。MULTI
用于标记事务块的开始,在MULTI
之后的所有命令会被放入队列中,而不会立即执行。EXEC
用于执行事务块中的所有命令,这些命令会作为一个整体被执行,要么全部成功,要么全部失败,从而保证原子性。
- 在并发情况下保证数据一致性:
- 乐观锁:使用
WATCH
命令实现乐观锁机制。WATCH
可以监控一个或多个键,在执行EXEC
之前,如果被监控的键被其他客户端修改,那么事务会被打断,EXEC
返回nil
,客户端可以根据返回值决定是否重试事务。
- 相关Redis命令示例:
- 添加商品到购物车(假设购物车以哈希表存储,键为用户ID,哈希表字段为商品ID,值为商品数量):
# 开启事务
MULTI
# HINCRBY命令用于增加哈希表中指定字段的值,这里将商品数量增加1
HINCRBY user:1 cart:product:1 1
# 执行事务
EXEC
# 开启事务
MULTI
# 假设新的商品数量为5
HSET user:1 cart:product:1 5
# 执行事务
EXEC
# 开启事务
MULTI
# HDEL命令用于删除哈希表中的字段
HDEL user:1 cart:product:1
# 执行事务
EXEC
# 监控购物车哈希表
WATCH user:1
# 获取当前商品数量
HGET user:1 cart:product:1
# 假设根据业务逻辑计算出新的商品数量为newQuantity
# 开启事务
MULTI
HSET user:1 cart:product:1 newQuantity
# 执行事务,如果在WATCH之后user:1被修改,EXEC返回nil,需要重试
EXEC