Flask は redis データベースを使用します - 接続プールの使用方法 - セットはどのような形式でデータを保存できますか

辞書やリストなどの一般的なデータ形式を 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

おすすめ

転載: blog.csdn.net/weixin_46371752/article/details/127587013