Spring-Boot整合Redis【随记】

基于spring boot整合.

1 引入依赖

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

2 编写redis的配置文件

application.yml进行编写.

属性:

  • url

  • port

  • password

spring:application:name: spring-boot-redis-demo
​redis:database: 0 # 默认选择的数据库,第0个库.host:  # 修改成你的ip地址.port: 6379 # 端口事情配置password: tingyiwa # 密码配置.
​# 如果使用的是云服务, 你一定开放一下访问端口. 一般: 阿里云/华为云 --> 安全组,把redis端口号# 放行一下.如果用的是腾讯云 --> 防火墙. 将6379 添加放行列表当中.

3 传统方式

jedis, 之前传统的操作redis的方式.

spring boot –> 封装一切东西. —> RedisTemplate, Redis操作模板. 「封装了redis的所有的操作.」

类似的操作,在spring boot当中随处可以见: JdbcTempalte, ….

现在, 我们使用RedisTempalte, 由spring boot给我们封装好的工具类。用起来特别舒服。类似的:ElasticsearchTempalte, KafkaTemplate, RabbitMQTemplate, JdbcTempalte. ……

4 对ReidsTemplate进行一下配置

把RedisTemplate放到容器当中. 写一个配置类.通过@Bean的方式.

这里默认使用的是Lettuce客户端.

以下主要是针对string类型进行序列化配置.

package com.tingyi.configs;
​
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
​
/*** @author tingyi*/
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);
​ObjectMapper objectMapper = new ObjectMapper();// 使用Jackson2JsonRedisSerializer替换默认序列化;Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
​objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
​
​// 此项必须配置,否则会报java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXXobjectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
​// GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);// setVisibility: 允许更改底层VisibilityChecker的配置,以更改自动检测的属性类型的详细信息// 这个代码这将使所有成员字段无需进一步注释即可序列化,而不仅仅是公共字段;objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
​// 设置key和value的序列化规则redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
​// 设置hashKey和hashValue的序列化规则redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
​// 设置支持事务redisTemplate.setEnableTransactionSupport(true);redisTemplate.afterPropertiesSet();
​return redisTemplate;}
}

5 单元测试

