使用Redis构建分析仪表板应用程序

交互式分析仪表板有多种用途。它们允许您共享数据,并为您提供所有这些重要信息,以更快的速度做出改变游戏规则的决策。使用传统关系数据库构建实时动态仪表板可能需要一组复杂的查询。通过使用像Redis这样的NoSQL数据库,您可以使用少量Redis命令构建一个强大的交互式动态仪表板。

本教程展示了一个基本的分析仪表盘应用程序,使用NodeJS (JavaScript)编写的Redis位图。

步骤1。准备环境#

  • 安装节点-v12.19.0
  • 安装NPM-v6.14.8
  • 安装Docker-v19.03.13(可选)

第二步。克隆存储库#

git 克隆https://github.com/redis-developer/basic-analytics-dashboard-redis-bitmaps-nodejs

第三步。设置后端#

首先,我们将设置环境变量

转到/server文件夹(cd./server),然后执行以下命令:

内容提供商 .env.example.env

第四步。安装依赖项#

npm 安装

第五步。运行Docker Compose安装Redis#

docker网络创建全局
docker compose up-d——构建

第六步。运行后端#

npm 运行开发

第七步。设置前端#

转到/client文件夹(cd./client),然后:

内容提供商 .env.example.env

第八步。安装依赖项#

npm 安装

第九步。运行前端#

npm 发球

分析

它是如何工作的?#

数据的存储方式:#

事件数据存储在各种键和各种数据类型中。

对于每个时间跨度:

  • 年份:如2021年
  • 月份:如2021-03年(指2021年3月)
  • 日期:如2021-03-03(指2021年3月3日)
  • 周月:如2021-03/4(指2021年3月的第4周)
  • 随时

对于每个作用域:

  • 来源
  • 行动
  • 来源+行动
  • 动作+页面
  • 用户ID+操作
  • 全球的

对于每种数据类型(类型):

  • 计数(存储为字符串的整数)
  • 位图
  • 设置

生成的密钥如下所示:

rab: { 类型 } [ :自定义: { 客户名称 } ] [ :用户: { 用户ID } ] [ :来源: { 来源 } ] [ :行动: { 行动 } ] [ :第页: { } ] :时间跨度: { 时间跨度 }

其中[]中的值是可选的。

  • 对于每个生成的键,如rab:count:*,数据的存储方式如下:INCR{key}示例:

    增量rab:计数:操作:添加开始:时间跨度:2015-12/3
  • 对于每个生成的键,如:rab:set:*,数据的存储方式如下:SADD{key}{userId}示例:

    SADD rab:设置:操作:添加开始:时间跨度:2015-12/3 8.
  • 对于每个生成的键,如rab:bitmap:*,数据的存储方式为:SETBIT{key}{userId}1。例子:

    SETBIT rab:bitmap:action:addToCart:timeSpan:2015-12/3 8. 1.

队列数据#

  • 我们存储注册后购买了一些产品的用户(操作顺序很重要)。

  • 对于12月份的每个购买操作,我们检查用户之前是否执行了注册操作(注册计数器必须大于零)。

  • 如果是这样,我们将用户位设置为1,比如:SETBIT rab:bitmap:custom:court buy:timeSpan:{timeSpan}{userId}1

  • 例如,用户Id 2在2015年12月17日购买了2种产品。它不会被存储。

  • 例如,用户Id 10于2015年12月17日购买了1种产品,并于2015年12月16日注册。它的存储方式如下:SETBIT rab:bitmap:custom:court buy:timeSpan:2015-12 10 1。

  • 我们假设用户没有注册就不能购买。

保留数据#

  • 保留是指在两个不同日期购买的用户
  • 对于每个购买操作,我们检查用户是否在任何时候购买了比在特定日期购买的更多的产品(不包括当前购买)。
  • 如果是这样,我们将用户id添加到集合中,如:SADD rab:set:custom:retention buy:timeSpan:{timeSpan}{userId}
  • 例如,用户Id 5在2015年12月15日购买了3种产品。不会存储他的保留金(在特定日期购买的产品:2,在任何时间购买的产品:0)。
  • 例如,用户Id 3在2015年12月15日和2015年12月13日购买了1件产品。将存储他的保留金(在特定日期购买的产品:0,在任何时间购买的产品:1),如:SADD rab:set:custom:retention buy:timeSpan:2015-12 3。

