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中的坑的更多相关文章
- 分布式爬虫scrapy-redis中settings.py中的配置信息
SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 使用scrapy-redis的调度器 ITEM_PIPELINES = { 'sc ...
- php安装扩展redis淌过的坑
php安装扩展redis淌过的坑 php扩展 redis cd /usr/local/src/ wget https://github.com/nicolasff/phpredis/archive/2 ...
- Torch-RNN运行过程中的坑 [2](Lua的string sub函数,读取中文失败,乱码?)
0.踩坑背景 仍然是torch-rnn/LanguageModel.lua文件中的一些问题,仍然是这个狗血的LM:encode_string函数: function LM:encode_string( ...
- linux上部署redis实现与Python上的redis交互(有坑)
1.概念 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件 2.linux安装redis 2.1yum源安装redis(不推荐) #前提得配置好阿里 ...
- 饿了么这样跳过Redis Cluster遇到的“坑”
内容来源:2017 年 8 月 12 日,饿了么高级Python工程师黄光星在“CRUG 2017北京活动”进行<Redis Cluster运维方案>演讲分享.IT 大咖说(微信id:it ...
- 决策树python建模中的坑 :ValueError: Expected 2D array, got 1D array instead:
决策树python建模中的坑 代码 #coding=utf-8 from sklearn.feature_extraction import DictVectorizerimport csvfrom ...
- python调用py中rar的路径问题。
1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...
- Django 中 如何使用 settings.py 中的常量
在用django 框架开发 python web 程序的时候 , 在模板页面经常会用到 settings.py 中设置的常量,比如MEDIA_URL, 我尝试过在模板页面用类似如下的方式 程序代码 { ...
- PHP redis Api 中文文档
phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...
- django访问sqlserver中的坑
首先不用说先安装django-sqlserver pip install django-sqlserver 然后在settings.py中修改'ENGINE': 'sqlserver_ado', ...
随机推荐
- python3(三十) Enum
""" """ __author__ = 'shaozhiqi' # 当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十二)之Error Handling with Exceptions
The ideal time to catch an error is at compile time, before you even try to run the program. However ...
- python画图——雪花(科赫曲线)
科赫曲线是一种分形,其形态非常像雪花,因此又被称作科赫雪花.雪花曲线. 下面是用python的turtle包让我们来实时画一个 import turtledef koch(t,n): #定义一个函数 ...
- B - How Many Equations Can You Find dfs
Now give you an string which only contains 0, 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9.You are asked to add the sig ...
- 1. git 本地给远程仓库创建分支 三步法
命令如下: 1:本地创建分支dev 1 2 Peg@PEG-PC /D/home/myself/Symfony (master) $ git branch dev 2:下面是把本地分支提交到远程仓库 ...
- UML 建模工具的安装与使用
一. 实验目的1) 学习使用 EA(Enterprise Architect) 开发环境创建模型的一般方法: 2) 理解 EA 界面布局和元素操作的一般技巧: 3) 熟悉 UML 中的各种图的建立和表 ...
- pytorch中tensor张量的创建
import torch import numpy as np print(torch.tensor([1,2,3])) print(torch.tensor(np.arange(15).reshap ...
- Java 多线程 -- volatile 山寨版的synchronized
在 多线程中,每个线程会把数据从主内存中拷贝到自己的工作内存中,当线程完成计算后,再把工作内存的数据更新到主内存中,或者当主内存主数据有更新是,线程会去主内存取最新数据.但是,当线程特别忙时,就不会去 ...
- c++使用cin、cout与c中使用scanf、printf进行输入输出的效率问题
在c++中,我们使用cin和cout进行输入输出会比用scanf和printf更加简洁和方便,但是当程序有大量IO的时候,使用cin和cout进行输入输出会比用scanf和printf更加耗时, 在数 ...
- PE文件学习(2)导入表导出表
转自:evil.eagle https://blog.csdn.net/evileagle/article/details/12176797 导出表是用来描述模块中的导出函数的结构,如果一个模块导出了 ...