当前位置: 首页 > 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…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...