redis-py中的坑

Posted Sawyer Ford

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis-py中的坑相关的知识,希望对你有一定的参考价值。

今天发现,使用redis-py从redis中获取的数据竟然是加密的。

conn = redis.Redis(host=redis_serverip, port=6379, password=redis_password, db=0)

conn.set(string-key1, value1)

result = conn.get(string-key1)
print(result:, result)
print(result type:, type(result))
print()

result_decoded = result.decode(utf-8)
print(result_decoded:, result_decoded)
print(result_decoded type:, type(result_decoded))
print()

result_str = str(result)
print(result_str:, result_str)
print(result_str type:, type(result_str))
print()

print(test int in redis...\n)

conn.set(string-key2, 100)
result = conn.get(string-key2)
print(result:, result)
print(result type:, type(result))
print()

result_decoded = int(result)
print(result_decoded:, result_decoded)
print(result_decoded type:, type(result_decoded))

输出:

result: b‘value1‘
result type: <class ‘bytes‘>

result_decoded: value1
result_decoded type: <class ‘str‘>

result_str: b‘value1‘
result_str type: <class ‘str‘>

test int in redis...

result: b‘100‘
result type: <class ‘bytes‘>

result_decoded: 100
result_decoded type: <class ‘int‘>

 

可以看出:

如果传入str,传出的是bytes,需要通过decode(‘utf-8‘)进行恢复。

如果传入int,传出的是bytes,需要通过int()进行恢复。

 

另一种解决办法是在创建redis client时,进行decode设置。

conn = redis.Redis(host=redis_serverip, port=6379, password=redis_password, db=0, decode_responses=True)

conn.set(string-key3, value3)

result = conn.get(string-key3)
print(result:, result)
print(result type:, type(result))
print()

print(test int in redis...\n)

conn.set(string-key4, 100)

result = conn.get(string-key4)
print(result:, result)
print(result type:, type(result))
print()

result_decoded = int(result)
print(result_decoded:, result_decoded)
print(result_decoded type:, type(result_decoded))

输出:

result: value3
result type: <class ‘str‘>

test int in redis...

result: 100
result type: <class ‘str‘>

result_decoded: 100
result_decoded type: <class ‘int‘>

这种情况下,str是正常的,int需要注意一下。

 

参考资料:

Problem with hash get/set









以上是关于redis-py中的坑的主要内容,如果未能解决你的问题,请参考以下文章

如何用ffmpeg截取视频片段&截取时间不准确的坑

Blender制作多个动画片段时踩的坑

一日一技:隐患——redis-py的blpop可能由于网络波动导致收不到信息

redis-py 源码阅读

redis-py:StrictRedis() 和 Redis() 有啥区别?

redis 学习-- redis 客户端 -- redis-py