MST

星途 面试题库

面试题:Python结合Redis事务处理复杂业务场景

在一个电商购物车场景中,用户添加商品到购物车,购物车数据存储在Redis中。使用Python和Redis事务机制,如何实现以下操作:首先检查购物车中某种商品的数量是否小于库存数量,如果小于则增加购物车中该商品数量并减少库存数量,否则抛出异常并回滚事务。请写出Python代码实现该逻辑,假设库存数量存储在一个Redis键中,购物车数据以哈希表形式存储在Redis中。
26.4万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import redis


def add_to_cart(redis_client, product_id, cart_key, stock_key, increment_amount):
    pipe = redis_client.pipeline()
    try:
        # 开启事务
        pipe.watch(stock_key)
        # 获取库存数量
        stock = int(pipe.get(stock_key))
        # 获取购物车中该商品数量
        cart_count = pipe.hget(cart_key, product_id)
        if cart_count is None:
            cart_count = 0
        else:
            cart_count = int(cart_count)

        if cart_count + increment_amount <= stock:
            pipe.multi()
            # 增加购物车中商品数量
            pipe.hincrby(cart_key, product_id, increment_amount)
            # 减少库存数量
            pipe.decrby(stock_key, increment_amount)
            pipe.execute()
        else:
            raise Exception("库存不足")
    except Exception as e:
        print(f"发生异常: {e}")
        pipe.unwatch()
    finally:
        pipe.reset()


if __name__ == "__main__":
    r = redis.Redis(host='localhost', port=6379, db=0)
    # 初始化库存
    r.set('stock_key', 100)
    # 初始化购物车
    r.hset('cart_key', 'product_1', 0)
    add_to_cart(r, 'product_1', 'cart_key','stock_key', 5)