01.Redis中间件实战1

Redis中间件实战1

Redis各种数据结构实战

字符串

需求:将用户信息存储至缓存中,实现每次前端请求获取用户个人详情时直接从缓存中获取。来演示字符串的写入与读取。
技术方案:为了实现这个需求,首先需要建立用户对象实体,里面包含用户个人的各种信息,包括ID、年龄、姓名、用户名及住址等,
然后采用RedisTemplate操作组件将这一用户对象序列化为字符串信息并写入缓存中,最后从缓存中读取即可。

public class Person implements Serializable {private int id;private int age;private String name;private String address;public Person() {}public Person(int id, int age, String name, String address) {this.id = id;this.age = age;this.name = name;this.address = address;}public int getId() {return id;}public void setId(int id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

创建controller

@RestController
@RequestMapping(value = "/string")
public class StringController {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate ObjectMapper mapper;private static Logger logger = LoggerFactory.getLogger(StringController.class);@GetMapping(value = "/one")public void one() throws Exception{Person p1 = new Person(95001,23,"孙悟空","花果山水帘洞");// 定义key与即将存入缓存中的valuefinal String key = "redis:string:1";// JSON序列化String value = mapper.writeValueAsString(p1);// 写入缓存中logger.info("存入缓存中的用户实体对象信息为:{}",p1);//使用set命令写入缓存中redisTemplate.opsForValue().set(key,value);// 从缓存中获取用户的信息final Object object = redisTemplate.opsForValue().get(key);if (object != null) {Person p = mapper.readValue(object.toString(),Person.class);logger.info("从缓存中读取信息:{}",p);}}@GetMapping(value = "/get")public Person one(String key) throws Exception{// 从缓存中获取用户的信息final Object object = redisTemplate.opsForValue().get(key);if (object != null) {Person p = mapper.readValue(object.toString(),Person.class);logger.info("从缓存中读取信息:{}",p);return p;}return null;}
}

测试
http://localhost:9090/swagger-ui.html

列表

Redis的列表类型跟java的List类型很类似,用于存储一系列具有相同类型的数据。其底层对于数据的存储和读取
可以理解为一个数据队列,往List中添加数据的时候,即相当于往队列中的某个位置插入数据;而从List中
获取数据相当于从队列中某个位置获取数据。

需求:
将一组已经排好序的用户对象列表存储在缓存中,按照排名的先后顺序获取出来并输出到控制台上。
技术方案:
首先需要定义一个已经排好序的用户对象的列表,然后将其存储到Redis的List中,最后按照排名的先后顺序
将每个用户实体获取出来。
代码实现:
创建controller

@RestController
@RequestMapping(value = "/list")
public class ListController {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate ObjectMapper mapper;private static Logger logger = LoggerFactory.getLogger(ListController.class);@GetMapping(value = "/one")public void one() {List<Person> pList = new ArrayList<>();pList.add(new Person(1,20,"孙悟空","花果山水帘洞"));pList.add(new Person(1,30,"猪八戒","高老庄"));pList.add(new Person(1,40,"沙悟净","流沙河"));pList.add(new Person(1,50,"唐三藏","东土大唐"));logger.info("构造已经排好序的用户对象列表对象:{}",pList);// 将列表数据存储到Redis中的List中final String key = "redis:list:1";ListOperations listOperations = redisTemplate.opsForList();for (Person p:pList) {// 往列表中添加数据-从队尾添加listOperations.leftPush(key,p);}// 获取Redis列表中的数据-从队头中遍历获取,直到没有元素为止。logger.info("获取Redis中list的数据-从队头中获取");Object res = listOperations.rightPop(key);Person tmp = null;while (res != null) {tmp = (Person)res;logger.info("当前数据:{}",tmp.getName());res = listOperations.rightPop(key);}}
}

日志

2024-02-05 15:04:20.782  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 构造已经排好序的用户对象列表对象:[com.airycode.redis.bean.Person@4900d96f, com.airycode.redis.bean.Person@2fe9acc6, com.airycode.redis.bean.Person@512f8c42, com.airycode.redis.bean.Person@32385a70]
2024-02-05 15:04:20.823  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 获取Redis中list的数据-从队头中获取
2024-02-05 15:04:20.850  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 当前数据:孙悟空
2024-02-05 15:04:20.853  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 当前数据:猪八戒
2024-02-05 15:04:20.856  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 当前数据:沙悟净
2024-02-05 15:04:20.859  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 当前数据:唐三藏

总结:
在实际的应用场景中,Redis的列表类型特别适用于排名,排行榜,近期访问数据列表等业务场景
是一种很实用的存储类型

集合

Redis的集合类型跟高等数学中学习的集合类似,用于存储具有相同的类型或特性的不重复的数据
,即Redis中的集合Set存储的数据是唯一的,其底层的数据结构是哈希表&

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

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

相关文章

Windows 命令提示符(CMD)操作(三):用户管理

三、用户管理 3.1 net user 管理用户帐户&#xff0c;如创建、删除用户 一般语法&#xff1a; net user [username [password | *] [options]] [/domain] [/add] [/delete] [/expires:{date | never}] [/active:{yes | no}]常见选项和参数包括&#xff1a; [username]&…

化学空间可视化(chemical space visualization)开源软件ChemPlot的安装及使用

文章目录 前言一、ChemPlot是什么&#xff1f;二、conda环境安装ChemPlot1. 创建conda环境2. 安装chemplot及需要的包3. 检验安装 三、使用步骤1. 化合物数据库可视化使用方法BBBP数据库的t-SNE降维后可视化&#xff1a;BBBP数据库的PCA降维后可视化&#xff1a;BBBP数据库的UM…

qt QXlsx操作 excel 单元格

1.单元格设置宽度 m_pxlsx->setColumnWidth(5, 10);//5为列&#xff0c;10为列的宽度&#xff0c;excel表格中默认单元格宽度为9.36英寸 注意&#xff1a;单元格列宽的单位是英寸&#xff0c;默认的单元格列宽为9.36英寸。 注意&#xff1a;单元格列宽单位不是像素。 我之…

shapely 笔记:基本方法

1 线性方法 1.1 object.interpolate(distance[, normalizedFalse]) print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(1.5)) #POINT (0.5 1)print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(0.75, normalizedTrue)) #POINT (0.5 1) LineString([(0, 0), (0…

JimuReport积木报表 v1.7.0 变革版本发布,低代码报表设计工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

从零开始的 dbt 入门教程 (dbt core 开发进阶篇)

引 在上一篇文章中&#xff0c;我们花了专门的篇幅介绍了 dbt 更多实用的命令&#xff0c;那么我们继续按照之前的约定来聊 dbt 中你可能会遇到的疑惑以及有用的概念&#xff0c;如果你是 dbt 初学者&#xff0c;我相信如下知识点一定会对你有极大的帮助&#xff1a; 了解 dbt_…

Python数据分析:NumPy、Pandas与Matplotlib库

Python 是一种强大的编程语言&#xff0c;特别适合数据分析&#xff0c;主要得益于其丰富的库生态系统。NumPy、Pandas 和 Matplotlib 是 Python 中最常用的数据分析库。以下是对这三个库的简要介绍以及相应的代码示例。 1. NumPy NumPy 是 Python 的一个基本库&#xff0c;用…

前端 node 常见的包管理工具 npm、npx、Yarn、cnpm、pnpm 的区别有哪些

些工具都是用于管理 Node.js 包和依赖项的 npm (Node Package Manager): npm 是 Node.js 的默认包管理工具&#xff0c;随同 Node.js 安装。主要功能包括安装、发布、管理 JavaScript 包和依赖项。npm 是最常用的包管理工具之一&#xff0c;拥有庞大的包仓库&#xff08;npm Re…

java基础训练题(2)

一、题目 1. 以下程序输出&#xff08;D&#xff09; public static void main(String[] args) {int num 2;switch (num) {case 1:num;case 2:num;case 3:num;default:num;break;}System.out.println(num);} } A&#xff1a;2 B&#xff1a;3 C&#xff1a;4 D&#xff…

STM32 TIM输入捕获测频率占空比库函数

目录 一、输入捕获初始化函数 TIM_ICInit TIM_PWMIConfig TIM_ICStructInit 二、主从触发模式对应函数 TIM_SelectInputTrigger TIM_SelectOutputTrigger TIM_SelectSlaveMode 三、配置分频器函数 TIM_SetIC1Prescaler TIM_SetIC2Prescaler TIM_SetIC3Prescaler T…

怎样打开“好运“的开关?

说到运气&#xff0c;正好这个春节&#xff0c;我刚刚看了一本书&#xff0c;咱们得到《人生算法》课的主理人&#xff0c;喻颖正老师今年2月刚刚出的一本新书&#xff0c;叫《好运》。 关于运气的抽象原理&#xff0c;你可能听过不少&#xff0c;咱们就不多说了。我主要想借着…

Kubernetes基础(二十二)-K8S的PV/PVC/StorageClass详解

1 概述 先来个一句话总结&#xff1a;PV、PVC是K8S用来做存储管理的资源对象&#xff0c;它们让存储资源的使用变得可控&#xff0c;从而保障系统的稳定性、可靠性。StorageClass则是为了减少人工的工作量而去自动化创建PV的组件。所有Pod使用存储只有一个原则&#xff1a;先规…

WPF大杂烩

1、 <ResourceDictionary Source"pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" /> 在上面提供的代码中&#xff0c;Source 属性用于指定要加载的资源字典的位置。这里是一个使用了特殊 URI 格式的路径…

蓝牙BLE安全-SSP简单安全配对

SSP的配对过程由于可以根据设备的IO能力选择不同的关联模型&#xff0c;因此十分灵活&#xff0c;其提供了四种方式&#xff1a;Numeric Comparison、Passkey Entry、Just Works以及Out of Band (OOB) 。这里关联方式的选择实质上对后面的流程是有一定影响的&#xff0c;如Just…

Excel表的内容批量生成个人加水印的Word文档

Excel表的内容批量生成个人加水印的Word文档 以下代码可以直接复制到docm文件里使用 Sub 宏1()Dim MyDialog As FileDialogDim GetStr As String, Adoc As StringDim PsDoc As DocumentApplication.ScreenUpdating FalseSet MyDialog Application.FileDialog(msoFileDialogF…

使用动态网格的流体动画 Fluid Animation with Dynamic Meshes 论文阅读笔记

目录 引言背景方法离散化离散化的导数算子速度插值 广义的半拉格朗日步重新网格化双向流固耦合和质量守恒 原文&#xff1a; Klingner, Bryan M., et al. “Fluid animation with dynamic meshes.” ACM SIGGRAPH 2006 Papers. 2006. 820-825. 引言 使用 [Alliez et al., 20…

SpringBoot+Kafka

文章目录 一、依赖二、配置文件三、API1、生产者2、消费者 一、依赖 <!-- spring-kafka&#xff08;与kafka的版本一致&#xff09; --> <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId>…

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息&#xff01;我想通过openai公司的chatgpt3.5来了解一下关于sora的技术信息&#xff0c;结果呢&#xff0c;它竟然回答不知道sora是什么。看来&#xff0c;sora的语料库信息还未来得及加入chatgpt3.5的训练模型中。 如图…

每日学习总结20240219

每日总结 20240219 1.文件类型.csv CSV文件是一种以逗号分隔值&#xff08;Comma-Separated Values&#xff09;为标记的文本文件&#xff0c;它可以用来存储表格数据。每一行表示一条记录&#xff0c;而每一条记录中的字段则使用逗号或其他特定的分隔符进行分隔。 常用场景…

HTTP特性

大家好我是苏麟 , 今天说说HTTP特性. 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 到目前为止&#xff0c;HTTP 常见到版本有 HTTP/1.1&#xff0c;HTTP/2.0,HTTP/3.0&#xff0c;不同版本的 HTTP 特性是不一样的。 这里先用 HTTP/1.1 版本给大家介…