IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis实现数据统计并支持时间范围内进行筛选排序 -> 正文阅读

[大数据]Redis实现数据统计并支持时间范围内进行筛选排序

关于redis实现数据统计,以小说为例,统计小说的每天阅读人数,并支持90天内进行时间筛选小说阅读总人数排序展示,这种场景使用redis进行处理是非常合适的,具体实现会用到如下Redis集合和有序集合的方法:

  1. sAdd:向集合添加一个或多个成员
  2. zAdd:向有序集合添加一个或多个成员,或者更新已存在成员的分数
  3. zScore:返回有序集中,成员的分数值
  4. zCard:获取有序集合的成员数
  5. sIsMember:判断member元素是否是集合key的成员
  6. zRevRange:放回有序集中指定区间内的成员,通过索引,分数从高到低
  7. zUnionStore:计算给定的一个或多个有序集的并集,并存储在新的key中

具体实现流程如下所示:

1、接口埋点统计


// 判断当前用户是否存在
$date 	 = date('Ymd');
$userKey = 'book:read:user:' . $date . ':' . $bookId;
$isRead  = RedisTool::sIsMember($readKey, $uid);

// 用户当天第一次阅读
if(!$isRead) {
    // 当天书籍阅读人数加1
    $peopleKey = 'book:read:people:' . $date;
    $score = intval(RedisTool::zScore($peopleKey, $bookId));
    $score = $score + 1;
    RedisTool::zAdd($peopleKey, $bookId, $score);

    // 存储用户ID
    RedisTool::sAdd($userKey , $uid);
}

2、后台数据展示并支持近90天内筛选累计排序

// 获取筛选范围日期
$startDate = $_GET['start_date'];
$endDate   = $_GET['end_date'];

// 获取日期范围内的日期
$dateArr = DateTool::dateRange($startDate , $endDate);

// 获取日期范围内阅读人数key
$readKey = [];
foreach ($dateArr as $value) {
    array_push($readKey , 'book:read:people:' . $value);
}

// 根据日期范围的readKey生成新的key,通过并集获取所有的数据
$key = 'book:read:people:total:' . count($dateArr);
RedisTool::zUnionStore($key, $readKey);

// 获取搜索统计的数据长度/统计数据
$count = RedisTool::zCard($key);
$data  = RedisTool::zRevRange($key, 0, $count, true);

至此,$data就是我们想要查询某个日期范围内,书籍阅读总人数的信息,并按照人数降序展示

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:44:46  更:2021-12-16 17:45:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:48:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码