SpringBoot 学习(九)Redis

11. 集成 Redis

11.1 说明

  • SpringBoot 操作数据:sping-data、jpa、jdbc、mongodb、redis

  • SpringBoot 2.× 后,jedis 被替换为 lettuce

    jedis:采用直连,多线程操作不安全,增强安全性需使用 jedis pool 连接池!更像 BIO 模式。

    lettuce:采用 netty,实例可在多个线程中共享,不存在线程不安全的情况!更像 NIO 模式。

11.2 源码分析

@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {// 默认的 RedisTemplate 没有过多的设置,redis 对象都需要序列化// 两个泛型都是 Object,需要强制转换为 <String, Object>RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);return template;
}@Bean
@ConditionalOnMissingBean
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
// 由于 String 是常用类型所以单独提出一个 bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;
}

11.3 测试

(1) 导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

(2) 配置 redis

# application.properties
spring.redis.host=127.0.0.1
spring.redis.port=6379

(3) 测试

● 传输字符串
@SpringBootTest
class RedisApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid contextLoads() {/*** redisTemplate 可操作不同的数据类型,可完成基本的操作,如 CRUD* opsForValue 字符串* opsForList* opsForSet* opsForHash* opsForZSet* opsForGeo* opsForHyperLogLog** 获取 redis 连接对象* RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();* connection.flushDb();* connection.flushAll() ;*/redisTemplate.opsForValue().set("myKey", "why");System.out.println("myKey: " + redisTemplate.opsForValue().get("myKey"));}
}

在这里插入图片描述

在这里插入图片描述

● 传输对象
// 实体类
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private String name;private String password;
}
@Test
void test() throws JsonProcessingException {User user = new User("why", "123");redisTemplate.opsForValue().set("user", user);System.out.println(redisTemplate.opsForValue().get("user"));
}

在这里插入图片描述

● 传输 JSON
@Test
void test() throws JsonProcessingException {User user = new User("why", "123");// 将 Object 转换为 JsonString jsonUser = new ObjectMapper().writeValueAsString(user);redisTemplate.opsForValue().set("user", jsonUser);System.out.println(redisTemplate.opsForValue().get("user"));
}

在这里插入图片描述

在这里插入图片描述

● 传输序列化对象
// 序列化的实体类
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {private String name;private String password;
}
@Test
void test() throws JsonProcessingException {User user = new User("why", "123");redisTemplate.opsForValue().set("user", user);System.out.println(redisTemplate.opsForValue().get("user"));
}

在这里插入图片描述

在这里插入图片描述

● Redis 用户端乱码问题

在这里插入图片描述

在这里插入图片描述

(4) 自定义配置类

@Configuration
public class RedisConfig {// 自定义 redisTemplate, 修改 RedisAutoConfiguration 中的 Bean@Bean@SuppressWarnings("all")public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {// <String, Object> 类型便于开发RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// Json 序列化配置Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);// String 序列化配置StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();// key 采用 string 的序列化方式template.setKeySerializer(stringRedisSerializer);// hash 的 key 采用 string 的序列化方式template.setHashKeySerializer(stringRedisSerializer);// value 采用 jackson 的序列化方式template.setValueSerializer(jackson2JsonRedisSerializer);// hash 的 value 采用 jackson 的序列化方式template.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}
}
@Test
void test() throws JsonProcessingException {User user = new User("why", "123");redisTemplate.opsForValue().set("user", user);System.out.println(redisTemplate.opsForValue().get("user"));
}

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Java --- MySQL8之索引优化与查询优化

目录 一、索引失效场景 1.1、全值匹配 1.2、最佳左前缀规则 1.3、主键插入顺序 1.4、计算、函数、类型转换(自动或手动)导致索引失效 1.5、类型转换导致索引失效 1.6、范围条件右边的列索引失效 1.7、不等于(! 或者<>)索引失效 1.8、is null可以使用索引&…

vue3中的watch可能是比watchEffect更好的选择

vue3中的watch可能是比watchEffect更好的选择 vue 最强大的功能之一是能够根据基本数据的变化来执行响应式副作用。为此&#xff0c;vue3提供两个方法&#xff1a;watch 和 watchEffect 。虽然两个方法都可以监控响应式数据的变化&#xff0c;但他们有不同的使用方式和行为。本…

Go语言中的自定义函数类型

函数类型的基本概念 在Go语言中&#xff0c;函数类型是一种将函数作为值的数据类型。与其他类型一样&#xff0c;函数类型可以被声明、赋值给变量&#xff0c;作为参数传递和作为返回值返回。通过函数类型&#xff0c;我们可以将函数看作一种可执行的对象&#xff0c;对其进行…

asp.net企业生产管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 企业生产管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 二、功能介绍 (1)用户管理&…

Spring学习笔记11 GoF代理模式

Spring学习笔记10 JdbcTemplate_biubiubiu0706的博客-CSDN博客 新建个maven模块 static-proxy 演示静态代理 订单接口 测试 需求:统计每个业务方法的耗时 package com.example.proxy.service;/*** author hrui* date 2023/9/25 8:42*/ public class OrderServiceImpl implem…

分布式网络在移动医疗场景中的应用

随着医疗信息化建设实践的深入&#xff0c;越来越多的医疗机构开始借助网络信息技术改善其运营及管理模式&#xff0c;为患者提供更高质量、更高效率、更加安全体贴的医疗服务。移动医疗便是在此背景下产生的新业务需求。 常见的移动医疗场景 住院部&#xff1a;移动查房、智…

Java案例:判断质数

