交互式分析仪表盘有多种用途。它们允许您共享数据,并为您提供所有重要信息,以便更快地做出改变游戏规则的决策。使用传统关系数据库构建实时动态仪表盘可能需要复杂的查询集。通过使用像 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 112 月: 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/3December: BITCOUNT rab:bitmap:action:visit:page:{page}:timeSpan:2015-12示例
BITCOUNT rab:bitmap:action:visit:page:homepage:timeSpan:2015-12BITCOUNT rab:bitmap:action:visit:page:{page}:timeSpan:2015-12/{X}示例
BITCOUNT rab:bitmap:action:visit:page:product1:timeSpan:2015-12/212 月
BITCOUNT rab:bitmap:source:{source}:timeSpan:2015-12示例
BITCOUNT rab:bitmap:source:referral:timeSpan:2015-12BITCOUNT rab:bitmap:source:{source}:timeSpan:2015-12/{X}示例
BITCOUNT rab:bitmap:source:google:timeSpan:2015-12/1BITCOUNT 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-31GET rab:count:action:buy:timeSpan:2015-12 GET rab:count:action:buy:timeSpan:2015-12/{X} 示例: GET rab:count:action:buy:timeSpan:2015-12/112 月: 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/112 月: GET rab:count:action:buy:page:{productPage}:timeSpan:2015-12 示例
GET rab:count:action:buy:page:product3:timeSpan:2015-1212 月第 X 周: GET rab:count:action:buy:page:{productPage}:timeSpan:2015-12/{X} 示例:
GET rab:count:action:buy:page:product1:timeSpan:2015-12/2SMEMBERS rab:set:action:buy:page:{productPage}:timeSpan:2015-12示例
SMEMBERS rab:set:action:buy:page:product2:timeSpan:2015-12SINTER rab:set:action:buy:page:product1:timeSpan:anytime rab:set:action:buy:page:product2:timeSpan:anytime