Spring Boot2.x集成Redis(两种方式)

前言:

本文介绍下Spring Boot2.x版本下使用Redis的方式,较1.x版有些许改变。本文介绍两种方式来配置,第一种是快速配置,1分钟完成配置。第二种方式,支持定义定义多个Redis实例,可同时操作不同的RedisDB,不会因为线程不安全紊乱,读写错数据库。你可以根据自己需求,选择如何集成Redis。

方式一:Spring Boot2.x1分钟快速集成Redis方式

1.引入Maven依赖

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

2.注入RedisTemplate使用

import org.springframework.data.redis.core.RedisTemplate;

@Component
public class HelloClass {
@Autowired
private RedisTemplate<String, String> redisTemplate;

private void hello(){
    Object object = redisTemplate.opsForHash().get("你的Key", "你的HashKey");
    } 
}

方式二:通过配置文件配置Redis

此种方式的优点是可以详情配置Redis

1.引入Maven依赖

需要添加两个依赖,排除掉io.lettuce,并且添加Jedis,2.x版以后,spring boot起步依赖中的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>

2.配置文件增加Redis相关参数

# 地址、密码、端口、默认数据库
spring.redis.host=10.10.15.1
spring.redis.password=123456
spring.redis.port=6379
spring.redis.database=0
#最大连接数
spring.redis.pool.max-active=20
#最大空闲
spring.redis.pool.max-idle=20
#最小空闲
spring.redis.pool.min-idle=0
#最大阻塞等待时间(负数表示没限制)
spring.redis.pool.max-wait=-1

3.创建Redis配置类,配置多个RedisDB实例

Redis可以配置单机版、哨兵版、集群,你需要确定你的服务器是单机版的主从配置,还是集群模式。 选择模式不同,模式配置类也不一样,如单机版配置类是RedisStandaloneConfiguration。在此以单机版为例展示:

本步骤意在实现多个Redis实例(代码中的database0,database1),每一个实例对应一个RedisDB数据库,这样当不同人使用不同的实例,就不会出现数据读写串了库的问题。因为Redis是默认是单例的,我们来手动做出多个实例,每个实例对应一个库,这样就可以避免线程不安全问题了。

package com.hello.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;

import redis.clients.jedis.JedisPoolConfig;

/**
 * Redis数据源配置类
 * @Title
 * @description
 * @author 五道口
 *
 */
@Configuration
public class RedisConfig {

	@Value("${spring.redis.host}")
	private String hostName;
	@Value("${spring.redis.port}")
	private int port;
	@Value("${spring.redis.password}")
	private String password;
	@Value("${spring.redis.pool.max-idle}")
	private int maxIdle;
	@Value("${spring.redis.pool.max-active}")
	private int maxTotal;
	@Value("${spring.redis.pool.max-wait}")
	private long maxWaitMillis;

	/**
	 *  创建Redis DB0对应的实例
	 */
	@Bean
	public StringRedisTemplate database0() {
		StringRedisTemplate temple = new StringRedisTemplate();
		temple.setConnectionFactory(jedisClientFactory());
		return temple;
	}
	
		/**
	 *  创建Redis DB1对应的实例
	 */
	@Bean
	public StringRedisTemplate database1() {
		StringRedisTemplate temple = new StringRedisTemplate();
		temple.setConnectionFactory(jedisClientFactory());
		return temple;
	}

	@Bean
	public JedisConnectionFactory jedisClientFactory() {
		// 单机版配置
		RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
		// 设置redis地址
		redisStandaloneConfiguration.setHostName(hostName);
		// 设置默认使用的数据库
		redisStandaloneConfiguration.setDatabase(0);
		// 设置密码
		redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
		// 设置端口号
		redisStandaloneConfiguration.setPort(port);
		// 获得默认的连接池构造器
		JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jedisConf = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration
				.builder();
		// 指定jedisPoolConifig来修改默认配置
		jedisConf.poolConfig(jedisPoolConfig());
		JedisClientConfiguration jedisClientConfiguration = jedisConf.build();
		return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
	}

	/**
	 * 连接池配置信息
	 * @return
	 */
	@Bean
	public JedisPoolConfig jedisPoolConfig() {
		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
		// 最大连接数
		jedisPoolConfig.setMaxTotal(maxTotal);
		// 最大空闲连接数
		jedisPoolConfig.setMaxIdle(maxIdle);
		// 当池内没有可用的连接时,最大等待时间(负数表示没限制)
		jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
		return jedisPoolConfig;
	}
}

4.使用不同RedisTemplate实例

