手机网站php源码/友链交易交易平台

手机网站php源码,友链交易交易平台,做网站建设哪家好,康体设备网站建设八. Spring Boot2 整合连接 Redis(超详细剖析) 文章目录 八. Spring Boot2 整合连接 Redis(超详细剖析)2. 注意事项和细节3. 最后: 在 springboot 中 , 整合 redis 可以通过 RedisTemplate 完成对 redis 的操作, 包括设置数据/获取数据 比如添加和读取数据 具体…

八. Spring Boot2 整合连接 Redis(超详细剖析)

文章目录
  • 八. Spring Boot2 整合连接 Redis(超详细剖析)
  • 2. 注意事项和细节
  • 3. 最后:

在 springboot 中 , 整合 redis

可以通过 RedisTemplate 完成对 redis 的操作, 包括设置数据/获取数据

比如添加和读取数据

具体整合实现:

  1. 创建 Maven 项目:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 在 pom.xml 文件当中导入相关的 jar 依赖。如下:

在这里插入图片描述

<?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 http://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.6.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.rainbowsea</groupId><artifactId>redis_springboot</artifactId><version>1.0-SNAPSHOT</version><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><!--   说明:   如果这里是 spring-boot-start 就改成如下 spring-boot-start-web--><artifactId>spring-boot-starter-web</artifactId></dependency><!--        redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- spring2.X 集成 redis 所需 common-pool--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><!--不要带版本号,防止冲突--></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--         json 转换的 jar 包依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.2.2</version></dependency></dependencies><!--    插件--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
  1. 在 resources 目录下创建 application.properties,完成 redis 的基本配置,如下所示:

在这里插入图片描述

#Redis 服务器地址
spring.redis.host=192.168.76.145
#Redis 服务器连接端口
spring.redis.port=6379
#Redis 如果有密码,需要配置,  没有密码就不要写
spring.redis.password=rainbowsea
#Redis 数据库索引(默认为 0)
spring.redis.database=0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
#连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
  1. 创建/定义一个 Redis 配置类。
  • 这个 Redis 配置类是对要使用 RedisTemplate bean 对象的配置,可以理解成是一个常规配置
  • 和我们以前学过的一个 JdbcTemplate 的设计理念类似。
  • 如果不是配置,那么 Spring boot 会使用默认配置,这个默认配置,会出现一些问题,比如:redisTemplate 的 key 序列化等问题,所以通常我们需要配置这个。Redis 配置类.

创建: edis_springbootsrcmainjavacom ainbowsea edisconfig RedisConfig.java 配置类

在这里插入图片描述

package com.rainbowsea.redis.config;import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;@EnableCaching  // 配置开启缓存
@Configuration // 定义配置类
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template =new RedisTemplate<>();System.out.println("template=>" + template);RedisSerializer<String> redisSerializer =new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);jackson2JsonRedisSerializer.setObjectMapper(om);template.setConnectionFactory(factory);// key 序列化方式template.setKeySerializer(redisSerializer);// value 序列化template.setValueSerializer(jackson2JsonRedisSerializer);// value hashmap 序列化template.setHashValueSerializer(jackson2JsonRedisSerializer);return template;}@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {RedisSerializer<String> redisSerializer =new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);//解决查询缓存转换异常的问题ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.WRAPPER_ARRAY);jackson2JsonRedisSerializer.setObjectMapper(om);// 配置序列化(解决乱码的问题),过期时间 600 秒RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(600)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).disableCachingNullValues();RedisCacheManager cacheManager = RedisCacheManager.builder(factory).cacheDefaults(config).build();return cacheManager;}
}
  1. 创建 controller 访问设置/获取到 Redis 数据库当中的数据。

在这里插入图片描述

重点: 我们这里的 RedisTemplate 模板对象,就是已经配置好了 Jedis 的连接上 Redis的一个模板,该模板提供了很多,我们操作 Redis 数据库的方法。就和我们前面学习 MySQL ,操作连接 MySQL 当中的 JdbcTemplate 模板是类似的。

如下所示:

在这里插入图片描述

