交互式分析仪表板有多种用途。它们使您能够共享数据,并为您提供所有这些至关重要的信息,以便更快地做出改变游戏规则的决策。使用传统的关联数据库构建实时动态仪表板可能需要一组复杂的查询。通过使用 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 守护程序启动时,它会创建一个 Unix 套接字,该套接字可供 docker 组的成员访问。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
X 12 月份的周: 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