描述
使用springboot整合redis,使用默认的序列化配置,然后使用redis-client去查询时查询不到相应的key.
使用工具发现,key的前面多了\xac\xed\x00\x05t\x00!这样一个串.
而且value也是不能直观可见的.
问题所在
使用springdataredis,默认情况下是使用org.springframework.data.redis.serializer.jdkserializationredisserializer这个类来做序列化.
org.springframework.data.redis.core.redistemplate代码块.
public void afterpropertiesset() { super.afterpropertiesset(); boolean defaultused = false; if (defaultserializer == null) { defaultserializer = new jdkserializationredisserializer( classloader != null ? classloader : this.getclass().getclassloader()); } if (enabledefaultserializer) { if (keyserializer == null) { keyserializer = defaultserializer; defaultused = true; } if (valueserializer == null) { valueserializer = defaultserializer; defaultused = true; } if (hashkeyserializer == null) { hashkeyserializer = defaultserializer; defaultused = true; } if (hashvalueserializer == null) { hashvalueserializer = defaultserializer; defaultused = true; } } if (enabledefaultserializer && defaultused) { assert.notnull(defaultserializer, "default serializer null and not all serializers initialized"); } if (scriptexecutor == null) { this.scriptexecutor = new defaultscriptexecutor<k>(this); } initialized = true; }
解决
手动设置key的序列化方式为stringredisserializer,强制使用.
由于spring不支持泛型注入,这样会导致所有的redistemplate的key序列方式都为stringredisserializer. 同时,最好在序列化对象保存时候手动将其转为json串后存入redis.易于在可视化工具中直接查看对应value
@bean public redistemplate<string, ?> redistemplate(redisconnectionfactory factory) { redistemplate<string, object> redistemplate = new redistemplate(); redistemplate.setconnectionfactory(factory); redisserializer<string> stringredisserializer = new stringredisserializer();//long类型不可以会出现异常信息; redistemplate.setkeyserializer(stringredisserializer); return redistemplate; }
以上所述是小编给大家介绍的springboot整合spring-data-redis遇到的坑,希望对大家有所帮助
如对本文有疑问, 点击进行留言回复!!
Algebra:Chapter 0 - 预备知识: 集合论和categories
springboot + vue上传图片在服务器并实现在线预览
请谨慎使用增强for循环,刚接触Java值得一看(手动狗头)
【Nginx】还不会使用Nginx解决跨域问题?肝这一篇就够了!!
网友评论