您的位置:首页 > 数据库 > Redis

Spring +redis 集成 16进制问题 \xE7\x9C\x81t\x00\x0323e

2016-01-22 16:29 696 查看
看本文章的人最好先看了这篇大神写的文章 http://blog.csdn.net/defonds/article/details/48716161#plain
本文章主要解决 自定义生成策略 以及 16进制部分问题,欢迎大家吐槽

1 首先 自定义缓存策略 的方法名不应该为customKeyGenerator ,而应该为keyGenerator ,具体原因可以看CachingConfigurerSupport 类的源代码。

  为了验证以上问题,不得不 解决 16进制问题,也就是在redis中 \xE7\x9C\x81t\x00\x0323e 这种类型的数据(另外 通过cmd 存储中文的 命令 redis-cli --raw 可以存储读取显示中文)

    在RedisCacheConfig(该类为原来博主的 demo中的一个 继承了CachingConfigurerSupport的 redis自定义配置类) 中增加如下方法:

      redisTemplate.setKeySerializer(stringRedisSerializer);

        //redisTemplate.setValueSerializer(stringRedisSerializer);

        redisTemplate.setHashKeySerializer(stringRedisSerializer);

        //redisTemplate.setHashValueSerializer(stringRedisSerializer);

至于为什么部分注释掉,大家可以不注释掉运行看看(会报错的哦)。至于key 不会(具体原因是 数据 经过序列化后 存入redis 为16进制,大家可以这里也百度底层原理http://blog.csdn.net/yiluoak_47/article/details/22041301),

最终出现 所谓的自定义缓存策略key(为啥木有value呢?应该service层的值不应为string,原来博主的案列 为list或者实体类,所以转换失败。但是key就是string了),最终发现key值是全面的 包名+类名+方法名了。

另外。至于为什么原来博主存入值,为什么 返回俩个键,一个为 keys,一个味key,大家可以看一下下图,最好和原博主的注意事项当中的那个图比对一下,相信就能解决了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring redis 缓存 16进制