项目记录:利用Redis实现缓存以提升查询效率

一、概述

当我们查询所有数据时,如果缓存中没有,则去数据库查询,如果有,直接查缓存的数据就行。注意定期更新缓存数据。

二、主体代码

    private static final String ROOM_SCHEDULES_HASH = "RoomSchedules";@Overridepublic List<RoomSchedule> getAllRoomSchedules()  {BoundHashOperations<String, String, String> hashOps = stringRedisTemplate.boundHashOps(ROOM_SCHEDULES_HASH);if (hashOps.size() == 0) {List<RoomSchedule> roomSchedules = roomScheduleMapper.getAllRoomSchedules();for (RoomSchedule roomSchedule : roomSchedules) {ObjectMapper objectMapper = new ObjectMapper();try {String json = objectMapper.writeValueAsString(roomSchedule);hashOps.put(roomSchedule.getId().toString(), json);} catch (Exception e) {e.printStackTrace();}}stringRedisTemplate.expire(ROOM_SCHEDULES_HASH, 3, TimeUnit.MINUTES);  // 设置有效期为三分钟return roomSchedules;} else {Map<String, String> entries = hashOps.entries();List<RoomSchedule> roomSchedules = new ArrayList<>();for (String json : entries.values()) {try {ObjectMapper objectMapper = new ObjectMapper();RoomSchedule roomSchedule = objectMapper.readValue(json, RoomSchedule.class);roomSchedules.add(roomSchedule);} catch (Exception e) {e.printStackTrace();}}return roomSchedules;}}

BoundHashOperations是绑定键值的方法,意味着之后的操作都是对此键进行操作。

ObjectMapper类提供了一系列json序列化和反序列化的操作。

缓存更新操作是通过设置TTL有效期来实现的。

三、效果实现

 可以看到引入Redis缓存后,查询效率明显提升。

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

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

相关文章

pytorch 多卡训练 accelerate gloo

目录 accelerate 多卡训练 Windows例子 gloo 多卡训练 accelerate 多卡训练 Windows例子 import torch from torch.nn.parallel import DistributedDataParallel as DDP from torch.utils.data import DataLoader, RandomSampler from accelerate import Accelerator# 模拟数…

HTML---JavaScript基础

文章目录 目录 文章目录 本章目标 一.JavaScript基础 概述 特点 JavaScript 基本机构 语法 网页中引用JavaScript的方式 二. JavaScript核心语法 变量 ​编辑 数据类型 数组 练习 本章目标 掌握JavaScript的组成掌握JavaScript的基本语法会定义和使用函数会使用工具进行…

引领手游技术潮流:武汉灰京文化的卓越技术创新与市场推广支持

在数字娱乐领域&#xff0c;手游行业正蓬勃发展&#xff0c;为数以亿计的玩家提供了丰富的娱乐选择。武汉灰京文化&#xff0c;作为该领域的佼佼者&#xff0c;以其强大的技术创新和全面的市场推广支持&#xff0c;为合作伙伴的成功铺平了道路&#xff0c;不仅提升了游戏质量&a…

TV端Web页面性能优化实践

01 背景 随着互联网技术的持续创新和电视行业的高速发展&#xff0c;通过电视观看在线视频已经逐渐成为大众的重要娱乐方式。奇异果App作为在TV设备上用户活跃度最高的应用之一&#xff0c;为广大用户提供了丰富的内容播放服务&#xff0c;除此之外&#xff0c;同样有会员运营、…

【Kubernetes】什么是 kubectl ?

什么是 kubectl &#xff1f; 1.什么是 kubectl &#xff1f;2.Kubernetes 内部结构3.Kubernetes API 的作用 1.什么是 kubectl &#xff1f; 在学习如何更有效地使用 kubectl 之前&#xff0c;您应该对它是什么以及它如何工作有一个基本的了解。从用户的角度来看&#xff0c;…

Javaweb-servlet

一、servlet入门 1.Servlet介绍 (1)什么是Servlet Servlet是Server Applet的简称&#xff0c;是用Java编写的是运行在 Web 服务器上的程序&#xff0c;它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet&#…

CGAL的三角网格曲面脊线和脐点的近似计算(需要微分几何学的知识)

脊线&#xff08;Ridges&#xff09;&#xff1a;在光滑曲面上&#xff0c;脊线是一种特殊的曲线。沿着这条曲线&#xff0c;曲面的一个主曲率在其曲率线上达到极值&#xff08;最大或最小&#xff09;。这意味着脊线是那些曲率发生突变的区域&#xff0c;它们在形状感知、物体…

Redis布隆过滤器

简介 布隆过滤器&#xff08;Bloom Filter&#xff09;是 1970 年由布隆提出的&#xff0c;是一种非常节省空间的概率数据结构&#xff0c;运行速度快&#xff0c;占用内存小&#xff0c;但是有一定的误判率且无法删除元素。它实际上是一个很长的二进制向量和一系列随机映射函…

报错解析:apt-get install curl -y‘ returned a non-zero code: 100

错误回顾 The command ‘/bin/sh -c apt-get update && apt-get install curl -y’ returned a non-zero code: 100 docker build 时想给容器加上curl命令&#xff0c;执行报错 dockerfile命令 FROM Ubuntu20.04#RUN apt-get update && apt-get install -y…

Android Studio下载gradle失败

1、打开Android Studio设置Gradle的地方&#xff0c;点击左上角的File->Settings查看gradle存放路径 C:\Users\Administrator.gradle\wrapper\dists\gradle-5.4.1-all\3221gyojl5jsh0helicew7rwx 2、找到正在下载的gradle版本&#xff0c;Android Studio取消下载gradle&…

Tomcat与Servlet是什么关系

Tomcat与Servlet是什么关系 Apache Tomcat和Servlet之间存在密切的关系&#xff0c;可以说它们是一对密切合作的组件。下面是它们的关系&#xff1a; Tomcat是Servlet容器&#xff1a; Tomcat是一个开源的、轻量级的Servlet容器。Servlet容器是一个Web服务器扩展&#xff0c;用…

2023.12.28 关于 Redis 数据类型 List 内部编码、应用场景

目录 List 编码方式 早期版本 现今版本 List 实际应用 多表之间的关联关系 消息队列 频道&#xff08;多列表&#xff09;消息队列 微博 Timeline 栈 & 队列 List 编码方式 早期版本 早期版本 List 类型的内部编码方式有两种 ziplist&#xff08;压缩列表&#xf…

C语言中数组和指针的sizeof和strlen详解

数组和指针是常用的数据类型&#xff0c;了解它们的sizeof和strlen的使用是编写高效程序的关键。本文将通过一系列示例代码详细解释数组和指针在不同场景下的sizeof和strlen的计算方式。 一维数组 首先&#xff0c;我们来看一维数组的情况&#xff1a; int main() {int a[] …

Cisco模拟器-企业网络部署

某企业园区网有&#xff1a;2个分厂&#xff08;分别是&#xff1a;零件分厂、总装分厂&#xff09;1个总厂网络中心 1个总厂会议室&#xff1b; &#xff08;1&#xff09;每个分厂有自己的路由器&#xff0c;均各有&#xff1a;1个楼宇分厂网络中心 每个楼宇均包含&#x…

004、变量与可变性

1. 变量与可变性 在Rust中&#xff0c;变量默认是不可变的&#xff0c;这一设计是为了让你安全方便地写出复杂、甚至是并行的代码。 当然&#xff0c;Rust也提供了可使用的可变变量的方法&#xff0c;这个待会讨论。 当一个变量是不可变时&#xff0c;一旦它被绑定到某个值上面…

Java之程序、进程、线程、管程和并发、并行的概念

文章目录 1. 进程与线程1.1 程序1.2 进程1.3 线程1.4 管程 2.并行与并发2.1 并发2.2 并行 1. 进程与线程 1.1 程序 程序是指令和数据的有序集合&#xff0c;其本身没有任何运行的含义&#xff0c;是一个静态的概念。简单的说就是我们写的代码。 1.2 进程 &#xff08;1&…

分布式系统架构设计之分布式数据存储的分类和组合策略

在现下科技发展迅猛的背景下&#xff0c;分布式系统已经成为许多大规模应用和服务的基础架构。分布式架构的设计不仅仅是一项技术挑战&#xff0c;更是对数据存储、管理和处理能力的严峻考验。随着云原生、大数据、人工智能等技术的崛起&#xff0c;分布式系统对于数据的高效存…

MySQL一些常用命令

1、登录本地MySQL #一种是 mysql -u root -p; #(输入密码后回车)#另一种是 mysql -uroot -p123456; #(在-p后面直接带上密码)2、启动MySQL服务 net start mysql; 3、关闭MySQL服务&#xff1a; net stop mysql; 4、创建数据库 create database 数据库名; 5、创建数据…

科技云报道:开源才是大模型的未来?

科技云报道原创。 一年前&#xff0c;ChatGPT横空出世&#xff1b;7个多月后&#xff0c;Meta宣布开源LLaMA 2&#xff0c;并且可免费商用。 这一天&#xff0c;也成为大模型发展的分水岭。短时间内&#xff0c;LLaMA 2对一些闭源的大模型厂商造成了致命性的打击。 随后&…

【力扣100】207.课程表

添加链接描述 class Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:# 思路是计算每一个课的入度&#xff0c;然后使用队列进行入度为0的元素的进出# 数组&#xff1a;下标是课程号&#xff0c;array[下标]是这个课程的入度# 哈希…