需求&#xff1a;键盘录入一个数&#xff0c;判断是否是质数 分析&#xff1a;从2到number-1开始循环&#xff0c;判断是否有数字能被number整除 import java.util.Scanner;public class demo {public static void main(String[] args){Scanner sc new Scanner(System.in);S…

使用JavaScript将数字格式化成千分位的n种方法

1,使用数组方法: 1) 数字转字符串,字符串按照小数点.分割 2) 整数部分拆分成字符串数组,并倒叙 3) 遍历, 按照每三位添加逗号,号 4) 拼接整数部分小数部分 function format_width_array(number) { // 将数字转换为千分位字符串const arr String(number).split(.);// 整数…

代码阅读分析神器-Scitools Understand

这里写目录标题 前言概要功能介绍1.代码统计2.图形化分析3.代码检查 使用方法下载及使用 前言 作为一名程序员&#xff0c;阅读代码是一个必须要拥有的能力&#xff0c;但无奈很多代码逻辑嵌套非常多&#xff0c;看起来非常吃力&#xff0c;看了那段逻辑就忘记了刚才的逻辑&am…

SpringBoot 集成 AKKA

文章目录 应用场景与 SpringBoot 集成示例 应用场景 AKKA 是一个用于构建高并发、分布式和容错应用程序的开源框架。它基于Actor模型&#xff0c;提供了强大的并发抽象和工具&#xff0c;适用于各种业务场景。以下是一些使用AKKA框架的常见业务场景的示例&#xff1a; 实时数据…

WordPress还原重置插件WP Reset 教程!

这是一篇完整的 WordPress 还原教程&#xff0c;我们将使用一款插件&#xff0c;快速重置整个 WordPress 网站。 有时在安装不同主题、网站插件后&#xff0c;可能会导致程序码彼此的冲突&#xff0c;而让网站出现跑版、错误等 ..&#xff0c;这时直接重新来过可能反而比较快一…

大模型从入门到应用——LangChain:代理(Agents)-[代理执行器(Agent Executor):处理解析错误、访问中间步骤和限制最大迭代次数]

分类目录&#xff1a;《大模型从入门到应用》总目录 LangChain系列文章&#xff1a; 基础知识快速入门 安装与环境配置链&#xff08;Chains&#xff09;、代理&#xff08;Agent:&#xff09;和记忆&#xff08;Memory&#xff09;快速开发聊天模型 模型&#xff08;Models&…

AM@映射@函数@反函数@复合函数

文章目录 abstract直接定义函数的定义反函数定义复合函数定义 基于映射定义映射像原像定义域值域小结例满射单射&#x1f47a;双射映射的其他称呼 逆映射复合映射映射间可复合条件复合顺序 函数基于映射的函数相关定义函数函数的记法及其含义函数值 f ( x ) f(x) f(x)函数关系 …

使用Http Interface客户端解析text/html类型参数

前言 Spring6和Spring Boot3的正式发布也有一段时间了&#xff0c;最低支持的java版本也是直接跳到了17。而且最近java21也出来了&#xff0c;作为一个javaer&#xff0c;你不会还在坚守java8吧&#xff1f; Http Interface是Spring6新推出的一个声明式http客户端&#xff0c;…

命令执行(rce)

1.命令与代码执行原理 命令执行原理 参数给变量未经过滤&#xff0c;直接使用了不安全的函数处理了变量 127.0.0.1&&ipconfig 有漏洞 常用的函数 assert,system,exec,shell_exec, eval,(反单引号&#xff09; 代码执行原理 参数给变量未经过滤&#xff…

56块钱搭建一个ubuntu 2204 linux 服务器

硬件pdd上淘的一个linux小盒子 应该是以前的机顶盒之类的 实物图如下 今天刚收到小盒子 找了个显示器 键盘 查到小盒子上通电 本来指示灯应该亮的 老板刷机之后 led灯都不亮了 不知道有没有开机 我还以为坏了 刚开始 然后直接连到显示器上 有输出 那说明没问题…

【C语言】进阶——结构体+枚举+联合

①前言&#xff1a; 在之前【C语言】初阶——结构体 &#xff0c;简单介绍了结构体。而C语言中结构体的内容还有更深层次的内容。 一.结构体 结构体(struct)是由一系列具有相同类型或不同类型的数据项构成的数据集合&#xff0c;这些数据项称为结构体的成员。 1.结构体的声明 …

Ubuntu 安装PostgreSQL

网上有各种版本的&#xff0c;也可以去官网看官方的文档。我是下载的PostgreSQL-11.4版本的。找到以后直接复制网上的压缩包链接就可以。 $ mkdir /opt/postgresql && cd /opt/postgresql $ wget https://ftp.postgresql.org/pub/source/v11.4/postgresql-11.4.tar.gz…

智算引领·创新未来 | 2023紫光展锐泛物联网终端生态论坛成功举办

9月21日&#xff0c;紫光展锐在深圳成功举办2023泛物联网终端生态论坛。论坛以“智算引领创新未来”为主题&#xff0c;吸引了来自信通院、中国联通、中国移动、中国电信、金融机构、终端厂商、模组厂商等行业各领域三百多位精英翘楚汇聚一堂&#xff0c;探讨在连接、算力驱动下…

数据结构学习笔记——查找算法中的树形查找(平衡二叉树)

目录 一、平衡二叉树的定义二、平衡因子三、平衡二叉树的插入和构造&#xff08;一&#xff09;LL型旋转&#xff08;二&#xff09;LR型旋转&#xff08;三&#xff09;RR型旋转&#xff08;四&#xff09;RL型旋转 四、平衡二叉树的删除&#xff08;一&#xff09;叶子结点&a…