[001-03-007].第28节:SpringBoot整合Redis:

6.1.Redis的介绍:

  • 1.Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
  • 2.它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
  • 3.Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

6.2.Redis自动配置:

a.修改pom.xml文件,引入依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.bjpowernode</groupId><artifactId>021-springboot-redis</artifactId><version>0.0.1-SNAPSHOT</version><properties><java.version>1.8</java.version></properties><dependencies><!--redis起步依赖: 直接在项目中使用RedisTemplate(StringRedisTemplate)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

b.自动配置分析:

  • 1.如下可知,Redis默认使用的是lettuce客户端,所以说在程序中使用RedisTemplate类的方法 操作redis数据实际就是调用的lettuce 客户端的中的方法
    在这里插入图片描述
  • 2.Redis的自动配置:
    • RedisAutoConfiguration 自动配置类。RedisProperties 属性类 --> spring.redis.xxx是对redis的配置
    • 连接工厂是准备好的。LettuceConnectionConfigurationJedisConnectionConfiguration
    • 自动注入了RedisTemplate<Object, Object> : xxxTemplate;
    • 自动注入了StringRedisTemplate:k:v都是String
    • key:value
    • 底层只要我们使用 StringRedisTemplate、RedisTemplate就可以操作redis
      在这里插入图片描述
      在这里插入图片描述

c.更改配置文件application.properities,配置redis连接的信息

server.port=9001
server.servlet.context-path=/myredis#指定redis (host ,ip, password)
spring.redis.host=localhost
spring.redis.port=6379
#spring.redis.password=123

d.创建controller,

package com.bjpowernode.controller;import com.bjpowernode.vo.Student;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestController
public class RedisController {/*** 注入RedisTemplate** RedisTemplate 泛型* RedisTemplate<String,String>* RedisTemplate<Object,Object>* RedisTemplate** 注意: RedisTemplate对象的名称 redisTemplate*/@Resourceprivate RedisTemplate redisTemplate;@Resourceprivate StringRedisTemplate stringRedisTemplate;// 添加数据到redis@PostMapping("/redis/addstring")public String addToRedis(String name, String value){// 操作Redis中string类型的数据, 先获取ValueOperations对象ValueOperations valueOperations = redisTemplate.opsForValue();//添加数据到redisvalueOperations.set("myname","lisi");return "向redis添加string类型的数据";}// 从redis获取数据@GetMapping("/redis/getk")public String getData(String k){ValueOperations valueOperations = redisTemplate.opsForValue();Object v = valueOperations.get(k);return "key是"+k+",他的值是:"+v;}@PostMapping("/redis/{k}/{v}")public String addStringKV(@PathVariable  String k,@PathVariable  String v){// 使用StringRedisTemplate对象stringRedisTemplate.opsForValue().set(k,v);return "使用StringRedisTemplate对象";}@GetMapping("/redis/getstr/{k}")public String getStringValue(@PathVariable  String k){String v  = stringRedisTemplate.opsForValue().get(k);return "k的value:"+v;}/** 设置 RedisTemplate 序列化*  可以设置 key 的序列化, 可以设置value的序列化 *  可以同时设置 key 和 value的序列化*/@PostMapping("/redis/addstr")public String  addString(String k,String v){// 使用RedisTemplate// 设置 key 使用String的序列化redisTemplate.setKeySerializer( new StringRedisSerializer());// 设置 value 的序列化redisTemplate.setValueSerializer( new StringRedisSerializer());redisTemplate.opsForValue().set(k,v);return "定义RedisTemplate对象的key,value的序列化";}/*** 使用json 序列化, 把java对象转为json存储*/@PostMapping("/redis/addjson")public String  addJson(){Student student  = new Student();student.setId(1001);student.setName("zhangsan");student.setAge(20);redisTemplate.setKeySerializer(new StringRedisSerializer());// 把值作为json序列化redisTemplate.setValueSerializer( new Jackson2JsonRedisSerializer(Student.class) );redisTemplate.opsForValue().set("mystudent", student);return "json序列化";}@PostMapping("/redis/getjson")public String  getJson(){redisTemplate.setKeySerializer(new StringRedisSerializer());// 把值作为json序列化redisTemplate.setValueSerializer( new Jackson2JsonRedisSerializer(Student.class) );Object obj  = redisTemplate.opsForValue().get("mystudent");return "json反序列化="+ obj;}
}

e.Postman测试:

在这里插入图片描述


6.3.对比StringRedisTemplate 和 RedisTemplate

a.两者的对比:

  • StringRedisTemplate : 把k,v 都是作为String处理, 使用的是String的序列化 , 可读性好
  • RedisTemplate把k,v 经过了序列化存到redis。 k,v 是序列化的内容, 不能直接识别,默认使用的jdk序列化, 可以修改为前提的序列化;
    • 序列化:把对象转化为可传输的字节序列过程称为序列化
    • 反序列化:把字节序列还原为对象的过程称为反序列化

