Spring整合Redis遇到的问题

问题1:

java.lang.ClassCastException: 
org.springframework.cache.interceptor.SimpleKey cannot be cast to java.lang.String

出现此错误主要是调用了无参数的方法。解决的方法是配置一个自定义的keyGenerator。
注意,方法名keyGenerator不能改为其他例如customKeyGenerator, 否则还是会报错(不知是否是版本问题)

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {

    @Bean
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            public Object generate(Object target, Method method, Object... objects) {
                StringBuilder sb = new StringBuilder();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object obj : objects) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }
}

问题2:

java.lang.ClassCastException: 
java.util.LinkedHashMap cannot be cast to com.your.object

报错的原因主要是defaultSerializer或valueSerializer使用了Jackson2JsonRedisSerializer类
解决的方法将Jackson2JsonRedisSerializer改为GenericJackson2JsonRedisSerializer

<!-- 配置RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory" />  
    <property name="keySerializer">  
        <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />  
    </property>  
    <property name="hashKeySerializer">  
        <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />  
    </property>  
    <property name="defaultSerializer">  
        <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer">    </bean>
    </property>
</bean>

猜你喜欢

转载自blog.csdn.net/u012557814/article/details/79933416