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

本文主要讨论了在Spring整合Redis时遇到的16进制问题,以及如何自定义缓存策略。通过分析源码,指出自定义缓存策略的方法名应为keyGenerator而非customKeyGenerator。文中还提到了Redis中存储中文字符的解决方案,并给出了配置RedisTemplate以避免16进制问题的代码示例。此外,文章探讨了为何原博主的示例中会出现两个键,一个是keys,另一个是key,并鼓励读者对比原博主的注意事项以理解问题所在。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看本文章的人最好先看了这篇大神写的文章 http://blog.youkuaiyun.com/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.youkuaiyun.com/yiluoak_47/article/details/22041301),

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


另外。至于为什么原来博主存入值,为什么 返回俩个键,一个为 keys,一个味key,大家可以看一下下图,最好和原博主的注意事项当中的那个图比对一下,相信就能解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值