b.为什么需要序列化

  • 序列化最终的目的是为了对象可以跨平台存储,和进行网络传输。而我们进行跨平台存储和网络传输的方式就是IO而我们的IO支持的数据格式就是字节数组。我们必须在把对象转成字节数组的时候就制定一种规则(序列化),那么我们从IO流里面读出数据的时候再以这种规则把对象还原回来(反序列化)

c.什么情况下需要序列化:

  • 通过上面已经知道了凡是需要进行“跨平台存储”和”网络传输”的数据,都需要进行序列化
  • 本质上存储和网络传输 都需要经过 把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息。

d.序列化的方式

  • 序列化只是一种拆装组装对象的规则,那么这种规则肯定也可能有多种多样,比如现在常见的序列化方式有:JDK(不支持跨语言)、JSON、XML、Hessian、Kryo(不支持跨语言)、Thrift、Protofbuff、

e.json序列化:

  • json序列化功能将对象转换为 JSON 格式从 JSON 格式转换对象。例如把一个Student对象转换为JSON字符串{“name”:“李四”, “age”:29} ),反序列化(将JSON字符串 {“name”:“李四”, “age”:29} 转换为Student对象)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6.4.Redis环境搭建(学习学习各种云是什么)

1、阿里云按量付费redis。经典网络
2、申请redis的公网连接地址
3、修改白名单 允许0.0.0.0/0 访问


6.4.IDEA生成序列化版本号:

  • 1.IDEA中的设置步骤:
    在这里插入图片描述
  • 2.找到实体类,添加UID;在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python制作进度条,18种方式全网最全!(不全去你家扫厕所!)

想象一下&#xff0c;你的程序在执行复杂任务时&#xff0c;不再是冷冰冰的等待光标&#xff0c;而是伴随着色彩斑斓、动态变化的进度条&#xff0c;不仅让等待变得有趣&#xff0c;更让用户对你的作品刮目相看。从基础的文本进度条到高级的图形界面进度条&#xff0c;从简单的…

Excel FIND函数用法详解,附FIND函数提取文本示例

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f50e; 在处理文本数据时&#xff0c;我们经常需要在字符串中查找特定词语或字符的位置。Excel中的FIND函数是一个非常实用的工具&#xff0c;可以帮助我们在文本字符串中查找子字符串的位置。今天&#xff0c;我们将…

Ubuntu环境下字体安装

本文介绍Ubuntu环境下字体安装。 软件&#xff08;如Qt应用软件&#xff09;开发过程中经常会涉及到字体的选择&#xff0c;有时候Ubuntu环境下并没有我们想要的字体&#xff0c;本文介绍常用字体及在Ubuntu环境下如何安装。 1.常用开源字体 有些字体商用并不是免费的&#…

【解答篇】什么是SSL证书?它为什么很重要?

什么是SSL证书&#xff1f;它为什么很重要&#xff1f; 1 数据保护的金钟罩2 身份验证的守护者3 信任度与SEO的双重提升4 合规经营的必要条件5 某宝案例 SSL证书&#xff0c;全称安全套接层证书&#xff0c;是互联网安全通信的坚固基石。它并非仅仅是一份文档&#xff0c;而是用…

落魄前端搞副业之 改造淘宝首页(淘宝换肤)

