MST

星途 面试题库

面试题:Redis事务在简单购物车场景中的应用

假设你正在开发一个简单的电商购物车功能,使用Redis实现。请描述如何利用Redis事务来确保购物车操作(如添加商品、更新商品数量、删除商品)的原子性,以及在并发情况下如何保证数据的一致性。同时,写出相关的Redis命令示例。
15.2万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试
  1. 利用Redis事务确保原子性
    • Redis事务通过MULTIEXEC命令实现。MULTI用于标记事务块的开始,在MULTI之后的所有命令会被放入队列中,而不会立即执行。EXEC用于执行事务块中的所有命令,这些命令会作为一个整体被执行,要么全部成功,要么全部失败,从而保证原子性。
  2. 在并发情况下保证数据一致性
    • 乐观锁:使用WATCH命令实现乐观锁机制。WATCH可以监控一个或多个键,在执行EXEC之前,如果被监控的键被其他客户端修改,那么事务会被打断,EXEC返回nil,客户端可以根据返回值决定是否重试事务。
  3. 相关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