百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

SpringBoot系列:7、整合Redis

bigegpt 2024-11-21 10:40 5 浏览

关于Redis的介绍、安装不在本文做介绍,可以参考Redis单机版:https://www.toutiao.com/i6750812271389180429

1、SpringBoot集成Redis

1.1 SpringBoot缓存支持

SpringBoot提供了强大的基于注解的缓存支持,通过注解配置的方式低侵入式的原有的Spring应用增加缓存功能,提升系统数据的访问性能。SpringBoot提供了多个CacheManager的实现,缓存配置类如下图所示:

1.2 新建项目

新建一个springboot-redis工程,并引入相关依赖,默认情况下spring-boot-starter-data-redis使用的是Redis工具是Lettuce,本文使用Jedis,所以需要排除Lettuce并引入Jedis,如下图所示:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-redis</artifactId>
 <exclusions>
 <exclusion>
 <groupId>io.lettuce</groupId>
 <artifactId>lettuce-core</artifactId>
 </exclusion>
 </exclusions>
</dependency>
<dependency>
 <groupId>redis.clients</groupId>
 <artifactId>jedis</artifactId>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

1.3 配置Redis

添加配置缓存,在application.yml文件中添加如下配置信息:

spring:
 redis:
 # redis默认数据为0
 database: 0
 # 服务器地址,默认为localhost
 host: 172.16.6.31
 # 端口,默认为6379
 port: 6379
 # 密码,默认为空
 password: 123456
 jedis:
 pool:
 # Redis连接池的最大连接数
 max-active: 8
 # Redis连接池中的最大空闲连接数
 max-idle: 8
 # 连接池的最大阻塞等待时间,默认为-1,表示没有限制
 max-wait: -1ms
 # 连接池最小连接空闲数
 min-idle: 0

SpringBoot的自动配置类中提供了RedisAutoConfiguration进行Redis的配置,源码如下:

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
 @Bean
 @ConditionalOnMissingBean(name = "redisTemplate")
 public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
 throws UnknownHostException {
 RedisTemplate<Object, Object> template = new RedisTemplate<>();
 template.setConnectionFactory(redisConnectionFactory);
 return template;
 }
 @Bean
 @ConditionalOnMissingBean
 public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
 throws UnknownHostException {
 StringRedisTemplate template = new StringRedisTemplate();
 template.setConnectionFactory(redisConnectionFactory);
 return template;
 }
}

从上 面这段源码可以看出,application.yml中的配置信息被注入到RedisProperties.class中,如果没有开发时自己没有提供RedisTemplate或StringRedisTemplate实例,SpringBoot默认会提供这俩个实例,这俩个实例提供了Redis的基本操作方法。

  • RedisTemplate:采用的序列化方案是JdkSerializationRedisSerializer,可以用来操作对象
  • StringRedisTemplate:是RedisTemplate的子类,key和value都是字符串,采用的序列化方案是StringRedisSerializer
  • 二者都是通过opsForValue、opsForZSet、opsForSet等方法,首先先获取一个操作对象,再使用该操作对象来完成数据的读写

1.4 新建一个实体类

User.java

public class User implements Serializable {
 private Long id;
 private String name;
 private Integer age;
 // 省略getter、setter、toString方法
}

1.5 新建单元测试

SpringbootRedisApplicationTests.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootRedisApplicationTests {
 @Autowired
 RedisTemplate redisTemplate;
 @Autowired
 StringRedisTemplate stringRedisTemplate;
 @Test
 public void contextLoads() {
 ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
 operations.set("name", "小H");
 System.out.println("获取name:" + operations.get("name"));
 ValueOperations operations1 = redisTemplate.opsForValue();
 User user = new User();
 user.setId(1L);
 user.setName("xiaoH");
 user.setAge(29);
 operations1.set("user", user);
 User user1 = (User) operations1.get("user");
 System.out.println("获取用户信息:" + user1);
 }
}

1.6 验证

执行单元测试,结果如下:

本文由博客一文多发平台 https://openwrite.cn?from=article_bottom 发布!

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...