如何访问数据:#

  • 总流量:

十二月:比特数rab:位图:自定义:全局:时间跨度:2015-1212月的第十周:BITCOUNT rab:位图:自定义:全球:时间间隔:2015 - 12 / {X}例子:

比特数rab:位图:自定义:全局:时间跨度:2015-12/3
  • 每页的流量({Page}是以下各项之一:主页、产品1、产品2、产品3):
十二月:比特计数rab:位图:操作:访问:页面:{page}:时间跨度:2015-12

例子:

比特数rab:位图:操作:访问:页面:主页:时间跨度:2015-12
  • 12月的第十周:
BITCOUNT rab:bitmap:action:visit:page:{page}:timeSpan:2015-12/{X}

例子:

比特数rab:位图:操作:访问:页面:产品1:时间跨度:2015-12/2
  • 每个来源的流量({Source}是以下各项之一:谷歌、Facebook、电子邮件、直接、推荐、无):

十二月:

比特计数rab:位图:源:{source}:时间跨度:2015-12

例子:

比特数rab:位图:来源:引用:时间跨度:2015-12
  • 12月的第十周:比特计数rab:位图:源:{source}:timeSpan:2015-12/{X}

例子:

比特数rab:位图:来源:google:timeSpan:2015-12/1
  • 趋势流量({page}是以下内容之一:主页、产品1、产品2、产品3):

  • 十二月:从比特计数rab:位图:操作:访问:{page}:timeSpan:2015-12-01比特计数rab:位图:操作:访问:{page}:时间跨度:2015-12-31

  • 12月1日的一周:同上,但从2015-12-01到2015-12-07

  • 12月的第2周:同上,但从2015-12-08到2015-12-14

  • 12月3日:同上,但从2015-12-15到2015-12-21

  • 12月4日:同上,但从2015年12月22日至2015年12月28日

  • 12月5日:与上述类似,但从2015年12月29日至2015年12月31日

  • 例子:

    比特数rab:位图:操作:访问:主页:时间跨度:2015-12-29 = > 比特数rab:位图:操作:访问:主页:时间跨度:2015-12-30 = > 比特数rab:位图:操作:访问:主页:时间跨度:2015-12-31
  • 总产品买了:

  • 十二月:获取rab:计数:操作:购买:时间跨度:2015-12

  • 12月的第十周:获取rab:count:action:buy:timeSpan:2015-12/{X}例子:

    获取rab:计数:操作:购买:时间跨度:2015-12/1
  • 添加到购物车的产品总数:

十二月:获取rab:count:action:addToCart:timeSpan:2015-1212月的第十周:获取rab:count:action:addToCart:timeSpan:2015-12/{X}例子:

获取rab:count:action:addToCart:timeSpan:2015-12/1
  • 购买的产品份额({productPage}位于product1、product2、product3的第页):

十二月:获取rab:count:action:buy:page:{productPage}:timeSpan:2015-12例子:

获取rab:count:action:buy:page:product3:timeSpan:2015-12
  • 12月的第十周:获取rab:count:action:buy:page:{productPage}:timeSpan:2015-12/{X}例子:

    获取rab:count:action:buy:page:product1:timeSpan:2015-12/2

顾客与队列分析#

  • 注册人:BITCOUNT rab:bitmap:action:register:timeSpan:2015-12
  • 注册后购买的人员(订单事项):比特数rab:位图:自定义:队列购买:时间跨度:2015-12
  • 下降:(登记后购买的人/登记的人)*100[%]
  • 仅购买指定产品的客户({productPage}是以下产品之一:product1、product2、product3):
SMEMBERS rab:设置:行动:买:页面:{productPage}:时间间隔:2015 - 12所示

例子:

SMEMBERS rab:set:action:buy:page:product2:timeSpan:2015-12
  • 购买产品1和产品2的客户:
烧结rab:set:action:buy:page:product1:timeSpan:anytime rab:set:action:buy:page:product2:timeSpan:anytime
  • 客户保留(在不同日期购买的客户):SMEMBERS rab:set:custom:Retention buy:timeSpan:anytime

参考文献#

Baidu