基于redis实现点赞数,点击数,排行榜

news2025/7/19 7:14:00

使用场景

对于某些视频或者文章有点赞数和点击数, 通过这些数据就可以进行排行榜的功能了

使用异步队列 + redis的集合

A.php

//点击数
$redis->zIncrBy('click'.':'.date('Ymd'),1,$videoId);
//点赞数
$redis->zIncrBy('love'.':'.$videoId,1,$$user);
//获取当前video的播放数或者点赞数
$redis->zScore($key,$videoId);

B.php 计算日榜周榜月榜

//点击数日榜
$key = 'click:'.date('Ymd');
$redis->zRangeByScore($key);
//点击数周榜


Redis.php

<?php
namespace App\Lib\Redis;
class Redis
{
    public $redis;
    public function __construct()
    {
        $this->redis = \EasySwoole\Pool\Manager::getInstance()->get('redis')->getObj();
    }

    /**
     * @param $key
     * @param $score
     * @param $member
     * @return bool
     * 有序集合
     */
    public function zInCrBy($key,$score,$member)
    {
        if(empty($key) || empty($score) || empty($member)){
            return false;
        }
       return $this->redis->zInCrBy($key,$score,$member);
    }


    public function zRank($key,$member)
    {
        if(empty($key) || empty($member)){
            return false;
        }
        return $this->redis->zRank($key,$member);
    }
    /**
     * @param $key
     * @param $member
     * @return bool
     * 获取指定键成员的分数
     */
    public function zScore($key,$member)
    {
        if(empty($key) || empty($member)){
            return false;
        }
        return $this->redis->zScore($key,$member);
    }

    /**
     * @param $key
     * @return bool
     * 返回有序集中指定区间内的成员,递减
     */
    public function zRevRange($key)
    {
        if(empty($key)){
            return false;
        }
        return $this->redis->zRevRange($key,0,-1,true);
    }

    /**
     * @param $key
     * @return bool
     * 返回有序集中指定区间内的成员,递增
     */
    public function zRange($key)
    {
        if(empty($key)){
            return false;
        }
        return $this->redis->zRange($key,0,-1,true);
    }

    /**
     * @param $key
     * @return bool
     * 返回有序集中指定区间内的成员,通过索引,分数从高到低
     */
    public function zRevRangeByScore($key)
    {
        if(empty($key)){
            return false;
        }
        return $this->redis->zRevRangeByScore($key,'+inf','-inf',['withScores' => true, 'limit' => array(0, 100)]);
    }

    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        return $this->redis->$name(...$arguments);
    }
}

测试

日榜

增加数据
在这里插入图片描述
查询当日分数1-10之间的数据,排序
在这里插入图片描述

周榜

增加数据
在这里插入图片描述
三天的数据得到三个集合的并集
在这里插入图片描述
得到排行
在这里插入图片描述
WEIGHTS 可以设置每个集合的权重,意为在原来集合分数乘权重得到输出集合的值。
两个集合并集时,如果有相同的key,则可以通过 SUM|MIN|MAX 进行控制。默认为SUM

月榜 略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/404755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PMP项目管理项目范围管理

目录1 项目范围管理概述2 规划范围管理3 收集需求4 定义范围5 创建 WBS6 确认范围7 控制范围1 项目范围管理概述 项目范围管理包括确保项目做且只做所需的全部工作&#xff0c;以成功完成项目的各 个过程。管理项目范围主要在于定义和控制哪些工作应在项目内&#xff0c;哪些工…

界面原型设计

引用锤子科技视觉设计总监——罗子雄在重庆TEDx活动上说的一小段话: 每当我们看到一些美妙的设计的时候,很多人心里面会有一种冲动,这种冲动会让你们想去创造一些新的东西,创造一些美妙的事物。 我们常说用户体验用户体验,用户使用你的软件,第一个会接触的是什么?没错,…

读WiscKey: Separating Keys from Values in SSD-conscious Storage

在我看来本论文的主要贡献在于相对减轻了传统LSM compact所带来的写放大问题。其核心设计在于使key、value分离以及gc只保持有效数据 key、value分离 作者对于key、value分离策略的观察主要来自于排序是以往LSM性能消耗最大的地方&#xff0c;但是真正影响排序的与占用大储存…

推荐五款宝藏软件,身为宝藏男孩和宝藏女孩的你,不试一下吗?

今天带来五款宝藏软件&#xff0c;身为宝藏男孩和宝藏女孩的你们&#xff0c;不试一下吗&#xff1f; 1.EPUB阅读器——Starrea Starrea 是一款Windows平台的EPUB电子书阅读器&#xff0c;它虽然只支持一个平台&#xff0c;但是提供了很多额外的功能&#xff0c;其中包括 文…

Java之线程总结一

Java之线程总结一 线程实现方式 官方文档说的是实现线程的方式有两种&#xff1b;本质上只有一种&#xff0c;就是构造Thread类&#xff0c;而实现线程执行单元的方式有两种&#xff1a; 继承Thread类&#xff0c;重写run方法&#xff1b;实现Runnable接口的run方法&#xf…

RHEL8.5解决libgdiplus绘图问题

