当前位置: 首页 > news >正文

【Redis从头学-5】Redis中的List数据类型实战场景之天猫热销榜单

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:Redis从头学


在这里插入图片描述


文章目录

  • 🌟前言
  • 🌟List数据类型分析
  • 🌟List类型实战应用场景
    • 热销榜单功能
      • 生活中的例子
      • 排序规则
      • 仿造示例
      • 最终效果
  • 🌟写在最后

🌟前言

之前的篇章对Redis的String数据类型已经做出了具体分析,并举例说明了其具体的实战场景本文就结合List数据类型结构的特性,一起探讨其实战中的应用场景,并以天猫热销榜单为例。

🌟List数据类型分析

Redis中的List数据类型是一种有序、可重复、可变长度的数据结构。它支持在列表的两端进行快速的插入、删除和查找操作,因此非常适合用于处理队列、栈以及任务列表等场景。
List数据类型可以存储多个相同或不同类型的元素,并且可以按照插入顺序进行访问。Redis提供了一系列的命令来操作List,包括向列表头部或尾部插入元素、在指定位置插入元素、获取指定位置的元素、删除列表中的元素等。有关其操作命令请参照【Redis从头学-3】5个表格带你学会使用Redis五大数据类型常用命令

List数据类型的主要特点:

  1. 有序性:列表中的元素按照插入顺序排列,可以根据索引位置进行访问。
  2. 可重复性:列表允许存储重复的元素。
  3. 动态长度:列表可以根据需要进行动态扩展或收缩,没有固定的长度限制。
  4. 快速操作:插入和删除元素的时间复杂度为O(1),在列表头部和尾部进行插入和删除操作非常高效。

🌟List类型实战应用场景

通过上述对List类型的分析,可以结合实际需求选择适合List类型结构的场景。本文主要演示排行榜功能的演示代码。

  • 消息队列:可以通过List实现简单的消息队列,将消息按顺序插入到列表尾部,消费者从列表头部取出消息进行处理。
  • 时间线:将新的动态信息按照时间顺序插入到列表头部,就可以实现类似社交媒体的时间线功能。
  • 排行榜:可以对热销的商品进行榜单排序。

热销榜单功能

生活中的例子

在这里插入图片描述

排序规则

在这里插入图片描述

仿造示例

通过上述生活中的例子,来描述一个热销榜单的应用场景。实际场景要比这个复杂的多哦,这里只是感受List数据类型的结构
实现步骤

  • 创建一个洗面奶实体类WashMilk。字段内容包含字段包含id、品牌名称、好评率、成交额、回购人数、累计销量等。
  • 按照加权平均算法得出综合权衡的平均值。根据好评率、成交额、回购人数、累计销量因素,对洗面奶进行排序。
  • 存入Redis中。使用rightPushAll。因为排序是按降序排序的,所有要从右插入,最大值才能展现在第一个。
若序列为:54321。则按右插法,最终结果为
5
4
3
2
1
左插法,结果为:
1
2
3
4
5

加权平均算法介绍

加权平均算法(Weighted Average Algorithm)是一种常见的统计算法,用于计算一组数据的加权平均值。在加权平均算法中,每个数据点都有一个对应的权重,权重可以表示数据的重要性或贡献度。
加权平均算法的计算公式如下:
加权平均值 = (数据点1 × 权重1 + 数据点2 × 权重2 + ... + 数据点n × 权重n) / (权重1 + 权重2 + ... + 权重n)
其中,数据点1、数据点2等表示要计算加权平均值的数据点,权重1、权重2等表示对应数据点的权重。
加权平均算法适用于以下场景:

  1. 数据点具有不同的重要性或权重,需要考虑这些差异并进行加权处理。
  2. 某些数据点可能对结果产生较大的影响,而某些数据点可能对结果影响较小,需要根据权重进行调节。
  3. 数据点的权重可能随时间、条件或其他因素而变化,可以动态调整计算结果。
    举例来说,假设你要计算一组考试成绩的加权平均值,其中不同科目的权重不同,例如数学的权重为0.4,英语的权重为0.3,物理的权重为0.3。
    你可以按照如下方式计算加权平均值:
    加权平均值 = (数学成绩 × 0.4 + 英语成绩 × 0.3 + 物理成绩 × 0.3) / (0.4 + 0.3 + 0.3)
    通过加权平均算法,可以根据不同数据点的权重,将其贡献度考虑在内,得出一个综合权衡的平均值。这个平均值更能反映数据的实际情况和重要性。

简易代码

