Springboot整合Redis-sentinel哨兵模式集群

Springboot整合Redis-sentinel哨兵模式集群

近日在项目中整合redis缓存,经过多日研究测试终于成功了。特留存此博客。

1. pom.xml 添加Redis依赖

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

2. application.yml 添加Redis配置

  redis:
##单机
#    host: 172.21.0.211
#    port: 6379
##
##集群
    cluster:
      nodes:
      - 172.21.0.211:7000
      - 172.21.0.211:7001
      - 172.21.0.211:7002
      - 172.21.0.211:7003
      - 172.21.0.211:7004
##哨兵
    sentinel:
      master: mymaster
      nodes:
      - 172.21.0.211:7005
      - 172.21.0.211:7006
      - 172.21.0.211:7007
##
    jedis:
      pool:
### 连接池最大连接数(使用负值表示没有限制) 
        max-active: 9
### 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1
### 连接池中的最大空闲连接 
        max-idle: 9
### 连接池中的最小空闲连接 
        min-idle: 0
### Redis数据库索引(默认为0) 
    database: 0
### 连接超时时间(毫秒) 
    timeout: 60000

3. 新增RedisTemplate配置类

SpringBoot自动帮我们在容器中生成了RedisTemplate和StringRedisTemplate。但是,这个RedisTemplate的泛型是<Object,Object>,写代码不方便,需要写好多类型转换的代码;我们需要一个泛型为<String,Object>形式的RedisTemplate。并且,这个RedisTemplate没有设置数据存在Redis时,key及value的序列化方式。所以我们需要添加RedisConfig.java配置类来配置key及value的序列化方式。

package org.bachelor.manager.redis;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * 
 * redis配置类
 * 
 */
@Configuration
public class RedisConfig {
   
   

	@Bean
	@SuppressWarnings("all")
	public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
   
   

		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
		redisTemplate.setConnectionFactory(redisConnectionFactory);

		Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
		ObjectMapper objectMapper = new ObjectMapper();
		objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
		jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

		StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

		// key采用String的序列化方式
		redisTemplate.setKeySerializer(stringRedisSerializer);
		// hash的key也采用String的序列化方式
		redisTemplate.setHashKeySerializer(stringRedisSerializer);
		// valuevalue采用jackson序列化方式
		redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
		// hash的value采用jackson序列化方式
		redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
		redisTemplate.afterPropertiesSet();
		return redisTemplate;
	}
}

4. 新增Redis工具类

直接用RedisTemplate操作Redis,需要很多行代码,因此直接封装好一个RedisUtils,这样写代码更方便点。

package org.bachelor.manager.redis;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

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

/**
 * Redis工具类
 * 
 * @author 共通组
 * @date 2019年2月25日
 */
@Component
public final class RedisUtil {
   
   

	@Autowired
	private RedisTemplate<String, Object> redisTemplate;

	// =============================common============================
	/**
	 * 
	 * 指定缓存失效时间
	 * 
	 * @param key  键
	 * @param time 时间(秒)
	 * @return
	 */
	public boolean expire(String key, long time) {
   
   
		try {
   
   
			if (time > 0) {
   
   
				redisTemplate.expire(key, time, TimeUnit.SECONDS);
			}
			return true;
		} catch (
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值