StringRedisTemplate 和 RedisTemplate的区别及使用方法

最近写网关鉴权,将jwt令牌信息存入redis中。
结果在鉴权的时候,从cookie中获取到正确的redis的键之后,获取jwt信息一直未null.
多次纠结排错,现将坑填于此。

排错

如上述,存入redis中后,一直获取为null。 查看数据库后,发现具体的jwt信息已经完整的存储了。
多次debug,发现所有流程正确,就是从redis拿值为null. 忽然就反应过来,这存储的键 跟我设定的不一样啊!
我存储的时候用的 RedisTemplate
在这里插入图片描述
经过翻阅资料修改为 StringRedisTemplate 这个时候redis中的值如下
在这里插入图片描述
这两种键的格式, 只是是用的接口不同。但是传入的参数相同。 如此之后,我便拿到了自己想要的数据。

将二者的区分记录如下:

两者的关系是StringRedisTemplate继承RedisTemplate。

在这里插入图片描述

两者的数据是不共通的;

也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据

SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。

StringRedisTemplate 默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate 默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

使用时注意事项:

当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。

但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。

RedisTemplate使用时常见问题:

redisTemplate 中存取数据都是字节数组。当redis中存入的数据是可读形式而非字节数组时,使用redisTemplate取值的时候会无法获取导出数据,获得的值为null。可以使用 StringRedisTemplate 试试。

总结

RedisTemplate使用的序列类在在操作数据的时候,比如说存入数据会将数据先序列化成字节数组然后在存入Redis数据库,这个时候打开Redis查看的时候,你会看到你的数据不是以可读的形式展现的,而是以字节数组显示,类似下面

在这里插入图片描述

当然从Redis获取数据的时候也会默认将数据当做字节数组转化,这样就会导致一个问题,当需要获取的数据不是以字节数组存在redis当中而是正常的可读的字符串的时候,比如说下面这种形式的数据

扫描二维码关注公众号,回复: 9605451 查看本文章

在这里插入图片描述

当Redis当中的数据值是以可读的形式显示出来的时候,只能使用StringRedisTemplate才能获取到里面的数据。

所以当你使用RedisTemplate获取不到数据的时候请检查一下是不是Redis里面的数据是可读形式而非字节数组,RedisTemplate就无法获取导数据,这个时候获取到的值就是NULL。这个时候StringRedisTempate就派上了用场。

发布了31 篇原创文章 · 获赞 8 · 访问量 1514

猜你喜欢

转载自blog.csdn.net/qq_37126480/article/details/104566413
今日推荐