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

时间: 2024-10-25 21:54:21

redis-py中的坑的相关文章

python中第三方库redis.py简介

1.几种连接方式介绍 """ Redis简介: 这是一个基于内存的高效的键值型非关系型数据库,存取效率极高,而且支持 多种存储数据结构,使用也比较简单. python中提供连接redis的第三方库redis.py. 在这个库中有两个类Redis和StrictRedis来实现Redis的命令操作. Redis是StrictRedis的子类,主要功能是向后兼容旧版本库里的几个方法. 在这里使用官方推荐的StrictRedis. """ from re

php安装扩展redis淌过的坑

php安装扩展redis淌过的坑 php扩展 redis 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过设置里的修改模板来改变新建文章的内容. cd /usr/local/src/ wget https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz tar zxvf phpredis-2.2.4.tar.gz cd 2.2.4.tar.gz /usr/local/bin/phpize ./configure --with

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

0.踩坑背景 仍然是torch-rnn/LanguageModel.lua文件中的一些问题,仍然是这个狗血的LM:encode_string函数: function LM:encode_string(s) local encoded = torch.LongTensor(#s) for i = 1, #s do local token = s:sub(i, i) local idx = self.token_to_idx[token] assert(idx ~= nil, 'Got invali

scrapy 中 settings.py 中字段的意思

# -*- coding: utf-8 -*- # Scrapy settings for fenbushi project## For simplicity, this file contains only settings considered important or# commonly used. You can find more settings consulting the documentation:## https://doc.scrapy.org/en/latest/topi

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

内容来源:2017 年 8 月 12 日,饿了么高级Python工程师黄光星在“CRUG 2017北京活动”进行<Redis Cluster运维方案>演讲分享.IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布. 摘要 本次演讲将介绍饿了么在运维Redis Cluster中遇到的一些坑和原理.还会讨论运维Redis Cluster的具体方案,包括标准化集群.快速应对机器故障.加速slot迁移等.其中将着重分析标准化集群如何治理Redis集群并帮助我们简

django中settings.py中变量的全局引用

在settings.py中添加自定义变量,可以通过setting.(点)变量名的方式访问,如: from django.conf import settings site_name = settings.SITE_NAME site_desc = settings.SITE_DESC 但是,如果遇到了一些频繁访问的变量,如:邮箱,网站标题,网站的描述,这样访问就很不方便,解决方法: 1.首先在settings.py中添加对应的变量: #网站信息 SITE_NAME="hupeng的个人博客&qu

Windows API中的坑

本文主页链接:Windows API中的坑 ExpandEnvironmentStrings 风险: 进程会继承其父进程的环境变量,在展开如%APPDATA%等目录时,有可能父进程对此环境变量进行过修改,那么可能你获取的就不是你想要的当前SESSION的%APPDATA%了. 建议: 使用SHGetFolderPath系列函数来做这件事. GetModuleFileName 风险: 在DLL中调用时,若传入的instance参数为NULL,那获取的将是加载DLL的进程的EXE的路径,若需要获取D

批量删除redis数据库中的key

在redis数据库中,如果大量以某些字段开头或结尾的key,一般都会用到命令keys进行模糊匹配.但是当我们想删除批量指定的keys,却犯愁了,因为redis没有提供相关的命令.那我们怎么操作能实现预期的效果呢? (1) 删除单个key 127.0.0.1:6379> del key 如果知道有限多个key的名字,以下操作也可以实现批量操作 127.0.0.1:6379> del key1 key2 key3 .... 当key的数量达到一定数量时,这个方法明显时不现实的. 注意:redis命

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

在用django 框架开发 python web 程序的时候 , 在模板页面经常会用到 settings.py 中设置的常量,比如MEDIA_URL, 我尝试过在模板页面用类似如下的方式 程序代码 {{CONSTANT_NAME}} 但 是,是没有效果的,后来只好采用了RequestContext 的方法,起始就是在 render_to_response 的时候,将settings.py 中常量,再次添加到一个 context 中去实现,这样在页面就能用另外一个名字去访问了,感觉很别扭,个人觉得

OpenResty--mysql,redis 项目中的应用

最近刚刚接手同事的OpenResty的项目,发现对mysql,redis的操作没有用连接池,故对此进行了改造. MYSQL 主要是通过mysql_pool.lua 和 dbutil.lua 来封装对数据库的操作 mysql_pool.lua: 1 module("mysql_pool", package.seeall) 2 3 local dbConfig = require"config" 4 local mysql = require("resty.m