python 之redis方法整合

为了方便模块的调用和查看,封装redis方法(常用)
1、python所有的redis方法都指向一个文件,方便更改和补充
2、不需要每次都查redis的语法,高内聚,低耦合
3、可以直接查看哪里调用了,方便review代码
ps:干货整理不易,转载请注明出处

redisCache= {   #setting里配置redis
    'host': '127.0.0.1',
    'port': 6379,
    'db': 1,
    'decode_responses':True #指定字符串类型
}

redisCache2= {
    'host': '127.0.0.1',
    'port': 6379,
    'db': 2,
    'decode_responses':True #指定字符串类型
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import redis
from xxx.settings import redisCache, redisCache2

#连接池放入全局,避免每次调用时都初始化
pool1 = redis.ConnectionPool(**redisCache)
pool2 = redis.ConnectionPool(**redisCache2)

class RedisQueue:
    def __init__(self, name, pool=pool1):
        self.db = redis.Redis(connection_pool=pool)
        self.key = name
   ###################################################      字符串方法       ###################################################
    #加入缓存,存在会替换
    def addStr(self, values): #value可以为复杂的json
        return self.db.set(self.key, values)

    # 不存在则加入,否则不变
    def addStrNX(self,values):  # value可以为复杂的json
        return self.db.setnx(self.key,values)

    # 加入缓存,存在会替换,并加入过期时间
    def addStrEX(self,time,  values):  # value可以为复杂的json
        return self.db.setex(self.key,time, values)

    #获取缓存
    def getStr(self):
        return self.db.get(self.key)

    #对value增值+count
    def incrNum(self,values=1):
        return self.db.incr(self.key,values)

    # 对value减值-count
    def decrNum(self,values=1):
        return self.db.decr(self.key,values)

    ###################################################      列表方法       ###################################################
    # 返回队列里面list元素的长度
    def listLen(self):

        return self.db.llen(self.key)

    # 添加新元素到队列的最右方
    def add2right(self, *values):

        self.db.rpush(self.key, *values) #rpush 如何没有列表会创建 rpushx不创建

    # 返回并删除队列里的第一个元素,如果队列为空返回的None
    def getAndPopFirst(self):

        item = self.db.lpop(self.key)
        return item

    # 获取列表对应索引的值
    def getItemIndex(self,index):
        indexValue = self.db.lindex(self.key, index)
        return indexValue

    #获取列表所有元素
    def getAllListItem(self): # 获取list所有元素 无key会返回[]
        allItemList=self.db.lrange(self.key, 0, -1)
        return allItemList

    # 获取列表start-end的元素,切头切尾
    def getListItem(self,start,end):
        itemList = self.db.lrange(self.key, start,end)
        return itemList

    #删除列表中value
    def delValue(self,value):
        self.db.lrem(self.key, 1, value)

    # 删除列表中指定数量的value
    def delMoreValue(self,count, value):#count为0表示删除所有值为value的元素
        self.db.lrem(self.key, count, value)

    # 获取并只保留start-end的元素,切头切尾
    def saveStart2end(self, start, end):
        start2endList = self.db.ltrim(self.key, start, end)
        return start2endList

    #批量获取删除
    def batchGetAndPop(self,n): #n>=1, 返回格式[['value'], True]
        p = self.db.pipeline()
        p.lrange(self.key, 0, n-1)
        p.ltrim(self.key, n, -1)
        data = p.execute()
        return data

    ###################################################      集合方法       ###################################################
    #加入集合中
    def add2set(self,*values):
        self.db.sadd(self.key, *values)

    #查看元素是否存在集合中
    def memberExist(self,member):

        check=self.db.sismember(self.key,member)
        return check

    ###################################################      散列方法       ###################################################
    #添加
    def set2hash(self,key,value):

        self.db.hset(self.key, key,value)

    #不存在才添加
    def set2hashNX(self,key,value):

        self.db.hsetnx(self.key, key,value)

    # 批量添加
    def batchSet2hash(self, mapping):
        self.db.hmset(self.key, mapping)

    #获取key对应的value
    def getValue(self,key):
        value=self.db.hget(self.key, key) #key不存在会返回None
        return value

    # 批量获取多个key对应的value
    def batchGetValue(self, keyList):
        value = self.db.hmget(self.key, keyList) #key不存在会返回None ['a', 's', None, None]
        return value

    # 删除key-value
    def delKeyValue(self, *keys):
        self.db.hdel(self.key, *keys)


    #判断散列中是否存在
    def keyExist(self,key):
        check=self.db.hexists(self.key, key)
        return check

    # 获取所有key
    def getAllKey(self):
        check = self.db.hkeys(self.key)
        return check

    # 获取所有value
    def getAllValue(self):
        check = self.db.hvals(self.key)
        return check

    # 获取所有key-value
    def getAllKeyValue(self):
        check = self.db.hgetall(self.key)
        return check

    # key对应的value增长amount
    def increaseValue(self,key,amount): #针对值为数量使用 ,key不存在也可以直接加
        check = self.db.hincrby(self.key, key, amount)
        return check

    # 获取散列长度
    def getDicLen(self):
        check = self.db.hlen(self.key)
        return check

    ###################################################      通用方法       ###################################################
    # 查看过期时间
    def checkExpireTime(self):

        item = self.db.ttl(self.key)
        return item

    # 设置过期时间
    def setExpireTime(self,time):
        item = self.db.expire(self.key, time)
        return item
#另一个db,继承使用
class RedisStatistics(RedisQueue):
    def __init__(self, name):
        super().__init__(name, pool=pool2)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容