成都银杏酒店数字化运营管理平台 - 客房预订核心引擎。 我的工作:Redis 原子化库存扣减. 采用 Redis 的 String 类型存储细粒度库存值,Key 的设计遵循业务唯一性约束: text 复制 下载 Key 格式: inventory: room: {room type id}:date:{check in date} Value: 剩余可售房间数量(整型) TTL: 设置为业务过期时间(如入住日期后24小时自动清理)...
技术目标 业务解耦:订单核心服务只负责发布领域事件,不感知具体下游消费方。 削峰填谷:高峰期瞬时订单消息进入队列缓冲,由消费者按自身处理能力匀速消化,保护下游服务。 可靠性保证:通过消息持久化、生产端确认(Publisher Confirm)、消费端手动确认(Manual Ack)机制,实现消息“至少投递一次”的可靠语义,避免消息丢失。 幂等性设计:确保同一消息被重复消费时不会产生副作用。...
技术目标 业务解耦:订单核心服务只负责发布领域事件,不感知具体下游消费方。 削峰填谷:高峰期瞬时订单消息进入队列缓冲,由消费者按自身处理能力匀速消化,保护下游服务。 可靠性保证:通过消息持久化、生产端确认(Publisher Confirm)、消费端手动确认(Manual Ack)机制,实现消息“至少投递一次”的可靠语义,避免消息丢失。 幂等性设计:确保同一消息被重复消费时不会产生副作用。...
2. 原子扣减逻辑实现(Lua 脚本) 为避免“读取-判断-写入”三步操作在并发环境下的竞态条件,将整个检查与扣减逻辑封装为一段 Lua 脚本,利用 Redis 单线程执行 Lua 脚本的特性保证原子性。 Lua 脚本内容: lua 复制 下载 -- KEYS[1]: 库存Key -- ARGV[1]: 请求扣减数量 local key = KEYS[1] local requested = tonumber(ARGV[1]) local current = tonumber(redis.call('GET', key) or 0) ...