redis 哈希封装

import redis

Pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=11, max_connections=10)


# 封装Hash方法
class RedisDB:

    def __init__(self, key):  # key为表名

        self.conn = redis.Redis(connection_pool=Pool, decode_responses=True)
        self.key = key

    # 添加数据
    def set(self, dic):
        self.conn.hmset(self.key, dic)


    def get_values(self, *field):
        data_bytes = self.conn.hmget(self.key, field)
        if data_bytes != [None]:
            data = json.loads(data_bytes[0]) if len(data_bytes)==1 else \
                [i != None and json.loads(i) or i for i in data_bytes]
        else:
            data = {}
        return data

    # 获取全部`field` 和 `value
    def get_all(self):
        all = self.conn.hgetall(self.key)
        all_dict = {k: json.loads(v) for k, v in all.items()}
        return all_dict

    # 删除
    def hdel(self, *field):
        # 如果只传field ,会有解包错误, 而不执行代码的情况
        return self.conn.hdel(self.key, *field)

    # 查看所有的value
    def hvals(self):
        return self.conn.hvals(self.key)

    # 查看所有的field
    def hkeys(self):
        keys = self.conn.hkeys(self.key)
        keys_list = [i for i in keys]
        return keys_list

    # 查看有几个键值对
    def hlen(self):
        keys = self.conn.hlen(self.key)
        keys_list = [i for i in keys]
        return keys_list

    # 判断hash表中指定域是否存在,返回1,若key或field不存在则返回0;
    def hexists(self, field):
        return self.conn.hexists(self.key, field)

 

借鉴封装,返回值bytes修改str类型

posted @ 2020-12-09 15:46  小王八+1  阅读(87)  评论(0编辑  收藏  举报