@Testvoid hotRank(){String DAILY_RANK_KEY="hotRank:daily";//模拟数据库查询到的数据WashMilk washMilk=new WashMilk(1,"香奈儿",0.65,10000,800,100000);WashMilk washMilk2=new WashMilk(2,"至本",0.85,60040,10000,25465);WashMilk washMilk3=new WashMilk(3,"兰蔻",0.60,343543,6000,4534);WashMilk washMilk4=new WashMilk(4,"雅诗兰黛",0.67,50000,800,3655);WashMilk washMilk5=new WashMilk(5,"欧莱雅",0.99,10000,40000,42443);WashMilk washMilk6=new WashMilk(6,"薇姿",0.65,32443,800,43244);WashMilk washMilk7=new WashMilk(7,"娇韵诗",0.82,10000,800,5435654);WashMilk washMilk8=new WashMilk(8,"相宜本草",0.95,65476,3214,4000);WashMilk washMilk9=new WashMilk(9,"佰草集",0.90,432535,800,3435);WashMilk washMilk10=new WashMilk(10,"倩碧",0.75,23423,4356,180000);List<WashMilk> washMilkList=new ArrayList<>();//将数据添加到list集合。Stream.of(washMilk,washMilk2,washMilk3,washMilk4,washMilk5,washMilk6,washMilk7,washMilk8,washMilk9,washMilk10).forEach(washMilkList::add);//通过加权平均法,对上述洗面奶综合排序Collections.sort(washMilkList, new Comparator<WashMilk>() {@Overridepublic int compare(WashMilk o1, WashMilk o2) {double wm1Score = o1.getGoodRate() * 0.4 + o1.getTurnover() * 0.3 + o1.getRepurchaseCount() * 0.2 + o1.getTotalSales() * 0.1;double wm2Score = o2.getGoodRate() * 0.4 + o2.getTurnover() * 0.3 + o2.getRepurchaseCount() * 0.2 + o2.getTotalSales() * 0.1;return Double.compare(wm2Score, wm1Score); // 按照降序排序}});//存入到redis中redisTemplate.opsForList().rightPushAll(DAILY_RANK_KEY,washMilkList);System.out.println(redisTemplate.opsForList().range(DAILY_RANK_KEY,0,-1));}

最终效果

最终效果展示如下图所示
在这里插入图片描述

🌟写在最后

有关于Redis中的List数据类型实战应用场景到此就结束了。功能演示代码的逻辑简单,目的是理解List数据类型的应用,实际场景的逻辑根据具体需求而定。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


请添加图片描述

相关文章:

【Redis从头学-5】Redis中的List数据类型实战场景之天猫热销榜单

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Re…...

基于Python的HTTP代理爬虫开发初探

前言 随着互联网的发展&#xff0c;爬虫技术已经成为了信息采集、数据分析的重要手段。然而在进行爬虫开发的过程中&#xff0c;由于个人或机构的目的不同&#xff0c;也会面临一些访问限制或者防护措施。这时候&#xff0c;使用HTTP代理爬虫可以有效地解决这些问题&#xff0…...

时序预测 | MATLAB实现WOA-CNN-LSTM鲸鱼算法优化卷积长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现WOA-CNN-LSTM鲸鱼算法优化卷积长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现WOA-CNN-LSTM鲸鱼算法优化卷积长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计学习总结参考资料 预测效果 基本介绍 时序预测 | MATLAB实现WOA-…...

每日一题之二进制中1的个数

二进制中1的个数 问题描述&#xff1a; 输入一个整数 n &#xff0c;输出该数 32 位二进制表示中 1 的个数。其中负数用补码表示。 科普一下有符号数的三种表示&#xff1a;原码、反码和补码&#xff0c;可能有时候遗忘了。 真值&#xff1a;带有符号位的机器数&#xff08;一…...

8.17校招 内推 面经

绿泡泡&#xff1a; neituijunsir 交流裙&#xff0c;内推/实习/校招汇总表格 1、校招 | 腾讯2024校园招聘全面启动(内推) 校招 | 腾讯2024校园招聘全面启动(内推) 2、校招 | 大华股份2024届全球校园招聘正式启动(内推) 校招 | 大华股份2024届全球校园招聘正式启动(内推) …...

VScode搭建Opencv(C++开发环境)

VScode配置Opencv 一、 软件版本二 、下载软件2.1 MinGw下载2.2 Cmake下载2.3 Opencv下载 三、编译3.1 cmake-gui3.2 make3.3 install 四、 VScode配置4.1 launch.json4.2 c_cpp_properties.json4.3 tasks.json 五、测试 一、 软件版本 cmake :cmake-3.27.2-windows-x86_64 Mi…...

Redis高可用:哨兵机制(Redis Sentinel)详解

目录 1.什么是哨兵机制&#xff08;Redis Sentinel&#xff09; 2.哨兵机制基本流程 3.哨兵获取主从服务器信息 4.多个哨兵进行通信 5.主观下线和客观下线 6.哨兵集群的选举 7.新主库的选出 8.故障的转移 9.基于pub/sub机制的客户端事件通知 1.什么是哨兵机制&#xf…...

Hadoop小结(上)

最近在学大模型的分布式训练和存储&#xff0c;自己的分布式相关基础比较薄弱&#xff0c;基于深度学习的一切架构皆来源于传统&#xff0c;我总结了之前大数据的分布式解决方案即Hadoop&#xff1a; Why Hadoop Hadoop 的作用非常简单&#xff0c;就是在多计算机集群环境中营…...

ORA-600 ksuloget2 恢复----惜分飞

客户在win 32位的操作系统上调至sga超过2G,数据库运行过程中报ORA-600 ksuloget2错误 Thread 1 cannot allocate new log, sequence 43586 Checkpoint not complete Current log# 1 seq# 43585 mem# 0: D:\ORACLE\ORADATA\ORCL\REDO01.LOG Fri Aug 04 14:57:02 2023 Errors i…...

NLP的tokenization

GPT3.5的tokenization流程如上图所示&#xff0c;以下是chatGPT对BPE算法的解释&#xff1a; BPE&#xff08;Byte Pair Encoding&#xff09;编码算法是一种基于统计的无监督分词方法&#xff0c;用于将文本分解为子词单元。它的原理如下&#xff1a; 1. 初始化&#xff1a;将…...

【宝藏系列】一文讲透C语言数组与指针的关系

【宝藏系列】嵌入式 C 语言代码优化技巧【超详细版】 文章目录 【宝藏系列】嵌入式 C 语言代码优化技巧【超详细版】&#x1f468;‍&#x1f3eb;前言1️⃣指针1️⃣1️⃣指针的操作1️⃣2️⃣关于指针定义的争议1️⃣3️⃣对教材错误写法的小看法 2️⃣指针和数组的区别2️⃣…...

Jenkins+Jmeter集成自动化接口测试并通过邮件发送测试报告

一、Jenkins的配置 1、新增一个自由风格的项目 2、构建->选择Excute Windows batch command&#xff08;因为我是在本地尝试的&#xff0c;因此选择的windows&#xff09; 3、输入步骤&#xff1a; 1. 由于不能拥有相同的jtl文件&#xff0c;因此在每次构建前都需要删除jtl…...

clickhouse入门

clickhouse 1 课程介绍 和hadoop无关&#xff0c;俄罗斯&#xff0c;速度快3 介绍&特点 1 列式存储 在线分析处理。 使用sql进行查询。列式存储更适合查询分析的场景。新增时候有一个寻址的过程。更容易进行压缩行式存储。增删改查都需要的时候。2 DBMS功能 包括ddl,d…...

中间件: ElasticSearch的安装与部署

文档地址&#xff1a; https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 单机部署 创建用户&#xff1a; useradd es chown -R es /opt/soft/ mkdir -p /var/log/elastic chown -R es /var/log/elastic mkdir -p /tmp/elastic chown -R es /tmp…...

LabVIEW模拟化学反应器的工作

LabVIEW模拟化学反应器的工作 近年来&#xff0c;化学反应器在化学和工业过程领域有许多应用。高价值产品是通过混合产品&#xff0c;化学反应&#xff0c;蒸馏和结晶等多种工业过程转换原材料制成的。化学反应器通常用于大型加工行业&#xff0c;例如酿酒厂公司饮料产品的发酵…...

Python基础语法入门(第二十三天)——正则表达式

正则表达式是一种文本模式&#xff0c;用于匹配字符串&#xff0c;它是由字符和特殊字符组成的模式。正则表达式可以用于验证、搜索、替换和提取字符串。其能够应用于各种编程语言和文本处理工具中&#xff0c;如Python、Java、JavaScript等。 正则表达式在线测试工具&#xf…...

山西电力市场日前价格预测【2023-08-20】

日前价格预测 预测明日&#xff08;2023-08-20&#xff09;山西电力市场全天平均日前电价为341.71元/MWh。其中&#xff0c;最高日前电价为367.66元/MWh&#xff0c;预计出现在20: 30。最低日前电价为318.47元/MWh&#xff0c;预计出现在04: 15。 价差方向预测 1&#xff1a; 实…...

C++中function,bind,lambda

c11之前&#xff0c;STL中提供了bind1st以及bind2nd绑定器 首先来看一下他们如何使用&#xff1a; 如果我们要对vector中的元素排序&#xff0c;首先会想到sort&#xff0c;比如&#xff1a; void output(const vector<int> &vec) {for (auto v : vec) {cout <&l…...

跟着美团学设计模式(感处)

读了着篇文章之后发现真的是&#xff0c;你的思想&#xff0c;你的思维是真的比比你拥有什么技术要强的。 注 开闭原则 开闭原则&#xff08;Open-Closed Principle&#xff09;是面向对象设计中的基本原则之一&#xff0c;它的定义是&#xff1a;一个软件实体应该对扩展开放…...

2023/8/19 小红书 Java 后台开发面经

项目都做了些什么&#xff0c;怎么实现的用Redis实现了什么&#xff0c;Redis是单线程的吗&#xff0c;Redis是单线程的为什么快&#xff0c;IO多路复用模型具体实现&#xff0c;持久化怎么实现的为什么用Kafka&#xff0c;架构是什么样的&#xff0c;Broker、Topic、Partition…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...