交互式分析仪表盘有多种用途。它们允许您共享数据,并为您提供所有重要信息,以便更快地做出改变游戏规则的决策。使用传统关系数据库构建实时动态仪表盘可能需要复杂的查询集。通过使用像 Redis 这样的 NoSQL 数据库,您只需使用少量 Redis 命令即可构建功能强大的交互式动态仪表盘。
Redis 是一个开源、内存中的键值数据存储,最常被用作主数据库、缓存、消息代理和队列。Redis 缓存提供亚毫秒级的响应时间,使得游戏、金融科技、广告科技、社交媒体、医疗保健和物联网等行业能够实现快速且功能强大的实时应用。本教程展示了一个使用 NodeJS (JavaScript) 编写的简单分析仪表盘应用,该应用使用了 Redis Bitmap 数据类型。
git clone https://github.com/redis-developer/basic-analytics-dashboard-redis-bitmaps-nodejs
首先,我们将设置一些环境变量。
进入 /server 文件夹 (cd ./server),然后执行以下命令
cp .env.example .env
npm install
docker network create global
docker-compose up -d --build
您可能需要在 docker 命令前加上 sudo
。如果您不想使用 sudo,请创建一个名为 docker 的 Unix 组并将用户添加到其中。Docker 守护程序启动时,会创建一个可由 docker 组成员访问的 Unix 套接字。Redis 数据库启动并运行后,您可以使用 redis-cli
命令连接到它。
npm run dev
进入 /client 文件夹 (cd ./client),然后
cp .env.example .env
npm install
npm run serve
事件数据存储在各种键和各种数据类型中。
对于每个时间跨度
以及对于每个范围
以及对于每种数据类型(类型)
生成的键格式如下
rab:{type}[:custom:{customName}][:user:{userId}][:source:{source}][:action:{action}][:page:{page}]:timeSpan:{timeSpan}
其中 [] 中的值是可选的。
INCR rab:count:action:addToCart:timeSpan:2015-12/3
对于每个生成的键,例如: rab:set:*,数据存储如下:SADD {key} {userId} 示例
SADD rab:set:action:addToCart:timeSpan:2015-12/3 8
对于每个生成的键,例如 rab:bitmap:*,数据存储如下:SETBIT {key} {userId} 1。示例
SETBIT rab:bitmap:action:addToCart:timeSpan:2015-12/3 8 1
12 月: BITCOUNT rab:bitmap:custom:global:timeSpan:2015-12
12 月第 X 周: BITCOUNT rab:bitmap:custom:global:timeSpan:2015-12/{X}
示例
BITCOUNT rab:bitmap:custom:global:timeSpan:2015-12/3
December: BITCOUNT rab:bitmap:action:visit:page:{page}:timeSpan:2015-12
示例
BITCOUNT rab:bitmap:action:visit:page:homepage:timeSpan:2015-12
BITCOUNT rab:bitmap:action:visit:page:{page}:timeSpan:2015-12/{X}
示例
BITCOUNT rab:bitmap:action:visit:page:product1:timeSpan:2015-12/2
12 月
BITCOUNT rab:bitmap:source:{source}:timeSpan:2015-12
示例
BITCOUNT rab:bitmap:source:referral:timeSpan:2015-12
BITCOUNT rab:bitmap:source:{source}:timeSpan:2015-12/{X}
示例
BITCOUNT rab:bitmap:source:google:timeSpan:2015-12/1
BITCOUNT rab:bitmap:action:visit:{page}:timeSpan:2015-12-01
到 BITCOUNT rab:bitmap:action:visit:{page}:timeSpan:2015-12-31
BITCOUNT rab:bitmap:action:visit:homepage:timeSpan:2015-12-29 => BITCOUNT rab:bitmap:action:visit:homepage:timeSpan:2015-12-30 => BITCOUNT rab:bitmap:action:visit:homepage:timeSpan:2015-12-31
GET rab:count:action:buy:timeSpan:2015-12
GET rab:count:action:buy:timeSpan:2015-12/{X}
示例: GET rab:count:action:buy:timeSpan:2015-12/1
12 月: GET rab:count:action:addToCart:timeSpan:2015-12
12 月第 X 周: GET rab:count:action:addToCart:timeSpan:2015-12/{X}
示例
GET rab:count:action:addToCart:timeSpan:2015-12/1
12 月: GET rab:count:action:buy:page:{productPage}:timeSpan:2015-12
示例
GET rab:count:action:buy:page:product3:timeSpan:2015-12
12 月第 X 周: GET rab:count:action:buy:page:{productPage}:timeSpan:2015-12/{X}
示例:
GET rab:count:action:buy:page:product1:timeSpan:2015-12/2
SMEMBERS rab:set:action:buy:page:{productPage}:timeSpan:2015-12
示例
SMEMBERS rab:set:action:buy:page:product2:timeSpan:2015-12
SINTER rab:set:action:buy:page:product1:timeSpan:anytime rab:set:action:buy:page:product2:timeSpan:anytime