Springboot 集成 redis单点和redis集群

Redis 现在是我们最常用的 Key-Value数据库之一,所以在写springboot微服务的时候,redis的集成当然也是必须的。

首先新建一个springboot项目,

一、引入Redis依赖

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

二、boot yml 配置

1、如果是redis单点的话,配置如下,

redis:
  jedis:
    pool:
      max-active: 8
      max-wait: -1ms
      min-idle: 0
      max-idle: 8
  host: 127.0.0.1
  port: 6379

2、如果是redis集群(三节点),配置如下,

redis:
  cluster:
    nodes: 101.2.50.101:6379,101.2.50.102:6379,101.2.50.103:6379
  jedis:
    pool:
      max-active: 8
      max-wait: -1ms
      min-idle: 0
      max-idle: 8

3、相关配置参数


# Redis数据库索引(默认为0)  
spring.redis.database=0  

# Redis服务器地址  
spring.redis.host=127.0.0.1 

# Redis服务器连接端口  
spring.redis.port=6379  

# Redis服务器连接密码(默认为空)  
spring.redis.password=  

# 连接池最大连接数(使用负值表示没有限制)  
spring.redis.pool.max-active=200  

# 连接池最大阻塞等待时间(使用负值表示没有限制)  
spring.redis.pool.max-wait=-1  

# 连接池中的最大空闲连接  
spring.redis.pool.max-idle=10 

# 连接池中的最小空闲连接  
spring.redis.pool.min-idle=0  

# 连接超时时间(毫秒)  
spring.redis.timeout=1000 

三、Redis 配置类

原生的 RedisTemplate 不好用,推荐如下重写,重新使用 fastjson 序列化。

package com.zszq.bigdata.hbaseservice.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
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.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;

/*
 * created by shipfei
 * on 2019/5/23, 16:49
 * motto: Saying and doing are two different things.
 */
@Configuration
public class RedisConfig {

    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory){

        return RedisCacheManager.builder(connectionFactory)
                .cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(15))) // 缓存过期时间
                .transactionAware()
                .build();
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om = new ObjectMapper();
        RedisSerializer stringSerializer = new StringRedisSerializer();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(stringSerializer);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashKeySerializer(stringSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer); 
        template.afterPropertiesSet();
        return template;
    }

}

四、使用

完成以上三步后,就可以在使用redis来做缓存了,使用时注入RedisTemplate即可。

@RestController
public class DayClickController {

    @Autowired
    private DayClickService dayClickService;
    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("/getDayData")
    public ResponseData getDayData(@RequestParam(value = "custNo") String custNo,
                                   @RequestParam(value = "page") String page){
        String rowKey = custNo + "_" + page;
        Map<String, String> param = new HashMap<>();
        param.put("rowKey", rowKey);
        redisTemplate.opsForValue().increment("request-getDayData", 1); // 点击量

        ResponseData responseData = dayClickService.getDayClickByRowKey(param);
        return responseData;
    }
}
发布了125 篇原创文章 · 获赞 116 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/shipfei_csdn/article/details/103859856