事情发生是这样的: 无意间看到一个淘宝的网页版本换肤大赛, 本来我也是不懈看一眼的. 一脸高傲. 因为各种比赛, 要么就是对手太厉害, 拿不到奖, 要么就是主办方潜规则多, 最终坑人. 那, 按照我的性子, 那必然不会参加啊, /高傲 (奖金不多, 设计开发麻烦, 竞争还大, 说不定还…

智能制造的生产力基础设施

由于全球大多数细分市场的半导体工厂都满负荷运转&#xff0c;因此&#xff0c;生产力如今成为整个行业关注的重要问题也就不足为奇了。工厂经理会仔细监控关键绩效指标 (KPI)&#xff0c;以发现任何生产力下降的迹象&#xff0c;以便快速做出反应&#xff0c;找出并解决这些偏…

Metasploit渗透测试之服务端漏洞利用

简介 在之前的文章中&#xff0c;我们学习了目标的IP地址&#xff0c;端口&#xff0c;服务&#xff0c;操作系统等信息的收集。信息收集过程中最大的收获是服务器或系统的操作系统信息。这些信息对后续的渗透目标机器非常有用&#xff0c;因为我们可以快速查找系统上运行的服…

Spring5入门

Spring5 课程&#xff1a;3、IOC理论推导_哔哩哔哩_bilibili 文档&#xff1a;狂神SSM教程- 专栏 -KuangStudy 一.Spring概述 1.介绍 Spring : 春天 —->给软件行业带来了春天2002年&#xff0c;Rod Jahnson首次推出了Spring框架雏形interface21框架。2004年3月24日&…

AI驱动的智能运维:行业案例与挑战解析

华为、蚂蚁、字节跳动如何引领智能运维&#xff1f; ©作者|潇潇 来源|神州问学 引言 OpenAI 发布的 ChatGPT 就像是打开了潘多拉的魔盒&#xff0c;释放出了生产环境中的大语言模型&#xff08;LLMs&#xff09;。一些新的概念&#xff1a;“大语言模型运维 (LLMOps)”…

防火墙会话表解析

华为防火墙的会话表是防火墙用于记录和管理网络会话的重要数据结构&#xff0c;它对于实现精确的流量控制和安全管理起着至关重要的作用。以下是对华为防火墙会话表的详细解析&#xff1a; 一、会话表的作用 会话表主要用于记录TCP、UDP、ICMP等协议连接的状态信息&#xff0c;…

数据结构:链表算法题

目录 题1.删除链表中的某个元素val题目表述&#xff1a;思路1:在源链表中进行删除更改思路2:创建一个新链表 题2:反转一个链表问题描述&#xff1a;思路1:在源链表内部进行操作思路2:创建一个新链表 题3:寻找链表中间位置题目描述:思路1:思路2:快慢指针 题1.删除链表中的某个元…

003、网关路由问题

1. nginx配置404跳转回默认路由 https://blog.csdn.net/masteryee/article/details/83689954 https://blog.csdn.net/IbcVue/article/details/133230460 https://www.jb51.net/server/317970ynk.htm https://blog.csdn.net/u014438244/article/details/120531287 https://blog…

快速上手Make Sense:在线标注数据集的强大工具

链接&#xff1a; Makesense汉化版本 Makesense英文版 随着深度学习在计算机视觉领域的广泛应用&#xff0c;数据集标注成为了一项重要的任务。Make Sense正是一个为图像数据集提供标注功能的在线工具。其易用性和强大的功能使得它在众多标注工具中脱颖而出。本文将为你详细介绍…

搭建高效知识库:教培机构数字教学的关键一步

在数字化时代&#xff0c;教育培训行业正经历着前所未有的变革。随着在线教育的兴起和个性化学习需求的增长&#xff0c;构建一个高效、易用的知识库已成为教培机构提升教学质量、优化学习体验、增强竞争力的关键一步。本文将深入探讨构建高效知识库的重要性&#xff0c;以及如…

分享段 HTML to PDF 的 NodeJs代码

最近工具箱增加的一个功能&#xff1a; 代码如下&#xff1a; const puppeteer require(puppeteer); const moment require(moment);const TAG [convertTopPdf];async function html2pdf(url, wantFileName) {console.log(TAG, convertTopPdf start, url:, url);const no…

QT 获取视频帧Opencv获取清晰度

先展示结果&#xff1a; 1.获取摄像头的分辨率 mResSize.clear();mResSize camera_->supportedViewfinderResolutions();ui->comboBox_resulation->clear();int i0;foreach (QSize msize, mResSize) {qDebug()<<msize;ui->comboBox_resulation->addItem(…

mp4(H.265编码)转为本地RTSP流

目标&#xff1a;获得H265码流&#xff0c;要么通过在线网址&#xff0c;要么获得H265文件自己产生码流 在以下任意网址中下载得到H265编码的MP4文件 http://www.elecard.com/en/download/videos.html http://ultravideo.cs.tut.fi/#testsequences http://4k.cablelabs.com/](…

数据库软题4-关系代数转SQL语言

题1 因为是笛卡尔积 <ABCD CDE> <1234 567> 笛卡尔积 RxS FROM R&#xff0c;S题2 题3 题4 题5

图像分割(九)—— Mask Transfiner for High-Quality Instance Segmentation

Mask Transfiner for High-Quality Instance Segmentation Abstract1. Intrudouction3. Mask Transfiner3.1. Incoherent Regions3.2. Quadtree for Mask RefinementDetection of Incoherent Regions四叉树的定义与构建四叉树的细化四叉树的传播 3.3. Mask Transfiner Architec…

【JavaScript】搭建一个具有记忆的简洁个人待办网页

1. HTML 结构 文档类型声明&#xff1a;<!DOCTYPE html>这告诉浏览器这是一个 HTML5 文档。HTML 标签&#xff1a;<html lang"zh-CN">表示整个页面的内容&#xff0c;lang"zh-CN" 表示内容使用简体中文。头部信息&#xff1a;<head><…