RedisTemplate increment 錯誤:ERR value is not an integer or out of range解決
原因:GenericJackson2JsonRedisSerializer、Jackson2JsonRedisSerializer是先將對象轉為json,然后再保存到redis,所以,1在redis中是字符串1,所以無法進行加1 JdkSerializationRedisSerializer使用的jdk對象序列化,序列化后的值有類信息、版本號等,所以是一個包含很多字母的字符串,所以根本無法加1,這個序列化器跟memcache的序列化規則很像memcache怎樣存儲的對象 GenericToStringSerializer、StringRedisSerializer將字符串的值直接轉為字節數組,所以保存到redis中是數字,所以可以進行加1 ;
通過以下代碼配置redistemplate的序列化方式之后就可以順利的執行increment了;
/** * 設置 redisTemplate 的序列化設置 * @param redisConnectionFactory * @return
*/ @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 1.創建 redisTemplate 模版
RedisTemplate<Object, Object> template = new RedisTemplate<>(); // 2.關聯 redisConnectionFactory
template.setConnectionFactory(redisConnectionFactory); // 3.創建 序列化類
GenericToStringSerializer genericToStringSerializer = new GenericToStringSerializer(Object.class); // 6.序列化類,對象映射設置 // 7.設置 value 的轉化格式和 key 的轉化格式
template.setValueSerializer(genericToStringSerializer); template.setKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; }