学习

使用 Redis 构建快闪店应用程序

Ajeet Raina
作者
Ajeet Raina, Redis 前开发者增长经理

快闪店正成为零售商创造新收入来源、吸引客户、测试产品概念或清理多余库存的流行渠道。由于这种商店旨在快速搭建并在不久后关闭,因此花大量时间进行开发是没有意义的。借助合适的 Redis 模块,您可以轻松构建强大的客户体验,而无需大量开发工作。

这个快闪店演示展示了一家销售单一产品且有 10,000 件库存可供购买的公司。每位客户限购一件,销售仅持续 10 分钟,因此订单处理必须是即时的。该演示展示了如何使用 Redis Streams、Redis Time Series、RedisGears 和 Grafana 的 Redis 数据源实时可视化数据管道。

步骤 1. 克隆仓库#

git clone https://github.com/redis-developer/redis-pop-up-store/

步骤 2. 运行应用#

docker-compose up -d

步骤 3. 访问 Grafana 仪表板#

打开 http://IPAddress:3000 访问 Grafana 仪表板

Grafana 每 5 秒查询 streams 和 Time-Series 键,使用 Grafana Redis 数据源显示样本。此 Grafana 仪表板显示

  • 可用产品:产品键的值,随着订单完成而减少
  • 客户下单、订单处理和订单完成:queue:customers、queue:orders 和 queue:complete streams 的长度
  • 客户溢出:客户提交的订单与完成订单之间的差额
  • 客户下单:5 秒内创建的订单
  • 队列中的订单:等待处理的订单
  • 完成流:5 秒内完成的订单

工作原理#

  • Node.js 脚本向 Customers 和 Orders streams 添加随机数据
  • RedisGears 使用 StreamReader 监控所有 queue: 键并添加 Time-Series 样本
# Add Time-Series
def tsAdd(x):
   xlen = execute('XLEN', x['key'])
   execute('TS.ADD', 'ts:len:'+x['key'], '*', xlen)
   execute('TS.ADD', 'ts:enqueue:' + x['key'], '*', x['value'])


# Stream Reader for any Queue
gb = GearsBuilder('StreamReader')
gb.countby(lambda x: x['key']).map(tsAdd)
gb.register(prefix='queue:*', duration=5000, batch=10000, trimStream=False)
  • 另一个 RedisGears 脚本完成订单
    • 将数据添加到 queue:complete stream
    • 删除客户订单
    • 减少产品数量
    • 截断 Orders 队列
# Complete order
def complete(x):
    execute('XADD', 'queue:complete', '*', 'order', x['id'],
            'customer', x['value']['customer'])
    execute('XDEL', 'queue:customers', x['value']['customer'])
    execute('DECR', 'product')


# Stream Reader for Orders queue
gb = GearsBuilder('StreamReader')
gb.map(complete)
gb.register(prefix='queue:orders', batch=3, trimStream=True)

附加资源#