辞書やリストなどの一般的なデータ形式を redis データベースに保存する方法は?
これは特別な構文を持つ redis データベースにあります。
redis のセットの場合、渡される値は文字列のみであり、他のデータ形式は受け入れられません。
json.dumps(value) を使用して値を json 文字列に変換し、それを格納できます。
get 時は、get の結果に対して json.loads() を実行することで、set に格納されているデータの形式を実現し、元のデータ形式を get で取得することができます。
1. apps/config.py は、redis への接続に必要なパラメーターを格納します
REDIS_DB_URL={ 「ホスト」:「127.0.0.1」、 「ポート」:6379、 'デシベル':0, 'max_connections':100 }
2、apps/util/redis.py 操作redis
import redis
from apps.config import REDIS_DB_URL
import json
class OwerRedis:
__POOL=redis.ConnectionPool(**REDIS_DB_URL)
@property
def __connect(self):
r = redis.Redis(connection_pool=self.__POOL,decode_responses=True)
return r
def set(self,key,value,ex=None):
'''
:param key: 存进redis中的键
:param value: 存近redis中的值
1、通过json将value转成json字符串,这样value就可以是字典、列表等数据格式了
2、在get的时候,把json字符串转回数据格式,就可以直接使用
3、这样就可以不用去弄列表或字典的存和取的方法了
:param ex: 设置过期时间,单位秒,例子:7*24*60*60
:return:
'''
try:
#使用json将传递进来的value序列化成json字符串,这样就可以存字典和列表等
value = json.dumps(value)
if ex:
ret=self.__connect.set(key,value,ex=ex)
else:
ret=self.__connect.set(key,value)
return ret
except Exception as e:
return str(e)
def get(self,key):
'''
:param key: 要取值的键
1、因为在存值前,将值转成json字符串存进redis
2、所以取值后,将值转回原来的数据格式
:return:
'''
try:
ret = self.__connect.get(key)
if ret == None:
#当取的key不存在时,return None,json.loads必须传递字符串
return ret
ret = json.loads(ret)
return ret
except Exception as e:
return str(e)
3.使用
from apps.util.redis import OwerRedis
r = OwerRedis()
r.set('lhz',{'name':'lhz','age':12,'sex':'男'})
dic = r.get('lhz')
print(type(dic))
print(dic.get('name'))
print(dic.get('age'))
print(dic.get('sex'))
印刷結果:
<class 'dict'>
lhz
12
男