问题场景描述
springboot项目整合redis,用户注册时会将账号和验证码以K-V键值对存入redis,但是验证时根据手机号得到的验证码数据一直为空,并且数据库keys *查到的数据很奇怪,有韩文乱码:
尝试排错
一开始排查方向就是乱码,重新更换redis配置类的KV序列化方式,还是不行,从数据库角度使用 --raw还是不行,甚至想专门使用redisutil来代替opsForValue().set()结果都不行(笑~),但是奇怪的是我直接在项目中直接get对应key的值却能正常得到value,这里我就奇了个怪了.后来往上搜索看到前辈也有一样的问题,说是使用了两个redistemplate的问题,感觉是突破点,然后开始排查
前辈文章链接:
https://blog.csdn.net/fulong0406/article/details/116197789
问题确定
根据前辈提供的思路,我发现在项目中使用redistemplate操作set值后紧接着getvalue的返回结果是个对象,(当时因为是直接sout所以还没注意到这一点),但是我再验证码校验的时候注入的redistemplate里面有泛型规定KV都需要都是string类型:
到这里问题就确定了,redis数据库中keys *查到的带有乱码的其实就是之前以对象形式存储的值就是对象,只是挺奇怪为什么会以这种方式显示.
问题解决
确定问题就好了,把redistemplate的泛型全都锁定为string就好了,反正类似验证码这种东西只需要string类型进行校验即可,好了,结束