package com.rainbowsea.redis.controller;import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestController
@RequestMapping("/redisTest")
public class RedisTestController {// 装配 RedisTemplate@Resourceprivate RedisTemplate redisTemplate;// 编写一个测试方法// 演示设置数据和获取数据@GetMapping("/t1")public String t1() {// 设置值到 redis 当中,opsForValue 是操作 string 字符串的redisTemplate.opsForValue().set("book", "天龙八部");// 从 redis 当中获取值String book = (String) redisTemplate.opsForValue().get("book");return book;}
}
  1. 创建场景启动器。

在这里插入图片描述

在这里插入图片描述

package com.rainbowsea.redis;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class RedisSpringBootApplication {public static void main(String[] args) {SpringApplication.run(RedisSpringBootApplication.class, args);}
}
  1. 启动程序run, 打开浏览器地址栏上输入:http://localhost:9090/redisTest/t1 。

在这里插入图片描述


**演示:如何操作 List **

在这里插入图片描述

在这里插入图片描述

package com.rainbowsea.redis.controller;import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.List;@RestController
@RequestMapping("/redisTest")
public class RedisTestController {// 装配 RedisTemplate@Resourceprivate RedisTemplate redisTemplate;// 演示如何操作 list 列表@GetMapping("/t2")public String t2() {// list-存redisTemplate.opsForList().leftPush("books", "笑傲江湖");redisTemplate.opsForList().leftPush("books", "hello world");// list - 取数据List books = redisTemplate.opsForList().range("books", 0, -1);String booksList = "";for (Object book : books) {System.out.println("book->" + book.toString());booksList += book.toString();}return booksList;}// 编写一个测试方法// 演示设置数据和获取数据@GetMapping("/t1")public String t1() {// 设置值到 redis 当中,opsForValue 是操作 string 字符串的redisTemplate.opsForValue().set("book", "天龙八部");// 从 redis 当中获取值String book = (String) redisTemplate.opsForValue().get("book");return book;}
}

在这里插入图片描述

演示:如何操作 hash

在这里插入图片描述

在这里插入图片描述

@RestController
@RequestMapping("/redisTest")
public class RedisTestController {// 装配 RedisTemplate@Resourceprivate RedisTemplate redisTemplate;@GetMapping("/t3")public String t3() {// hash - 存数据redisTemplate.opsForHash();// 操作 Zset 有序集合redisTemplate.opsForZSet();// 操作 set 集合redisTemplate.opsForSet();return null;}

2. 注意事项和细节

  1. 如果没有提供 RedisConfig 配置类 , springboot 会使用默认配置 也可以使用。但是会存在问题。比如 redisTemplate 模糊查找 key 数据为空。

测试:

这里我们先将 我们配置的 RedisConfig 配置类注释掉。

在这里插入图片描述

编写一个方法,获取所有的 key: * ,表示获取所有的 key

在这里插入图片描述

@RestController
@RequestMapping("/redisTest")
public class RedisTestController {// 装配 RedisTemplate@Resourceprivate RedisTemplate redisTemplate;// 编写一个方法,获取所有的 key@GetMapping("/t3")public String t3() {Set keys = redisTemplate.keys("*");for (Object key : keys) {System.out.println("key -->" + key.toString());}return "OK";}
}

在这里插入图片描述

**当我们将我们的配置的 RedisConfig 类打开,不使用 Spring Boot 默认的配置。则不会出现该空的情况。 **

在这里插入图片描述

在这里插入图片描述

