美文网首页我爱编程
使用spring-data-redis 遇到的坑

使用spring-data-redis 遇到的坑

作者: 小螺丝钉cici | 来源:发表于2018-03-29 17:11 被阅读0次

    在升级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;
        }
    }
    

    相关文章

      网友评论

        本文标题:使用spring-data-redis 遇到的坑

        本文链接:https://www.haomeiwen.com/subject/uufvcftx.html