¿Cómo almacenar formatos de datos comunes como diccionarios y listas en la base de datos redis?
Esto está en la base de datos redis, que tiene una sintaxis especial.
Para el conjunto en redis, el valor pasado solo puede ser una cadena y no se aceptan otros formatos de datos.
Podemos usar json.dumps(value) para convertir el valor en una cadena json y luego almacenarlo.
Al obtener, json.loads() se ejecuta en el resultado de get, de modo que se pueda realizar el formato de los datos almacenados en el conjunto, y get pueda recuperar el formato de datos original.
1. apps/config.py almacena los parámetros necesarios para conectarse a redis
REDIS_DB_URL={ 'host':'127.0.0.1', 'puerto':6379, 'db':0, 'max_connections':100 }
2, aplicaciones/util/redis.py operación 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. Uso
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'))
Imprimir resultado:
<clase 'dict'>
lhz
12
男