学习

使用 Redis 构建弹出式商店应用程序

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

弹出式商店正在成为零售商创造新的收入来源、与客户产生共鸣、测试产品概念或处理过剩库存的热门渠道。由于想法是快速启动商店,然后尽快关闭它,因此在开发上花费大量时间是没有意义的。使用正确的 Redis 模块,您可以创建强大的客户体验,而无需进行大量开发工作。

此弹出式商店演示说明了一家销售单一产品且有 10,000 件产品可供购买的公司。每个客户可以购买一件产品,销售持续时间仅为 10 分钟,因此订单处理必须即时完成。演示展示了如何使用 Redis 流、Redis 时间序列、RedisGears 和 Redis 数据源与 Grafana 实时可视化数据管道。

步骤 1. 克隆存储库#

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

步骤 2. 运行应用程序#

docker-compose up -d

步骤 3. 访问 Grafana 仪表板#

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

Grafana 每 5 秒查询一次流和时间序列键,以使用 Grafana Redis 数据源显示样本。此 Grafana 仪表板显示

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

工作原理#

  • Node.js 脚本将随机数据添加到客户和订单流中
  • RedisGears 使用 StreamReader 监视所有 queue: 键并添加时间序列样本
# 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 流中
    • 删除客户端的订单
    • 减少产品数量
    • 修剪订单队列
# 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)

附加资源#