springboot整合redis集群


springboot整合redis集群

yls
2019-9-21


簡介

在springboot使用搭建好的redis集群

添加redis和連接池依賴

   <!--redis連接池 start-->
       <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-pool2</artifactId>
       </dependency>
       <!--redis連接池 end-->

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

在配置文件中配置連接池和sentinel

ip: 39.97.234.52
spring:
  redis:
    lettuce:
      pool:
        max-active: 10
        max-idle: 8
        max-wait: -1ms
        min-idle: 0
    sentinel:
      master: mymaster
      nodes: ${ip}:26379,${ip}:26380,${ip}:26381
    password: test@dbuser2018

添加redis配置類,修改springboot默認的redis序列化方式

@Configuration
public class RedisConfig {
    /**
     * 把任何數據保存到redis時,都需要進行序列化,默認使用JdkSerializationRedisSerializer進行序列化。
     * 默認的序列化會給所有的key,value的原始字符前,都加了一串字符(例如:\xAC\xED\x00\),不具備可讀性
     * 所以需要配置jackson序列化方式
     */
    @Bean
    public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory factory){
        RedisTemplate<String,Object> template=new RedisTemplate<>();
        template.setConnectionFactory(factory);
        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的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        //value采用jackson序列化方式
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //hash的key采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        //hash的value采用String的序列化方式
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

創建redis服務

    @Service
    public class RedisServiceImpl implements RedisService {

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public boolean put(String key, Object value, long seconds) throws JsonProcessingException {
        redisTemplate.opsForValue().set(key, value, seconds, TimeUnit.SECONDS);
        return true;
    }

    @Override
    public <T> T get(String key, Class<T> clazz) throws IOException {
        Object o = redisTemplate.opsForValue().get(key);
        if (o != null) {
            String json = String.valueOf(o);
            T t = JsonUtil.stringToObject(json, clazz);
            return t;
        }
        return null;
    }
    }

創建redisController測試redis服務

    @RestController
    public class RedisController {

        @Autowired
        private RedisService redisService;

        @PostMapping(value = "put")
        public String put(String key,String value,long seconds){

            redisService.put(key,value,seconds);
            return "ok";
        }

        @GetMapping(value = "get")
        public Object get(String key){

            Object o=redisService.get(key);
            if(o!=null){
                return String.valueOf(o);
            }
            return "not_ok";
        }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM