Redis的数据类型List使用场景实战

Redis的数据类型List使用场景实战

场景题:面试官问redis的List数据结构在你们项目是怎么用的,你说没有用过,这哪行,说你能想到啥场景不,面试的你不知所措。。。
进入正题:

知识回顾

// 从左边推送数据
redisTemplate.opsForList().leftPush("mylist", "Hello");
// 从右边推送数据
redisTemplate.opsForList().rightPush("mylist", "Redis");
// 获取所有的数据
List<Object> list = redisTemplate.opsForList().range("mylist", 0, -1);

使用场景:

1,Queue(队列使用 ) 队列使用 = LPUSH + RPOP
2,Blocking MQ(阻塞) = LPUSH + BRPOP

项目中的业务场景:

1,场景:学校系统需要做一个值日擦黑板业务,有几点要求如下

一:所有的学生要求做一休三
二:擦黑板的同学,和每天喊起立的同学,都是全班所有的学生
三:擦黑板的同学和喊起立的同学,都要求做一休三,且不能是同一个人执行任务
四:擦黑板的同学值日,三天内不能喊起立任务

2,逻辑思考业务实现,

  1. 可以理解为2个数组,进行排序,周六周日的时间不安排人员,其中一个固定数组有序,另一个无序
  2. 如果需要调整值班信息,要有个新增或修改功能
  3. 修改数据只能修改当前时间以后的数据,之前的数据不能修改
    要有个数组或者队列保存值班过的人员信息
  4. 实现第三条逻辑有,可以保存一张表,单独保存数据每次都要修改,删除,可以借助redis的List数据模型,里面有个队列可以满足情况

采用redis的list数据结构编写代码

开干上代码:

1,添加依赖:

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2,配置类


@Component
public class RedisOperationUtils {/*** 值日信息redis中的key*/public final String WATCH_WILL_PREFIX = "watch:will:exist:";
}

实现类

