Java集成Redis

Java集成Redis

Redis客户端

项目中想要对接Redis中间件,需要在Java项目中引入Redis的相关依赖。查看Redis官网推荐的客户端程序 Redis Java Client
Redis推荐客户端

选择redis相关依赖

Spring Data项目下有 Spring Data Redis 专门针对Redis做了封装,简化了Redis的连接和读写操作。该项目也是使用Jedis和Letture两个客户端,并且在Spring Boot 2.0版本以上默认使用Letture。

Spring Boot项目集成

依赖继承

Spring Boot项目中会添加父依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.10.RELEASE</version>
</parent>

spring-boot-starter-parent 引入了许多Spring家族的项目,并且通过dependencyManagement标签实现子项目按需集成。

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

自已的项目则可以只需要增加redis依赖即可,版本和scope是继承自parent项目。

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

增加Redis配置

Redis文档路径就是在Data Properties (可以查看到全量的Redis配置以及默认值)
redis config

非Spring boot项目

添加依赖

非Spring Boot项目需要考虑是否之前已经引入了Redis的相关依赖,如果引入了相关依赖,就需要redis包和将要引入的spring-data-starter-data-redis包的版本兼容性。

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

相比,就是多设置了version属性。

非Spring项目初始化

// 1. 初始化连接池配置
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
//这个参数默认是-1,在极端情况下会导致连接池资源耗尽 
genericObjectPoolConfig.setMaxWaitMillis(1000);

// 2.初始化redisCluster
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
// 读取自己的配置
redisClusterConfiguration.clusterNode();
redisClusterConfiguration.setPassword();
redisClusterConfiguration.setMaxRedirects(5);

// 3.初始化LettuceConnectionFactory
LettuceConnectionFactory factory = new LettuceConnectionFactory(redisClusterConfiguration, clientConfig);
factory.afterPropertiesSet();

// 4.初始化RedisTemplate
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jackson2JsonRedisSerializer.setObjectMapper(mapper);
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();

// 5. 使用RedisTemplate封装一个RedisUtils工具类,这里就不详细写了,可以参考其他博客

Spring Boot 如何初始化Redis

Spring Boot核心是autoconfigure自动配置,主要就是读取META-INF/spring.factories来加载配置类,其中就有Redis的配置类RedisAutoConfiguration

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {

	@Bean
	@ConditionalOnMissingBean(name = "redisTemplate")
	@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
	public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
		RedisTemplate<Object, Object> template = new RedisTemplate<>();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

	@Bean
	@ConditionalOnMissingBean
	@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
	public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
		StringRedisTemplate template = new StringRedisTemplate();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

}

redis初始化的流程简洁版可以看下图:
在这里插入图片描述
这里我就解释一个点:@Bean这个注解,会自动注入对象,上图中就是注入了RedisConnectionFactory,从而完成流程闭环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值