  1. Unrecognized token 'beijing': was expecting ('true', 'false' or 'null')
    看报错,是 jason 转换异常,实际上是因为 redisTemplate 在做数据存储的时候会把存储的内容序列化,所以,redisTemplate 读取的时候也会反序列化,而在 redis 客户端 set 的时候并不会做序列化,因此 set 的进去的值在用 redisTemplate 读的时候就会报类 型转换异常了。

演示:

我们在 Redis 命令行客户端(不通过Java程序的方式),创建 一个 k100的字符串。
然后,我们再通过Java程序获取到该(Redis命令行客户端)所创建的 k100 字符串的数据。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解决这个 com.fasterxml.jackson.core.JsonParseException 也简单,既然我们 Resi 命令行客户端(创建的 对象信息/值)不会被序列化,那我们就不用 Redis 命令行客户端创建对象了,直接就是。我们想用Java程序当中反序化的功能:我们就用 Java程序创建对象/值,同时也用Java程序获取对象的数据。存和取都保持一致,都是在Java程序当中即可(因为Java程序创建的对象会自行序列化的)。这里就不演示了,因为我们上述的所有操作都是:Java程序连接 Redis 创建对象,也是Java程序获取数据。都是没问题的。

3. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

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

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

相关文章

easyExcel使用案例有代码

easyExcel 入门,完成web的excel文件创建和导出 easyExcel官网 EasyExcel 的主要特点如下&#xff1a; 1、高性能&#xff1a;EasyExcel 采用了异步导入导出的方式&#xff0c;并且底层使用 NIO 技术实现&#xff0c;使得其在导入导出大数据量时的性能非常高效。 2、易于使…

【网络安全 | 渗透测试】GraphQL精讲二:发现API漏洞

未经许可,不得转载。 推荐阅读:【网络安全 | 渗透测试】GraphQL精讲一:基础知识 文章目录 GraphQL API 漏洞寻找 GraphQL 端点通用查询常见的端点名称请求方法初步测试利用未清理的参数发现模式信息使用 introspection探测 introspection运行完整的 introspection 查询可视化…

新建菜单项的创建之CmpGetValueListFromCache函数分析

第一部分&#xff1a; PCELL_DATA CmpGetValueListFromCache( IN PHHIVE Hive, IN PCACHED_CHILD_LIST ChildList, OUT BOOLEAN *IndexCached, OUT PHCELL_INDEX ValueListToRelease ) 0: kd> dv KeyControlBlock 0xe1…

神经网络 - 激活函数(ReLU 函数)

一、ReLU函数&#xff1a; ReLU(Rectified Linear Unit&#xff0c;修正线性单元)&#xff0c;也叫 Rectifier 函数 &#xff0c;是目前深度神经网络中经常使用的激活函数&#xff0c;ReLU 实际上是一个斜坡(ramp)函数&#xff0c;其定义为&#xff1a; 也即&#xff1a; Re…

Spring Boot环境配置

一、Java开发环境 确保你的计算机已经安装了Java Development Kit&#xff08;JDK&#xff09;。建议使用JDK 17&#xff0c;可以从Oracle官方网站上下载并安装。 1.下载及配置环境变量 &#xff08;1&#xff09;下载JDK&#xff1a;官网下载 &#xff08;2&#xff09;运…

conda env remove与conda remove

在 Conda 中&#xff0c;删除环境的两种常用命令是 conda env remove --name ryu 和 conda remove -n ryu --all。它们的核心功能相同&#xff08;删除指定名称的 Conda 环境&#xff09;&#xff0c;但存在细微差异。以下是详细解释&#xff1a; 1. 命令对比 命令说明conda e…

6.6.5 SQL访问控制

文章目录 GRANT授予权限REVOKE回收权限 GRANT授予权限 GRANT语句可以给用户授予权限&#xff0c;基本格式是GRANT 权限 TO 用户。在授权时&#xff0c;WITH GRANT OPTION是可选项&#xff0c;有此句话&#xff0c;被授予权限的用户还能把权限赋给其他用户。 REVOKE回收权限 RE…

[免费]SpringBoot公益众筹爱心捐赠系统【论文+源码+SQL脚本】

大家好&#xff0c;我是老师&#xff0c;看到一个不错的SpringBoot公益众筹爱心捐赠系统&#xff0c;分享下哈。 项目介绍 公益捐助平台的发展背景可以追溯到几十年前&#xff0c;当时人们已经开始通过各种渠道进行公益捐助。随着互联网的普及&#xff0c;本文旨在探讨公益事业…

[Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)

[Windows] 极限投屏_正式版 链接&#xff1a;https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future)&#xff1a; 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…

vite+react+ts如何集成redux状态管理工具,实现持久化缓存

1.安装插件 这里的redux-persist--进行数据的持久化缓存&#xff0c;确保页面刷新数据不会丢失 yarn add react-redux^9.2.0 redux-persist^6.0.0 reduxjs/toolkit^2.5.1 2.创建仓库文件夹 在项目的src文件夹下创建名为store的文件夹&#xff0c;里面的具体文件如下 featur…

TrustRAG:通过配置化模块化的检索增强生成(RAG)框架提高生成结果的可靠性和可追溯性

TrustRAG旨在风险感知的信息检索场景中提高生成内容的一致性和可信度。用户可以利用私有语料库构建自己的RAG应用程序&#xff0c;研究库中的RAG组件&#xff0c;并使用定制模块进行实验。论文展示了TrustRAG系统在摘要问答任务中的应用&#xff0c;并通过案例研究验证了其有效…

力扣27.移除元素(双指针)

题目看起来很乱&#xff0c;实际上意思是&#xff1a;把数组中值不等于val的元素放在下标为0,1,2,3......&#xff0c;并且返回数组中值不等于val的元素的个数 方法一&#xff1a;直接判断覆盖 class Solution { public:int removeElement(vector<int>& nums, int…

特辣的海藻!7

特邀嘉宾&#xff1a;滑动窗口~ 题 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 做过的题&#xff0c;再一次做&#xff0c;还是有问题。。。。我把它给解决掉&#xff01; 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 …

not support ClassForName

com.alibaba.fastjson2.JSONException: not support ClassForName : java.lang.String, you can config JSONReader.Feature.SupportClassForName 官方说明中提到默认关闭&#xff0c; 可通过配置开启 JSON.config(JSONReader.Feature.SupportClassForName);

在VSCode 中使用通义灵码最新版详细教程

在 VSCode 中使用通义灵码&#xff1a;最新版详细教程与使用场景 Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款由微软开发的轻量级、功能强大的开源代码编辑器&#xff0c;支持多种编程语言&#xff0c;深受开发者喜爱。而通义灵码&#xff08;TONGYI Lingma…

不要升级,Flutter Debug 在 iOS 18.4 beta 无法运行,提示 mprotect failed: Permission denied

近期如果有开发者的 iOS 真机升级到 18.4 beta&#xff0c;大概率会发现在 debug 运行时会有 Permission denied 的相关错误提示&#xff0c;其实从 log 可以很直观看出来&#xff0c;就是 Dart VM 在初始化时&#xff0c;对内核文件「解释运行&#xff08;JIT&#xff09;」时…

数据结构:反射 和 枚举

目录 一、反射 1、定义 2、反射相关的类 3、Class类 &#xff08;2&#xff09;常用获得类中属性相关的方法&#xff1a; &#xff08;3&#xff09;获得类中注解相关的方法&#xff1a; &#xff08;4&#xff09;获得类中构造器相关的方法&#xff1a; &#xff08;…

基于Electron的应用程序安全测试基础 — 提取和分析.asar文件的案例研究

目录&#xff1a; 4.4. 案例研究 4.4.2. 情况描述 4.4.3. 信息收集 4.4.3.2. 检查隐藏目录&#xff08;点目录&#xff09;的可能性 4.4.3.3. 使用 DB Browser for SQLite 打开 .db 文件 4.4.3.4. 寻找加密算法 4.4.3.5. 找到加密算法 4.4.3.6. 理解加密流程 4.4.3.7. 找到“Ke…

有关Java中的集合(2):Map<T>(底层源码分析)

学习目标 核心掌握Map集合 1.Map<K,V> ● 实现了Map接口的集合对象的集合元素&#xff1a; 成对的值 key-value 键值对 ● key对象是不能重复的. value可以重复。 ● 核心: 根据key获得value。 1.1 层级 public interface Map<K, V> {}1.2 常用方法 1.3 使用方法…

windows电脑上安装llama-factory实现大模型微调

一、安装环境准备 这是官方给的llama-factory安装教程&#xff0c;安装 - LLaMA Factory&#xff0c;上面介绍了linux系统上以及windows系统上如何正确安装。大家依照安装步骤基本能够完成安装&#xff0c;但是可能由于缺少经验或者相关的知识导致启动webUi界面运行相应内容时…