@Slf4j
@Service("WxxService")
public class WxxxServiceImpl extends ServiceImpl<WxxMapper, WxxxEntity> implements WxxxxxService {@Autowiredprivate RedisTemplate<String, String> redisTemplateList;@Overridepublic void automaticWatchWillRoster(LocalDate startDate, LocalDate endDate) {// 设置数据类型ListOperations<String, String> listOps = redisTemplateList.opsForList();// 待新增的值班人员信息List<WatchWillEntity> entityList = new ArrayList<>();// 如果结束时间 > 开始时间就一直执行LocalDate currentDate = startDate;Date currentTime = new Date();while (!currentDate.isAfter(endDate)) {// 获取所有的值日过的同学集合 为第二个数组做过滤使用List<String> watchkeepersStudentList = listOps.range(redisOperationUtils.WATCH_WILL_PREFIX + "student", 0, -1);//TODO:做一些数据过滤,过滤完后,listOps.leftPush(redisOperationUtils.WATCH_WILL_PREFIX  + "student", studentPersonName);// 获取值日的长度如果大于3 需要移除Long size = Optional.ofNullable(listOps.size(redisOperationUtils.WATCH_WILL_PREFIX + "student")).orElse(0L);if ( size > 3) {listOps.rightPop(redisOperationUtils.WATCH_WILL_PREFIX  + "student");}}// 批量插入if (!CollectionUtils.isEmpty(entityList)) {// 批量插入}}}
遇到的问题

1,随机性要好,这个去当前同学的索引,取前后3天数据除外
2,有可能再初始化的时候,redis的list队列里面的数据长度为空,不能再移除,要判断长度
3,添加到redis的list的数据时候,一定要非空,不然数据有可能为空,不能做值日任务
4,是所有的同学都是要求做一休三,业务要做判断

喜欢我的文章的话,麻烦点个阅读或者点个点赞,是我编写博客的动力

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

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

相关文章

Odoo限制线上路径访问

在Odoo中&#xff0c;有时需要限制对某些路径的访问&#xff0c;以保护敏感数据或维护系统的安全性。这可以通过自定义权限规则和修改控制器方法来实现。本教程将详细介绍如何在Odoo中限制线上路径的访问&#xff0c;包括创建自定义权限规则和修改控制器方法&#xff0c;并通过…

MongoDB聚合运算符:$let

文章目录 MongoDB聚合运算符&#xff1a;$let语法使用举例 MongoDB聚合运算符&#xff1a;$let $let聚合运算符绑定用于表示计算的变量&#xff0c;并返回表达式的结果。 语法 {$let:{vars: { <var1>: <expression>, ... },in: <expression>} }vars 用于在…

sql Tuning Advisor启用导致业务性能问题

数据库每天晚上10点后业务性能很卡&#xff0c;大量的insert被堵塞&#xff0c;查询等待事件发现有大量的“library cache lock”和“cursor: pin S wait on X”。 22:00数据库的统计信息开始收集&#xff0c; Sql Tuning Advisor堵塞了统计信息的收集&#xff0c;等待事件是“…

opencv-python库 cv2.imwrite() 保存图片

cv2.imwrite 是 OpenCV 库中的一个函数&#xff0c;用于将图像数据保存为文件。其基本语法如下&#xff1a; python cv2.imwrite(filename, img, [params]) 参数说明&#xff1a; filename&#xff1a;要保存的图像的文件名&#xff0c;包括文件路径和扩展名&#xff08;如 …

利用HIVE的窗口函数进行SQL查询中出现的问题记录

student_info部分数据 score_info部分数据 course_info 1、问题复现 --完整SQL selectsti.stu_id,sti.stu_name,concat_ws(",",collect_set(ci.course_name)) over(partition by sti.stu_id) fromstudent_info sti left joinscore_info sci onsti.stu_idsci.stu_id l…

每天学习一个Linux命令之awk

每天学习一个Linux命令之awk 介绍 在Linux系统中&#xff0c;有很多强大的命令可以帮助我们处理文本数据。其中一个非常常用且强大的命令就是awk。awk是一种编程语言&#xff0c;也是一种处理文本数据的工具。 awk通过在输入文本中匹配指定模式&#xff0c;并对匹配到的行执…

mysql之MyBatis核心工作原理

MyBatis核心工作原理 一、源码环境 1.手动编译源码 工欲善其事必先利其器。为了方便我们在看源码的过程中能够方便的添加注释&#xff0c;我们可以自己来从官网下载源码编译生成对应的Jar包&#xff0c;然后上传到本地maven仓库&#xff0c;再引用这个Jar。大家可以自行去官…

matlab 点云可视化(6)——点云按强度进行可视化

目录 一、功能概述1、算法概述2、主要函数二、代码示例三、结果展示四、参考链接本文由CSDN点云侠原创原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、功能概述 1、算法概述 点云按强度进行可视化 2、主要函数

绿联 安装Uptime Kuma - 一款开源的服务器监控和状态检测工具

Uptime Kuma 功能简介 Uptime Kuma 是一款开源的服务器监控和状态检测工具&#xff0c;它帮助您跟踪服务器的可用性、性能和健康状态。 主要功能&#xff1a; 服务器监控 Uptime Kuma 可以监控多个服务器&#xff0c;包括 Web 服务器、数据库服务器、应用程序服务器等。 它会定…

实验八 大数问题

实验名称&#xff1a;实验八 大数问题 实验目的&#xff1a;熟练掌握大数的加减、乘法、除法和高精度计算。 实验内容&#xff1a; 问题描述&#xff1a;&#xff08;大数加减&#xff09;求两个不超过200位的非负整数的和。 输入&#xff1a;有两行&#xff0c;每行是一个…

Antd Vue3 使用 Anchor 锚点组件记录

项目场景 客户要求做一个表单页面&#xff0c;表单数据分为三步&#xff0c;每一步骤是一个单独的 Vue 组件&#xff0c;表单上方需要使用锚点组件实现锚点定位到每一步的功能。 代码总览 <template><div class"guided-form-content-wrapper"><!-- …

初步了解C++

目录 一&#xff1a;什么是C&#xff1f; 二.C发展史 三:C关键字 四&#xff1a;命名空间 4.1命名空间的介绍 4.2命名空间的使用 4.3命名空间的使用 4.3.1使用作用域限定符 4.3.2 使用using将命名空间的某个成员引入 4.3.3使用using把整个命名空间展开 4.4命名空…

每天学习一个Linux命令之scp

每天学习一个Linux命令之scp 在Linux系统中&#xff0c;scp&#xff08;Secure Copy&#xff09;是一个用于在本地主机和远程主机之间进行文件传输的命令行工具。它基于SSH协议&#xff0c;通过加密方式传输文件&#xff0c;确保传输的安全性和完整性。scp命令非常强大且使用简…

【蓝桥杯选拔赛真题50】C++简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C简易炸弹超人 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 有一块矩形游戏场地&#x…

聊聊k8s服务发现的优缺点

序 本文主要研究一下使用k8s服务发现的优缺点 spring cloud vs kubernetes 这里有张spring cloud与kubernetes的对比&#xff0c;如果将微服务部署到kubernetes上面&#xff0c;二者有不少功能是重复的&#xff0c;可否精简。 这里主要是讲述一下如果不使用独立的服务发现&am…

Linux renice命令教程:如何优雅地调整进程优先级(附案例详解和注意事项)

Linux renice命令介绍 renice命令在Linux中用于修改已经运行的进程的优先级。这个命令允许你改变一个已经运行的进程的调度优先级。如果我们给一个进程设置了更高的优先级&#xff0c;那么内核将为该进程分配更多的CPU时间。 Linux renice命令适用的Linux版本 renice命令在所…

校验器选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理2.1,数据写入2.2,数据读取2.3,错误检测2.4,错误纠正2.5,错误处理3,结构特点3.1,输入接口3.2,校验规则3.3,错误处理机制3.4,可配置性3.5,性能优化<

css之flex布局文本不换行不显示省略号的解决方法

文章目录 一、单行长文本显示省略号二、flex布局下的处理技巧 一、单行长文本显示省略号 先讲讲常规情况下长文本不跨行显示省略号的代码&#xff1a; overflow: hidden; //不允许内容超出盒子 white-space: nowrap; //不允许文本跨行 text-overflow: ellipsis; //文本超…

SpringMVC注解及使用规则

文章目录 前言一、SpringMVC注解是什么&#xff1f;二、使用步骤1.注解使用2创建JSP3 SpringMVC视图1. 逻辑视图&#xff08;Logical View&#xff09;2. 物理视图&#xff08;Physical View&#xff09;区别和关系 4 SpringMVC注解总结 总结 前言 提示&#xff1a;这里可以添…

建立一个简单的网页音乐盒模型效果#css#h5

“音乐盒”可以看做一个大盒子&#xff0c;用<div>标签进行定义。大盒子的上面为文本内容&#xff0c;可以在<div>标签中嵌套<h2>和<p>标签来实现&#xff1b;大盒子下面为图像&#xff0c;通过在<div>标签中嵌套<img/>标签来实现。 样式…