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

news/2024/9/28 20:15:25/

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
      在这里插入图片描述
      在这里插入图片描述

redis_66">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.ppmy.cn/news/1531321.html

相关文章

uni-app快速入门

目录 一、什么是 uni-app二、快速创建 uni-app 项目1.创建 uni-app2.运行 uni-app 三、uni-app 相对传统 H5 的变化1.网络模型的变化2.文件类型变化3.文件内代码架构的变化4.外部文件引用方式变化5.组件/标签的变化6.js的变化&#xff08;1&#xff09;运行环境从浏览器变成v8引…

单片机初级(持续更新)

单片机是一种单片微型计算机的简称&#xff08;MCU)&#xff0c;采用集成电路技术将有数据处理能力的中央处理器、随机存储器、只读存储器、定时器/计时器、多种IO口与中断系统等功能集成在一块硅片上。 开发板/最小系统板 开发板通常是学习用途&#xff0c;功能齐全&#xff0…

公私域互通下的新商机探索:链动2+1模式、AI智能名片与S2B2C商城小程序的融合应用

摘要&#xff1a;在数字化时代&#xff0c;公私域流量的有效融合已成为企业获取持续增长动力的关键。本文旨在探讨如何通过链动21模式、AI智能名片以及S2B2C商城小程序源码的综合运用&#xff0c;实现公私域流量的高效互通&#xff0c;进而为门店创造巨大商机。通过分析这些工具…

基于QT的C++中小项目软件开发架构源码

描述 基于QT信号槽机制实现类之间的交互调用通信&#xff0c;适用于使用不同枚举作为消息交互的类型场景&#xff0c;支持附带任意参数&#xff0c;代码使用方式参考前一篇文章 特性 代码简洁&#xff0c;不超过100行仅需包含一个头文件Communicator.h&#xff0c;需要通信的…

Java设计模式——工厂模式扩展

5.5 工厂模式扩展 简单工厂配置文件解除耦合 &#xff08;spring底层类似&#xff09; 可以通过工厂模式配置文件的方式解除工厂对象和产品对象的耦合。在工厂类中加载配置文件中的全类名&#xff0c;并通过反射技术创建对象进行存储&#xff0c;客户端如果需要对象&#xf…

2024云手机推荐与排行:怎样选择最适合的云手机?

在当前市场上&#xff0c;云手机品牌繁多&#xff0c;既有老牌的稳定产品&#xff0c;也有新晋品牌异军突起。不同品牌的云手机因其配置、性能、功能等方面的差异&#xff0c;带来的使用体验也各不相同。为了帮助大家更好地挑选适合的云手机设备&#xff0c;我们将对市面上一些…

ubuntu如何开启和关闭图形界面

在Ubuntu中&#xff0c;你可以根据需要开启或关闭图形界面。以下是具体的方法&#xff1a; 关闭图形界面 方法一&#xff1a;使用 systemctl 命令 打开终端。输入以下命令切换到多用户目标&#xff08;相当于关闭图形界面&#xff09;&#xff1a;sudo systemctl set-defaul…

JAVA零基础入门——高级教程之集合框架

目录 1. 关于集合框架 1.1 集合接口 1.2 集合实现类 1.3 集合算法及迭代器和比较器的使用 2. 数据结构 2.1 ArrayList 2.2 LinkedList 2.3 HashMap 2.4 HashSet 3. 迭代器 1. 关于集合框架 集合框架是使用数据结构&#xff08;参见本文2. 数据结构&#xff09;来满…