Spring Boot 整合Redisson配置篇
摘要:介绍在Spring Boot 中,如何整合Redisson。
综述
Redisson是Redis官方推荐的Java版的Redis客户端。它提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。
小编在《Spring Boot 整合Jedis连接Redis和简单使用》中,先介绍如何在Windows系统安装Redis环境,然后在Spring Boot 项目中集成 Jedis,最后简单地做了一个使用Jedis操作redis连接池的测试用例。本文介绍如何在Spring Boot项目中集成Redisson。
引入Maven依赖
Spring Boot版本: 2.5.x。
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.17.1</version>
</dependency>
集群模式除了适用于Redis集群环境,也适用于任何云计算服务商提供的集群模式,例如AWS ElastiCache集群版、Azure Redis Cache和阿里云(Aliyun)的云数据库Redis版。
YAML文件配置集群
在YAML文件中添加如下集群化配置:
spring:
redis:
cluster:
nodeAddresses: [
"redis://127.0.0.1:7005",
"redis://127.0.0.1:7004",
"redis://127.0.0.1:7003",
"redis://127.0.0.1:7002",
"redis://127.0.0.1:7001",
"redis://127.0.0.1:7000"
]
password: 123456
single:
address: "redis://127.0.0.1:6379"
database: 7
配置参数读取类
先创建一个读取属性的类,通过注解@ConfigurationProperties读取YAML中定义的属性:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.List;
@Data
@Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedisConfigProperties implements Serializable {
private static final long serialVersionUID = 8815222005846355408L;
private String password;
private cluster cluster;
private Single single;
public static class cluster {
private List<String> nodeAddresses;
public List<String> getNodeAddresses() {
return nodeAddresses;
}
public void setNodeAddresses(List<String> nodeAddresses) {
this.nodeAddresses = nodeAddresses;
}
@Override
public String toString() {
return "{" +
"nodeAddresses=" + nodeAddresses +
'}';
}
}
public static class Single {
private String address;
public Integer database;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getDatabase() {
return database;
}
public void setDatabase(Integer database) {
this.database = database;
}
@Override
public String toString() {
return "Single{" +
"address='" + address + '\'' +
", database=" + database +
'}';
}
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public RedisConfigProperties.cluster getCluster() {
return cluster;
}
public void setCluster(RedisConfigProperties.cluster cluster) {
this.cluster = cluster;
}
}
@ConfigurationProperties(prefix = "spring.redis")用于限制上述配置类只读取redis属性。
Redisson 客户端配置
所有对Redisson的使用都是通过RedissonClient,调用如下方法 getRedissonClient() 创建出RedissonClient实例:
import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.client.codec.StringCodec;
import org.redisson.config.ClusterServersConfig;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.redisson.config.TransportMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.util.List;
@Slf4j
@Configuration
public class MyRedissonConfig {
@Autowired(required = false)
private RedisConfigProperties redisConfigProperties;
/**
* 配置redisson集群
* @return
*/
@Bean(destroyMethod = "shutdown")
public RedissonClient getRedissonClient() {
List<String> clusterNodes = redisConfigProperties.getCluster().getNodeAddresses();
log.info("【Redisson 配置】:{}", redisConfigProperties);
Config config = new Config();
//对象编码选择纯字符串编码
config.setCodec(StringCodec.INSTANCE);
ClusterServersConfig clusterServersConfig = config.useClusterServers()
.addNodeAddress(clusterNodes.toArray(new String[clusterNodes.size()]));
//设置密码
clusterServersConfig.setPassword(redisConfigProperties.getPassword());
//redis连接心跳检测,防止一段时间过后,与redis的连接断开
clusterServersConfig.setPingConnectionInterval(32000);
return Redisson.create(config);
}
/**
* 单机配置
* @return
* @throws IOException
*/
/* @Bean(destroyMethod = "shutdown")
RedissonClient singleRedisson() throws IOException {
log.info("【Redisson 配置】:{}", redisConfigProperties);
// 创建配置
Config config = new Config();
config.setCodec(StringCodec.INSTANCE);
config.setTransportMode(TransportMode.NIO);
SingleServerConfig singleServerConfig = config.useSingleServer()
.setAddress(redisConfigProperties.getSingle().getAddress())
.setDatabase(redisConfigProperties.getSingle().getDatabase());
return Redisson.create(config);
}*/
}
得到redisson对象,之后的分布式锁由redisson对象操作。节点地址nodeAddress一般为多个,这些配置信息放在yml中。java bean中已经给所有需要配置的属性写上了官方默认的初始值,你如果不考虑更改默认值,实际上只需要在application.properties添加redis连接地址就好:
#redis 单机地址
spring.redisson.address=192.168.1.204:6379
配置了redisson的信息之后,就可以在项目中使用@Autowired注入org.redisson.api.RedissonClient(redisson提供的默认实现类是org.redisson.Redisson,且redisson-spring-boot-starter会自动往IOC容器中注册org.redisson.Redisson)。启动项目,在控制台将打印配置信息:
2022-05-03 10:51:32.102 [main] INFO -c.c.i.m.xxx.MyRedissonConfig - 【Redisson 配置】:RedisConfigProperties(password=123456, cluster={nodeAddresses=[redis://127.0.0.1:7005, redis://127.0.0.1:7004, redis://127.0.0.1:7003, redis://127.0.0.1:7002, redis://127.0.0.1:7001, redis://127.0.0.1:7000]}, single=Single{address='redis://127.0.0.1:6379', database=7})
由此可见,配置类已经成功加载YAML中的配置信息。
知行合一
整合Redisson后,可用的 Spring Beans包括如下几个:
- RedissonClient
- RedissonRxClient
- RedissonReactiveClient
- RedisTemplate
- ReactiveRedisTemplate
下面提供一个使用Bean RedissonClient操作String的示例:
@Autowired
private RedissonClient redissonClient;
private static void demo() {
RBucket<Object> bucket = redissonClient.getBucket("string-demo");
bucket.set("hello");
System.out.println(bucket.get());
}
结束语
本文主要为大家介绍了在spring boot中,集成redisson的最佳实践。有需要的朋友可以拿来即用,希望能够对大家有所帮助。
“我亦无他,惟手熟尔。”合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!祝各位早日升职加薪!
Reference
- https://www.bookstack.cn/read/redisson-wiki-zh/spilt.4.2.-配置方法.md
- https://www.cnblogs.com/east7/p/14454061.html
- https://github.com/redisson/redisson/tree/master/redisson-spring-boot-starter#spring-boot-starter
Spring Boot 整合Redisson配置篇的更多相关文章
- Spring Boot整合Mybatis配置详解
首先,你得有个Spring Boot项目. 平时开发常用的repository包在mybatis里被替换成了mapper. 配置: 1.引入依赖: <dependency> <gro ...
- Spring Boot整合Druid配置多数据源
Druid是阿里开发的数据库连接池,功能强大,号称Java语言中最好的数据库连接池.本文主要介绍Srping Boot下用Druid配置多个数据源,demo环境为:Spring Boot 2.1.4. ...
- Spring Boot 整合 Druid && 配置数据源监控
1. 导入 Druid 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid& ...
- spring boot实战(第十三篇)自动配置原理分析
前言 spring Boot中引入了自动配置,让开发者利用起来更加的简便.快捷,本篇讲利用RabbitMQ的自动配置为例讲分析下Spring Boot中的自动配置原理. 在上一篇末尾讲述了Spring ...
- spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】
最近做了一个spring boot 整合 quartz 实现 动态定时任务配置,在集群环境下运行的 任务.能够对定时任务,动态的进行增删改查,界面效果图如下: 1. 在项目中引入jar 2. 将需要 ...
- Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?
Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...
- 太妙了!Spring boot 整合 Mybatis Druid,还能配置监控?
Spring boot 整合 Mybatis Druid并配置监控 添加依赖 <!--druid--> <dependency> <groupId>com.alib ...
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...
- spring boot 系列之四:spring boot 整合JPA
上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...
随机推荐
- 三分钟教学:手把手教你实现Arduino发布第三方库
三分钟教学:手把手教你实现Arduino发布第三方库 原文链接: 手把手教你实现Arduino发布第三方库 摘要 Arduino 发布第三方库的流程包括:构建库的基本框架后将其打包并上传至 GitHu ...
- gorm中使用乐观锁
乐观锁简介 乐观锁(又称乐观并发控制)是一种常见的数据库并发控制策略. 乐观并发控制多数用于数据竞争(data race)不大.冲突较少的环境中,这种环境中,偶尔回滚事务的成本会低于读取数据时锁定数据 ...
- nginx 部署vue http、https
nignx配置文件 server { listen 80; server_name your_domain.com; return 301 https://$server_name$request_u ...
- 对于 emlog pro 目前 avatar 头像不显示的问题,暂时使用这个方法解决
avatar 头像 cdn 不稳定,目前 emlog 官方还没有放出更新包.因此,现在使用 JS 的方式暂时解决. 代码如下 <script> const avaUrl = 'https: ...
- base64编码与一般的ASCII码和二进制编码有什么不同?base64详解
在密码学实践中,经常会用到Base64编码.比如大名鼎鼎的密码学挑战题"Matasano Crypto Challenges"的第一集合的第一题,就是要求把一个Hex编码的字符串转 ...
- HashMap-线程不安全的原因
前言 HashMap线程安全的问题,在各大面试中都会被问到,属于常考热点题目.虽然大部分读者都了解它不是线程安全的,但是再深入一些,问它为什么不是线程安全的,仔细说说原理,用图画出一种非线程安全的情况 ...
- 【Python】面向对象版学员管理系统
面向对象版学员管理系统 一. 系统需求 使用面向对象编程思想完成学员管理系统的开发,具体如下: 系统要求:学员数据存储在文件中 系统功能:添加学员.删除学员.修改学员信息.查询学员信息.显示所有学员信 ...
- 【SpringMVC】RESTful CRUD
RESTful CRUD REST:即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方 ...
- 用户代码未处理 SqlException
场景重现 客户端连接 Sql Server 2008 R2 数据库出现如下错误: 错误原因 后发现是数据库服务是手动启动的,服务器更新重启后,SQL Server服务没自动启动... 解决办法 把SQ ...
- ASP.NET Core 静态资源的打包与压缩
以 Visual Studio Community 2017 15.5.1 为例 配置文件 bundleconfig.json 新建一个AspNetCore MVC项目,项目中会有一个bundleco ...