package com.tingyi;
​
import com.tingyi.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
​
import java.util.concurrent.TimeUnit;
​
/*** spring boot单元测试的注解.这里可以注入其它的对象了.*/
@SpringBootTest
class Qf37SpringBootRedisDemo01ApplicationTests {
​@Autowiredprivate RedisTemplate<String, Object> redisTemplate;
​/*** 操作String类型的单元测试.*/@Testpublic void redisStringTest(){redisTemplate.opsForValue().set("username", "齐天大圣", 120, TimeUnit.SECONDS);}
​@Testpublic void redisObjectTest(){User user = new User();user.setUsername("听忆");user.setSex("男");long id = 1024L;user.setId(id);// redisTemplate.opsForHash().put("users", "user:" + id , user);redisTemplate.opsForValue().set("user:" + id, user, 300, TimeUnit.SECONDS);}
}
​

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

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

相关文章

Django网站开发技术的应用(理论篇)

概述 Django提供了许多功能。比如在安全方面上Django提供了csrf防护机制以防止跨域脚本攻击、使用身份验证机制以防止未授权的登录等等。在数据库方面上Django提供了orm&#xff08;面向对象的数据库访问技术&#xff09;方便了对数据库的操作。此外Django还提供自定义模板、缓…

掌握Three.js:学习路线,成为3D可视化开发的高手!

学习Three.js可以按照以下路线进行&#xff1a; 基础知识&#xff1a; 首先要了解基本的Web开发知识&#xff0c;包括HTML、CSS和JavaScript。如果对这些知识已经比较熟悉&#xff0c;可以直接进入下一步。 Three.js文档&#xff1a; 阅读Three.js官方文档是学习的第一步。官…

(更新)2004-2022年 全国各省环境污染治理投资额数据

环境污染治理投资额是衡量一个国家或地区在环境保护和污染治理方面投入力度的重要经济指标。它体现了政府和企业在改善环境质量、推动绿色发展方面的共同努力&#xff0c;同时也是环境规制政策执行强度的一个反映。 数据简介 环境污染治理投资额涵盖了以下几个方面&#xff1…

APP软件系统的开发流程

APP软件系统的开发是一个复杂的过程&#xff0c;需要多方面的知识和技能。建议选择专业的开发团队进行开发&#xff0c;以确保APP的质量和成功。APP软件系统的开发流程通常包括以下几个阶段。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合…

react获取use声明的变量的值

在React中&#xff0c;使用useState Hook 可以让你在函数组件中添加状态。useState返回一个状态变量&#xff08;当前的值&#xff09;和一个用于更新这个状态变量的函数。要获取useState中的值&#xff0c;你只需要直接使用这个状态变量即可。 下面是一个简单的例子&#xff…

ONLYOFFICE 桌面编辑器 8.1全新发布,更强大的编辑工具

ONLYOFFICE 8.1 一、什么是ONLYOFFICE&#xff1f;二、怎么安装 ONLYOFFICE 8.1三、主要功能介绍四、总结 一、什么是ONLYOFFICE&#xff1f; ONLYOFFICE 是一款功能强大的办公套件&#xff0c;旨在提供全面的文档、表格和演示文稿编辑解决方案。它集成了文字处理、电子表格和演…

基于Hexo+GITHUB搭建个人博客网站(PS:不用域名,不用服务器,重点是免费,小白也能轻松掌握)

✌ 作者名字&#xff1a;高峰君主 &#x1f4eb; 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f4ac; 人生格言&#xff1a;没有我不会的语言&#xff0c;没有你过不去的坎儿。&#x1f4ac; &#x1f5…

TMGM外汇:新兴市场的崛起,未来的经济引擎吗?

随着全球经济版图的不断变化&#xff0c;新兴市场逐渐成为国际投资的热点。从亚地区的中国和印度&#xff0c;到拉丁美洲的巴西和墨西哥&#xff0c;再到非洲的尼日利亚和南非&#xff0c;新兴市场的经济活力和潜力引起了全世界的关注。这些市场不仅人口众多&#xff0c;而且在…

Go 语言高频面试题

Go 初级面试题及详细解答 1. 什么是 Go 语言&#xff1f;它的特点是什么&#xff1f; 解答&#xff1a; Go&#xff08;又称 Golang&#xff09;是一门开源编程语言&#xff0c;由Google开发&#xff0c;并于2009年首次公开发布。它具有内存安全、并发支持、垃圾回收等特性&a…

win11 修改用户名

step1: 打开设置 step2: 如下图&#xff0c;点击“重命名”修改即可&#xff1b; 看似简单的问题&#xff0c;但若直接搜索查找&#xff0c;很难找到简单的操作&#xff0c;苦笑。。。

超炫酷, 不用学前端也能自己做网页!这个Python库,3分钟内复刻GPT WEB应用

大家好&#xff0c;我是海鸽。 今天&#xff0c;我要和大家分享如何将请求 GPT 的案例&#xff0c;快速“复刻”成 GPT 网页版。这不仅简单&#xff0c;而且对于我们这些后端开发者来说&#xff0c;简直是福音&#xff01; 先睹为快 看看这个界面&#xff0c;是不是感觉很熟…

php,python AES/CBC/PKCS7Padding加密解密 base64/hex编码

1. python版本 import base64 from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpadclass AESUtilCBC:def __init__(self, key, iv):self.key key.encode(utf-8)self.iv iv.encode(utf-8)self.pad_length AES.block_sizedef encrypt(self, data):try…

如何在PHP中实现继承?

如何在PHP中实现继承&#xff1f; 引言 在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;继承是一种强大的特性&#xff0c;它允许一个类&#xff08;称为子类或派生类&#xff09;继承另一个类&#xff08;称为基类或父类&#xff09;的属性和方法。PHP作为一种支持…

flutter是app跨平台最优解吗?

哈喽&#xff0c;我是老刘 最近在知乎上看到这样一个问题 我们先来解释一下问题中碰到的几个现象的可能原因&#xff0c;然后聊聊跨平台的最优解问题 问题解释 1、跟手、丝滑问题 这个问题其实很多人是有误解的&#xff0c;觉得原生的就丝滑跟手 其实不是这样的 我在做Flut…

kubernetes yaml 资源清单

1 YAML语言 YAML 语言的设计目标&#xff0c;就是方便人类读写。它实质上是一种通用的数据串行化格式。 1.1 基本语法规则 大小写敏感使用缩进表示层级关系缩进时不允许使用Tab键&#xff0c;只允许使用空格。缩进的空格数目不重要&#xff0c;只要相同层级的元素左侧对齐即…

『 Linux 』 进程间通信 - 匿名管道 (万字)

文章目录 什么是管道匿名管道的直接原理pipe( )系统调用接口匿名管道代码示例匿名管道的特征总结 什么是管道 管道(Pipe) 是一种基本的进程间通信(IPC)机制,允许一个进程与另一个进程之间进行数据传输; 管道工作方式类似于生活中的水管因此命名为管道,数据从一端流入另一段流出…

NSSCTF-Web题目16

目录 [GDOUCTF 2023]受不了一点 1、题目 2、知识点 3、思路 [UUCTF 2022 新生赛]ez_upload 1、题目 2、知识点 3、思路 [GDOUCTF 2023]受不了一点 1、题目 2、知识点 php代码审计、数组绕过、弱比较绕过 3、思路 打开题目&#xff0c;出现代码&#xff0c;我们进行代…

【STM32】江科大STM32学习笔记汇总(已完结)

00. 目录 文章目录 00. 目录01. STM32学习笔记汇总02. 相关资料下载03. 打赏04. 附录 01. STM32学习笔记汇总 【STM32】STM32学习笔记-课程简介(01) 【STM32】STM32学习笔记-STM32简介(02) 【STM32】STM32学习笔记-软件安装(03) 【STM32】STM32学习笔记-新建工程(04) 【ST…

VUE div的右上角的角标/标签

一、效果图 二、代码 <div class"comp-overview"><div class"overview-item" v-for"(item,index) in overviewInfoList" :key"index"><div class"angle_mark"><span>{{item.label}}</span>&…

Java中的数据库连接池选择与优化

Java中的数据库连接池选择与优化 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 在Java应用程序中&#xff0c;数据库连接池扮演着至关重要的角色。…