我爱编程

使用spring-data-redis 遇到的坑

2018-03-29  本文已影响0人  小螺丝钉cici

在升级redis的时候,遇到了一个问题,也是老生常谈的问题:
参考文章:spring data redis serializer SerializationException 序列化问题

image.png

解决办法:


image.png

整段redis配置代码块如下:


//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.nuanshui.heatedloan.middleware.config;

import com.nuanshui.framework.message.redis.RedisPublisher;
import com.nuanshui.framework.message.redis.RedisSubscriber;
import com.nuanshui.framework.utils.redis.JedisUtil;
import com.nuanshui.framework.utils.redis.MasterSlavePool;
import com.nuanshui.heatedloan.dubbo.extension.cache.manager.DistributedCacheDecorator;
import com.nuanshui.heatedloan.dubbo.extension.cache.manager.DubboCacheJsonManagerImpl;
import com.nuanshui.heatedloan.middleware.cache.FastJsonRedisSerializer;
import com.nuanshui.heatedloan.middleware.cache.manager.impl.CacheManagerJsonImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import redis.clients.jedis.JedisPoolConfig;

public class RedisConfig {
    @Value("${redis.master.host}")
    private String host;
    @Value("${redis.master.port}")
    private int port;
    @Value("${redis.timeout}")
    private int timeout;
    @Value("${redis.database}")
    private int database;
    @Value("${masterReadPercent}")
    private int masterReadPercent;
    @Value("${redis.password}")
    private String password;

    public RedisConfig() {
    }

    @Bean({"jedisPoolConfig"})
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(1000);
        jedisPoolConfig.setMaxIdle(100);
        jedisPoolConfig.setMaxWaitMillis(5000L);
        jedisPoolConfig.setTestOnBorrow(true);
        return jedisPoolConfig;
    }

    @Bean({"jedisPool"})
    public MasterSlavePool masterSlavePool(JedisPoolConfig jedisPoolConfig) throws Exception {
        MasterSlavePool masterSlavePool = new MasterSlavePool(jedisPoolConfig, this.host, this.port, this.timeout, this.database);
        masterSlavePool.setPassword(this.password);
        masterSlavePool.setMasterReadPercent(this.masterReadPercent);
        masterSlavePool.setRedisName("cache");
        return masterSlavePool;
    }

    @Bean({"jedisUtil"})
    public JedisUtil jedisUtil(MasterSlavePool masterSlavePool) {
        JedisUtil jedisUtil = new JedisUtil();
        jedisUtil.setJedisPool(masterSlavePool);
        return jedisUtil;
    }

    @Bean({"dubboCacheManager"})
    public DubboCacheJsonManagerImpl dubboCacheManager() {
        DubboCacheJsonManagerImpl dubboCacheJsonManager = new DubboCacheJsonManagerImpl();
        return dubboCacheJsonManager;
    }

    @Bean({"cacheManagerJsonImpl"})
    public CacheManagerJsonImpl cacheManagerJsonImpl() {
        CacheManagerJsonImpl cacheManagerJsonImpl = new CacheManagerJsonImpl();
        return cacheManagerJsonImpl;
    }

    @Bean({"redisConnectionFactory"})
    public JedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setHostName(this.host);
        factory.setPort(this.port);
        factory.setPassword(this.password);
        factory.setDatabase(this.database);
        factory.setPoolConfig(jedisPoolConfig);
        factory.setUsePool(true);
        return factory;
    }

    @Bean({"keyRedisSerializer"})
    public StringRedisSerializer keyRedisSerializer() {
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        return stringRedisSerializer;
    }

    @Bean({"valueRedisSerializer"})
    public FastJsonRedisSerializer valueRedisSerializer() {
        FastJsonRedisSerializer valueRedisSerializer = new FastJsonRedisSerializer();
        return valueRedisSerializer;
    }

    @Bean({"redisTemplate"})
    public RedisTemplate redisTemplate(JedisConnectionFactory factory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(factory);
        redisTemplate.setKeySerializer(this.keyRedisSerializer());
        redisTemplate.setHashKeySerializer(this.keyRedisSerializer());
        redisTemplate.setHashValueSerializer(this.valueRedisSerializer());
        redisTemplate.setValueSerializer(this.valueRedisSerializer());
        return redisTemplate;
    }

    @Bean({"subscriptionExecutor"})
    public ThreadPoolTaskExecutor subscriptionExecutor() {
        ThreadPoolTaskExecutor subscriptionExecutor = new ThreadPoolTaskExecutor();
        subscriptionExecutor.setThreadNamePrefix("redis-subscription-thread-");
        return subscriptionExecutor;
    }

    @Bean({"redisTaskExecutor"})
    public ThreadPoolTaskExecutor redisTaskExecutor() {
        ThreadPoolTaskExecutor redisTaskExecutor = new ThreadPoolTaskExecutor();
        redisTaskExecutor.setThreadNamePrefix("redis-task-thread-");
        return redisTaskExecutor;
    }

    @Bean({"redisMessageListenerContainer"})
    public RedisMessageListenerContainer redisMessageListenerContainer(JedisConnectionFactory factory, ThreadPoolTaskExecutor subscriptionExecutor, ThreadPoolTaskExecutor redisTaskExecutor) {
        RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
        redisMessageListenerContainer.setConnectionFactory(factory);
        redisMessageListenerContainer.setSubscriptionExecutor(subscriptionExecutor);
        redisMessageListenerContainer.setTaskExecutor(redisTaskExecutor);
        return redisMessageListenerContainer;
    }

    @Bean({"publisher"})
    public RedisPublisher publisher(RedisTemplate redisTemplate) {
        RedisPublisher publisher = new RedisPublisher();
        publisher.setRedisTemplate(redisTemplate);
        return publisher;
    }

    @Bean({"subscriber"})
    public RedisSubscriber subscriber(RedisTemplate redisTemplate, RedisMessageListenerContainer redisMessageListenerContainer) {
        RedisSubscriber redisSubscriber = new RedisSubscriber();
        redisSubscriber.setRedisTemplate(redisTemplate);
        redisSubscriber.setMessageListenerContainer(redisMessageListenerContainer);
        return redisSubscriber;
    }

    @Bean({"distributedCacheDecorator"})
    public DistributedCacheDecorator distributedCacheDecorator(RedisPublisher publisher, RedisSubscriber subscriber) {
        DistributedCacheDecorator distributedCacheDecorator = new DistributedCacheDecorator();
        distributedCacheDecorator.setPublisher(publisher);
        distributedCacheDecorator.setSubscriber(subscriber);
        return distributedCacheDecorator;
    }
}
上一篇下一篇

猜你喜欢

热点阅读