昨天调试一个问题,redis拿出来的值总是无法decode成实体类,通过客户端查看数据库中的数据,发现json以外还有一段:\x00\x00\x00\x00\x00\x00\x00\x00的数据,如图:

微信截图_20201116205225.png

为何平白无故多出一段乱码?反复检查数据后并没有发现json有额外的数据,通过谷歌搜索的得到一个答案:

https://stackoverflow.com/questions/42824593/got-lots-of-x00-prefix-when-using-stringredistemplate

外国友人的回复如下:

Sorry about this asking. It's my fault. I made mistakes about using the set()method. The third parameter of set() method is not timeout value. It's offset. To fix it:

翻译如下:

set方法使用错误,第三个参数需要的并不是timeout的值,这是一个偏移参数值。

检查自己的参数后发现,我使用的是一个三个参数的set方法,而第三个参数并不能传入时间值,否则会出现\x00\x00\x00\x00\x00\x00\x00\x00\x00的问题。正确的set方法原型为:

stringRedis.opsForValue().set(redisKey, value, ACTIVATION_CODE_TIMEOUT, TimeUnit.SECONDS);

将函数改为stringRedis.opsForValue().set(redisKey, value, ACTIVATION_CODE_TIMEOUT, TimeUnit.SECONDS)后,问题得到解决。