spring boot redis 乱码及其配置
存在Redis中,key:\xAC\xED\x00\x05t\x00\x1xxxxxxx value:\xAC\xED\x00\x05t\x00 xxxxxx
原因:默认使用JdkSerializationRedisSerializer序列化方式
解决:改成StringRedisSerializer或直接使用Jedis
配置:
@Configuration @EnableCaching @Log4j public class RedisCacheConfig extends CachingConfigurerSupport { /** * 注解@Cache key生成规则 */ @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; } /** * redis模板,存储关键字是字符串,值是Jdk序列化 * * @param factory * @return * @Description: */ @Bean public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<?, ?> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); //key序列化方式;但是如果方法上有Long等非String类型的话,会报类型转换错误; RedisSerializer<String> redisSerializer = new StringRedisSerializer();//Long类型不可以会出现异常信息; redisTemplate.setKeySerializer(redisSerializer); redisTemplate.setHashKeySerializer(redisSerializer); //默认使用JdkSerializationRedisSerializer序列化方式;会出现乱码,改成StringRedisSerializer StringRedisSerializer stringSerializer = new StringRedisSerializer(); redisTemplate.setKeySerializer(stringSerializer); redisTemplate.setValueSerializer(stringSerializer); redisTemplate.setHashKeySerializer(stringSerializer); redisTemplate.setHashValueSerializer(stringSerializer); return redisTemplate; } /** * redis数据操作异常处理 * 这里的处理:在日志中打印出错误信息,但是放行 * 保证redis服务器出现连接等问题的时候不影响程序的正常运行,使得能够出问题时不用缓存 * * @return */ @Bean @Override public CacheErrorHandler errorHandler() { CacheErrorHandler cacheErrorHandler = new CacheErrorHandler() { @Override public void handleCacheGetError(RuntimeException e, Cache cache, Object key) { log.error("redis异常:key=[{" + key + "}]", e); } @Override public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) { log.error("redis异常:key=[{" + key + "}]", e); } @Override public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) { log.error("redis异常:key=[{" + key + "}]", e); } @Override public void handleCacheClearError(RuntimeException e, Cache cache) { log.error("redis异常:", e); } }; return cacheErrorHandler; }