最近有客户服务器使用RHEL8.5了。由于之前测试和编译的dotnetcore在Linux下绘图包libgdiplus都是在centos7.6编译的。把CentOS7.6编译的二进制程序之前试CentOS7.9使用没问题&#xff0c;然后RHEL8.5无法正常绘图。由于之前搞统信那些系统发现了包得在对应系统源码编译才行。所…

Java web基于SSM的停车场管理系统的设计与实现

1&#xff0c;项目介绍 Java web基于SSM的停车场管理系统拥有三种角色&#xff0c;分别为用户&#xff0c;管理员&#xff0c;超级管理员。 停车位管理&#xff08;管理员&#xff0c;超级管理员&#xff09;停车卡管理&#xff08;用户&#xff0c;管理员&#xff0c;超级管…

Vue3视频播放器组件Vue3-video-play入门教程

Vue3-video-play适用于 Vue3 的 hls.js 播放器组件 | 并且支持MP4/WebM/Ogg格式。 1、支持快捷键操作 2、支持倍速播放设置 3、支持镜像画面设置 4、支持关灯模式设置 5、支持画中画模式播放 6、支持全屏/网页全屏播放 7、支持从固定时间开始播放 8、支持移动端&#xff0c;移动…

pyqt5环境搭建

1、打开Terminal ,用命令pip install pyqt5-tools 或者 pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple安装PyQt5安装成功后就可看到PyQt5版本2、同上方法&#xff0c;继续安装pyqt5-tools扩展工具&#xff0c;里面包括了QtDesigner等很好用的工具。3、…

二进制哈希码快速搜索:Multi-Index Hashing

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 哈希方法通常包含两个部分&#xff1a; 【编码】将元素通过「data-dependent」或「data-independent」的方式映射为二进制…

C变量区域

C语言中有五大内存分区&#xff0c;分别是栈区、堆区、全局区/静态区、常量区和代码区。1.栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值、局部变量的值等。当调用函数的时候函数中定义的变量会被加到栈中&#xff0c;当函数离开的时候&#xff0c;被添加…

HTML看这一篇就够啦,HTML基础大全,可用于快速回顾知识,面试首选

HTML 1 基础 1.1 DOCTYPE <!DOCTYPE> 文档类型声明&#xff0c;作用就是告诉浏览器使用哪种HTML版本来显示网页。 <!DOCTYPE html> 这句代码的意思是: 当前页面采取的是 HTML5 版本来显示网页. 注意: 声明位于文档中的最前面的位置&#xff0c;处于 标签之前。 …

互联网新理念,对于WEB 3.0 你怎么看?

WEB 3.0 这个名词走进大众视野已经有一段时间了&#xff0c;也曾在各个圈子里火热一时&#xff0c;至今各大互联网企业任旧在 WEB 3.0 上不断探索。但关于 WEB 3.0 是什么这个问题&#xff0c;其实大部分人都没有一个比较明确的认知&#xff0c;包括区块链和元宇宙等相关行业的…

【设计模式】备忘录模式和迭代器模式

备忘录模式和迭代器模式备忘录模式代码示例迭代器模式代码示例使用迭代器遍历集合的同时不能删除/增加元素总结备忘录模式 备忘录模式&#xff0c;也叫快照&#xff08;Snapshot&#xff09;模式。 在 GoF的《设计模式》⼀书中&#xff0c;备忘录模式是这么定义的&#xff1a;…

【Spring6】面向切面:AOP

5.1、场景模拟 搭建子模块&#xff1a;spring6-aop 5.1.1、声明接口 声明计算器接口Calculator&#xff0c;包含加减乘除的抽象方法 public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j);}5.1.2、创建…

计算机视觉与深度学习 | Visual ChatGPT:微软开源视觉(图文)聊天系统——图像生成、迁移学习、边缘检测、颜色渲染等多功能(附代码下载链接)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== Visual ChatGPT: Talking, Drawing and Editing with V

LeetCode 134. 加油站(函数图像法 / 贪心)

题目&#xff1a; 链接&#xff1a;LeetCode 134. 加油站 难度&#xff1a;中等 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中…

CentOS系统变化看开源演进

CentOS社区还存不存在&#xff1f;CentOS项目还存不存在&#xff1f;众多CentOS用户将何去何从&#xff1f;伴随CentOS停更&#xff0c;大家可能会有这样那样的疑问&#xff0c;今天针对以上问题&#xff0c;我来进行一一解答。CentOS实际上有两个变种&#xff0c;一个叫做Cent…

C#和.net框架之第二弹

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、什么是标示符&#xff1f;二、标示符命名规则三、c#命名规范是什么&#xff1f;四、c#命名规范内容五、关键字的用处注意&#xff1a;六、Main方法是干什么的…

12 | 架构案例:基于OAuth 2.0/JWT的微服务参考架构

12 | 架构案例&#xff1a;基于OAuth 2.0/JWT的微服务参考架构 架构图 令牌的校验和转换&#xff0c;将前端传递过来的 OAuth 2.0 访问令牌&#xff0c;通过调用 IDP 进行校验&#xff0c;并转换为包含用户和权限信息的 JWT 令牌&#xff0c;再将 JWT 令牌向后台微服务传递。…