package com.hello.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class RedisTemplateServcie {
    
    // 这个实例对应Redis DB0
	@Autowired
	@Qualifier("database0")
	private RedisTemplate<String, String> database0;

	public RedisTemplate<String, String> getDB0() {
		return database0;
	}
	
	// 这个实例对应Redis DB1
	@Autowired
	@Qualifier("database1")
	private RedisTemplate<String, String> database1;

	public RedisTemplate<String, String> getDB1() {
		return database1;
	}

}

本例只展示两个数据,你还要增加其他数据库实例,自己按照上述方式,增加就好了。

5.如何使用?

@Component
public class HelloClass {

// 在需要使用的地方注入RedisTemplateServcie
@Autowired
RedisTemplateServcie redisTemplateServcie;

private void hello(){
    RedisTemplate db0 = redisTemplateServcie.getDB0();
    Object object = db0.opsForHash().get("你的Key", "你的HashKey");
    } 
}

总结

本文完成了对两种Spring Boot2.x集成Redis方式的介绍,如果你只需要对一个数据库简单的读写,第一种方式,一分钟即可配置完成使用。但如果你需要操作多个Redis数据库,并且存在并发的情况,最好用第二种方式,多个Redis实例操作多个数据库的配置方式,希望这两种方式能够帮到你。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常感谢您的提问。根据您的要求,我将为您撰写一个关于 Spring Boot、PostgreSQL、Redis 和 Tomcat 技术框架选型的描述。 1. Spring Boot技术框架 Spring Boot 是一种基于 Spring 框架的快速开发应用程序的技术,它可以帮助您更快地构建 Web 应用程序和微服务。 Spring Boot 的主要特点包括: (a)自动配置:Spring Boot 可以根据您的需要进行自动配置,从而简化配置工作。 (b)起步依赖:Spring Boot 预定义了大量依赖项,以便您可以轻松地将这些依赖项添加到应用程序中。 (c)嵌入式 Web 服务器:Spring Boot 集成了多种嵌入式 Web 服务器,如 Tomcat、Jetty 和 Undertow,这也是我们后续介绍的Tomcat的原因。 综上所述,Spring Boot 是一个非常适合快速开发 Web 应用程序和微服务的框架。 2. PostgreSQL技术框架 PostgreSQL 是一个功能强大的对象关系型数据库管理系统(ORDBMS),它具有高度的可扩展性、可定制性和良好的安全性,并且支持丰富的 SQL 特性。相比较其他常见的数据库系统(如 MySQL),PostgreSQL的特点包括: (a)ACID:PostgreSQL 支持四种 ACID 属性,这使得它的数据操作更加可靠和稳健。 (b)可扩展性:PostgreSQL 拥有灵活的体系结构,支持多种扩展方式,如横向扩展和垂直扩展。 (c)可定制性:PostgreSQL 允许用户在数据库层面进行自定义编程,使得用户可以利用数据库的强大功能来编写自己的程序。 因此,PostgreSQL 是一种非常适合大规模应用程序部署的数据库系统,尤其适用于事务处理、并发访问和数据存储等方面。 3. Redis技术框架 Redis 是一种高性能的键值对存储系统,它是一个开放源代码的 NoSQL 数据库,可用于缓存和分布式存储。Redis具有以下特点: (a)高速度:Redis 的内存访问速度非常快,而且支持多种数据结构操作,如字符串、哈希表、流等。 (b)可扩展性:Redis 可以水平扩展以处理大量数据请求。 (c)持久化:Redis 通过 RDB 和 AOF 两种方式实现持久化存储。 由于 Redis 具有高效的数据缓存和快速的读取性能,它也是非常适合用作内存数据库或缓存数据库。 4. Tomcat技术框架 Tomcat 是一个开源的 Web 应用服务器,支持多种 Web 技术,如 Servlet、JSP 和 WebSocket。Tomcat 的主要特点包括: (a)高度可定制性:Tomcat提供组件化的体系结构,使得它可以被定制和扩展。 (b)多种集成方式:Tomcat可以与不同的框架(如 Spring)进行集成。 (c)支持多种 Web 技术:Tomcat 支持多种 Web 技术,如 Servlet 等。 考虑到Spring Boot内置了Tomcat Web服务器,而且Tomcat可以与Spring进行集成,我们可以依据前述的作用来选择使用Tomcat作为Spring Boot Web应用程序的运行引擎。 综上所述,Spring Boot、PostgreSQL、Redis 和 Tomcat 是一套优秀的技术框架组合,可以帮助您构建高效、高可靠性的 Web 应用程序。当然,随着新技术的不断出现,也希望您能不断尝试新技术以更好地满足项目的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值