交互式分析仪表板可以满足多种目的。它们允许您共享数据,并提供所有这些重要信息,以便您以更快的速度做出改变游戏规则的决策。使用传统的数据库构建实时动态仪表板可能需要一组复杂的查询。通过使用 NoSQL 数据库(如 Redis),您可以使用少量 Redis 命令构建功能强大的交互式动态仪表板。
让我们看看这是如何实现的。
git clone https://github.com/redis-developer/basic-analytics-dashboard-redis-bitmaps-nodejs
首先,我们将设置环境变量
转到 /server 文件夹(cd ./server),然后执行以下命令 cp .env.example .env
PORT=3000
# Host and a port. Can be with `redis://` or without.
# Host and a port encoded in redis uri take precedence over other environment variable.
# preferable
REDIS_ENDPOINT_URI=redis://redis-XXXX.c212.ap-south-1-1.ec2.cloud.redislabs.com:15564
# Or you can set it here (ie. for docker development)
REDIS_HOST=redis-XXXX.c212.ap-south-1-1.ec2.cloud.redislabs.com
REDIS_PORT=XXXX
# You can set password here
REDIS_PASSWORD=reXXX
COMPOSE_PROJECT_NAME=redis-analytics-bitmaps
npm install
npm run dev
转到 client
文件夹 (cd ./client
) 然后
cp .env.example .env
VUE_APP_API_URL=https://localhost:3000
npm install
npm run serve
事件数据存储在各种键和数据类型中,下面将讨论。
它使用以下命名约定生成键
rab:{type}[:custom:{customName}][:user:{userId}][:source:{source}][:action:{action}][:page:{page}]:timeSpan:{timeSpan}
其中 [] 中的值是可选的。
对于每个生成的键,如 rab:count:*
,数据存储方式如下: INCR {key}
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
SETBIT rab:bitmap:custom:cohort-buy:timeSpan:{timeSpan} {userId} 1
SETBIT rab:bitmap:custom:cohort-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 之前购买了 1 件产品,在 2015-12-13 之前购买了 1 件产品。他的保留率将被存储(特定日期购买的产品:0,任何时候购买的产品:1)如下
SADD rab:set:custom:retention-buy:timeSpan:2015-12
BITCOUNT rab:bitmap:custom:global:timeSpan:2015-12```
BITCOUNT rab:bitmap:custom:global:timeSpan:2015-12/{X}
BITCOUNT rab:bitmap:custom:global:timeSpan:2015-12/3
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
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