redis中使用get获取,得到图片中的java hashmap 的object直接set到redis中的数据
使用python链接redis,可以get到key,但是key里面的内容无法解析,请问有同学处理过吗~
redis中使用get获取,得到图片中的java hashmap 的object直接set到redis中的数据
使用python链接redis,可以get到key,但是key里面的内容无法解析,请问有同学处理过吗~
-redis 本来就只支持存储一些基本类型(数值,字符...)的。java将对象存储在redis中是将对象序列化后的字节数组存入redis的,所以你用python取到的redis中的数据时,会带有特殊的前缀,表示序列化后java的类信息。java获取这些数据的时候会有反序列的操作,所以不影响。但python取到数据后是无法解析的。
-Java 存储与python共享数据时,应避免将String字符串当做对象进行序列化存储,应直接以字符串的形式存储,如果需要共享对象,对象转化为json串存储。
-另外spring的redisTemplate 进行Hash操作时,就算你存储的是String类型的数据,也会被当做String对象序列化后存储。所以 如果过要操作redis的hash结构,建议实例化一个Jedis客户端进行操作。
------有说错的地方请指点
最简单的是将Java对象转换为json,然后存在redis中,不过这样效率不高。另一种是使用protobuf之类的序列化工具序列化java对象,然后在Python中反序列化出来。
可以了
可以了
可以了
现在可以了。
import javaobj.v2 as javaobj
# decode_responses要设置为false,如果设置为True,会报错。因为那个二进制是一个虚序列化后的java对象。。。
redisconn = redis.Redis(host='127.0.0.1',port=6379,decode_responses=False)
token = 'ttttkoen'
captcha_code= redisconn.hget('hashtable',token)
#print(captcha_code)
res = javaobj.loads(captcha_code) # loads从二进制读取
print(res.dump())
code = res.xxx.xxxbb.value # 读取某个属性值
print(type(code))
print(code)
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
3 回答3.1k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.7k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
目测不可以哦 https://github.com/andymccurd...,这个issue虽然不是
java set object
,但类似的, 还是建议 存成json再取