今天发现,使用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中的坑的更多相关文章

  1. 分布式爬虫scrapy-redis中settings.py中的配置信息

    SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 使用scrapy-redis的调度器 ITEM_PIPELINES = { 'sc ...

  2. php安装扩展redis淌过的坑

    php安装扩展redis淌过的坑 php扩展 redis cd /usr/local/src/ wget https://github.com/nicolasff/phpredis/archive/2 ...

  3. Torch-RNN运行过程中的坑 [2](Lua的string sub函数,读取中文失败,乱码?)

    0.踩坑背景 仍然是torch-rnn/LanguageModel.lua文件中的一些问题,仍然是这个狗血的LM:encode_string函数: function LM:encode_string( ...

  4. linux上部署redis实现与Python上的redis交互(有坑)

    1.概念 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件 2.linux安装redis 2.1yum源安装redis(不推荐) #前提得配置好阿里 ...

  5. 饿了么这样跳过Redis Cluster遇到的“坑”

    内容来源:2017 年 8 月 12 日,饿了么高级Python工程师黄光星在“CRUG 2017北京活动”进行<Redis Cluster运维方案>演讲分享.IT 大咖说(微信id:it ...

  6. 决策树python建模中的坑 :ValueError: Expected 2D array, got 1D array instead:

    决策树python建模中的坑 代码 #coding=utf-8 from sklearn.feature_extraction import DictVectorizerimport csvfrom ...

  7. python调用py中rar的路径问题。

    1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...

  8. Django 中 如何使用 settings.py 中的常量

    在用django 框架开发 python web 程序的时候 , 在模板页面经常会用到 settings.py 中设置的常量,比如MEDIA_URL, 我尝试过在模板页面用类似如下的方式 程序代码 { ...

  9. PHP redis Api 中文文档

    phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...

  10. django访问sqlserver中的坑

    首先不用说先安装django-sqlserver    pip install django-sqlserver 然后在settings.py中修改'ENGINE': 'sqlserver_ado', ...

随机推荐

  1. python3(三十) Enum

    """ """ __author__ = 'shaozhiqi' # 当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: ...

  2. 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 ...

  3. python画图——雪花(科赫曲线)

    科赫曲线是一种分形,其形态非常像雪花,因此又被称作科赫雪花.雪花曲线. 下面是用python的turtle包让我们来实时画一个 import turtledef koch(t,n): #定义一个函数 ...

  4. 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 ...

  5. 1. git 本地给远程仓库创建分支 三步法

    命令如下: 1:本地创建分支dev 1 2 Peg@PEG-PC /D/home/myself/Symfony (master) $ git branch dev 2:下面是把本地分支提交到远程仓库 ...

  6. UML 建模工具的安装与使用

    一. 实验目的1) 学习使用 EA(Enterprise Architect) 开发环境创建模型的一般方法: 2) 理解 EA 界面布局和元素操作的一般技巧: 3) 熟悉 UML 中的各种图的建立和表 ...

  7. pytorch中tensor张量的创建

    import torch import numpy as np print(torch.tensor([1,2,3])) print(torch.tensor(np.arange(15).reshap ...

  8. Java 多线程 -- volatile 山寨版的synchronized

    在 多线程中,每个线程会把数据从主内存中拷贝到自己的工作内存中,当线程完成计算后,再把工作内存的数据更新到主内存中,或者当主内存主数据有更新是,线程会去主内存取最新数据.但是,当线程特别忙时,就不会去 ...

  9. c++使用cin、cout与c中使用scanf、printf进行输入输出的效率问题

    在c++中,我们使用cin和cout进行输入输出会比用scanf和printf更加简洁和方便,但是当程序有大量IO的时候,使用cin和cout进行输入输出会比用scanf和printf更加耗时, 在数 ...

  10. PE文件学习(2)导入表导出表

    转自:evil.eagle https://blog.csdn.net/evileagle/article/details/12176797 导出表是用来描述模块中的导出函数的结构,如果一个模块导出了 ...