Unrecognized token 'redis': was expecting ('true', 'false' or 'null')

在redis客户端set进值之后,从程序中用redisTemplate读取该值报如下错误



Unrecognized token 'redis': was expecting ('true', 'false' or 'null')
看报错,是jason转换异常,实际上是因为redisTemplate在做数据存储的时候会把存储的内容序列化,所以,redisTemplate读取的时候也会反序列化,而在redis客户端set的时候并不会做序列化,因此set的进去的值在用redisTemplate读的时候就会报类型转换异常了。
看一下get redis结果的源码:

public V get(Object key) {
        return this.execute(new AbstractOperations<K, V>.ValueDeserializingRedisCallback(key) {
            protected byte[] inRedis(byte[] rawKey, RedisConnection connection) {
                return connection.get(rawKey);
            }
        }, true);
    }

在执行execute的时候,会调用ValueDeserializingRedisCallback 这个内部类中的doinRedis方法以及在初始化内部类的时候会初始化key。

  abstract class ValueDeserializingRedisCallback implements RedisCallback<V> {
        private Object key;

        public ValueDeserializingRedisCallback(Object key) {
            this.key = key;
        }
      //就是这个doInRedis方法,里面有一个rawKey(),该方法序列化了key,并且返回的是一个字符串数组,然后deserializeValue 反序列化result值。
        public final V doInRedis(RedisConnection connection) {
            byte[] result = this.inRedis(AbstractOperations.this.rawKey(this.key), connection);
            return AbstractOperations.this.deserializeValue(result);
        }

        @Nullable
        protected abstract byte[] inRedis(byte[] var1, RedisConnection var2);
    }

可以看到用deserialize方法反序列了get出来的值。

解决办法,最简单的就是用程序重新set一遍即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容