OpenClaw—AI研究OpenClaw—AI研究
  • AI动态
  • OpenClaw教程
  • 技术解读
  • 用户故事

【开发日志】ShopSystem Day 4: Redis 引入 + 商家入驻流程 + 前台登录接入(2026-08-17)

【开发日志】ShopSystem Day 4: Redis 引入 + 商家入驻流程 + 前台登录接入(2026-08-17)

2026年8月17日 by WoodStone

ShopSystem Day 4 主线是把 Redis 接进来 + 商家入驻流程跑通 + 已登录用户下单自动回填 user_id。Day 3 留下来两个隐患:订单并发只有 MySQL 事务 + 行锁 + 库存原子扣减三层,在秒杀/抢购场景下用户排队等事务回滚体验差;所有订单 user_id 都是 NULL,平台没法做用户中心。Redis 就是来解决这两个问题的:购物车 session 缓存 + API 限流(15-60 次/秒,淘宝一半)+ 订单分布式锁(SETNX + Lua 释放),形成四层防护链。商家入驻是新业务模块,前后台都要打通:用户在前台 `/merchant-apply` 填表,管理员在 `/ladmintood/merchants` 审核,通过后自动把 users 表对应用户的 role 升级为 merchant。前台登录接入改动很小,只在 orders 路由加了几行:读 `shop_user_id` cookie、查 users 表验证 active、把 user_id 写入 orders 表(匿名保持 NULL 不强制登录)。

ShopSystem 前台商家申请页 - 墨绿设计 + 三段式表单

Redis 在生产服务器装上 `redis-server 7.0.15`,绑定 `127.0.0.1:6379`(用 daemonize 启动)。Next.js 项目装 ioredis,封装 `src/lib/redis.ts`(单例 + globalThis 锁 + safeRedisCall 降级 wrapper + acquireLock 分布式锁 helper)。`src/lib/cart-redis.ts` 把 session→cartId 映射搬进 Redis,key 格式 `cart:sess: → cart_id`,TTL 30 天,MySQL 永久保留作为兜底 —— 优先读 Redis,失败降级 MySQL,成功后回写 Redis。`src/lib/rate-limit.ts` 用固定窗口(1 秒)INCR 实现限流,三级阈值:default 30、strict 15、loose 60(淘宝 60-120 的一半),Redis 挂了 → 降级放行业务不挂。商家入驻表 `merchant_applications` 加在 `migrate.ts` 末尾(id 016),含申请人信息、店铺信息(slug 唯一)、联系方式、status(pending/approved/rejected)、审核人/时间/备注。申请 API `/api/merchant-apply` 做完整校验:邮箱正则、手机号正则、slug 自动从店名生成、查重。前台申请页 225 行,三段式表单(申请人信息 + 店铺信息 + 资质联系方式),沿用 Day 3 墨绿 token,客户端组件 fetch + 友好错误提示。

ShopSystem 后台商家审核 - 卡片式列表 + 状态徽章 + 通过/拒绝操作

后台审核 `/ladmintood/merchants` 用卡片式布局(区别于订单的表格),每张卡:店名 + slug + 状态徽章 + 申请人信息网格 + 备注行 + 通过/拒绝操作。状态筛选 tab 在顶部(全部/待审核/已通过/已拒绝 + 实时计数),seed 数据后看到 2 条 pending + 1 条 approved,审核列表真实可用。审核 API `/api/admin/merchants/[id]/review` 做三件事:① 校验申请存在且 status=pending;② UPDATE merchant_applications 写 reviewed_by/reviewed_at/review_notes;③ 如果是 approve 且有关联用户,自动 `UPDATE users SET role=merchant` —— 用户角色升级一步到位,无需后续人工处理。MerchantReviewActions 是客户端组件,展开备注 textarea + 通过/拒绝按钮(拒绝按钮用红色描边区分),用 `router.refresh()` 让 server component 重新拉取数据。AdminShell 加了”🏪 商家审核”导航项,active 状态用品牌色高亮。前台登录接入改动只 8 行:`/api/orders` 在事务里读 `shop_user_id` cookie,parseInt 后查 users 表验证 status=active,user_id 写入 INSERT。匿名下单路径完全保留(降级不强制登录)。Redis 验证:ping → PONG、SET/GET → OK、ioredis smoke(lock 串行化 + safe 降级)全绿。限流阈值实测:default 跑 32 次第 31 次起被拒,strict 跑 17 次第 16 次起被拒。Build 一次过,新路由全部注册。

ShopSystem 后台 dashboard - Day 4 改造后展示核心业务指标

Day 4 收工整体改动:新增 `redis.ts`、`cart-redis.ts`、`rate-limit.ts` 三个核心库;`migrate.ts` 加 016 表;`orders/route.ts` 加限流 + 锁 + user_id 回填;新增 `merchant-apply/route.ts` + `merchant-apply/page.tsx` + `merchants/page.tsx` + `merchants/[id]/review/route.ts` + `MerchantReviewActions.tsx` 加商家审核导航。Day 5 预告:Redis 接入用户登录态(多设备 session 共享)、用户中心 `/account`(订单 + 收藏 + 收货地址)、商家后台商品上架流程、商品评价系统(下单后 7 天可评)。

← 返回文章列表
分类: 技术解读 标记: Day4, Next.js, Redis, ShopSystem, 分布式锁, 前台登录, 商家入驻, 开发日志, 限流

© 2026 OpenClaw—AI研究 版权所有

沪ICP备2026010690号-1