python操作redis數據


一、環境安裝

1、redispy安裝

(automatic) C:\Users\Administrator>pip install redis

2、檢測是否安裝成功

(automatic) C:\Users\Administrator>python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>>

二、python操作redis

1、創建基類

主要用於連接數據庫、數據庫單例:

import redis

class RedisBase:

    def __new__(cls, *args, **kwargs):
        """單例模式"""
        if not hasattr(cls, "instance"):
            cls.instance = super(RedisBase, cls).__new__(cls, *args, **kwargs)
        return cls.instance

    def __init__(self):
        """每一個數據庫實例管理一個連接池"""
        pool = redis.ConnectionPool(host='192.168.0.104',port=6379,db=0,password='xxx')
        self.r=redis.Redis(connection_pool=pool)

2、String操作

class RedisString(RedisBase):

    def set(self):
        """設置值"""
        result=self.r.set('widh',58)
        return result

    def get(self):
        """獲取值"""
        result=self.r.get('width')
        return result

    def mset(self):
        """設置多個鍵值對"""
        result=self.r.mset(
            {
                'salary1':5000,
                'salary2':6000
            }
        )
        return result

    def mget(self):
        """獲取多個值"""
        result=self.r.mget(
            [
                'salary1',
                'salary2'
            ]
        )
        return result

    def delete(self):
        """刪除鍵值"""
        result=self.r.delete('salary1')
        return result

    def incr(self):
        result=self.r.incr('salary1',20)
        return result

2、List操作

class RedisList(RedisBase):

    def lpush(self):
        result=self.r.lpush(
            'l1',*[1,2,3,4,5]
        )
        return result

    def lpop(self):
        """移除最左邊的數據並返回"""
        result=self.r.lpop('l1')
        return result

    def lrange(self):
        """獲取指定長度的數據"""
        result=self.r.lrange('l1',0,-1)
        return result

3、Set操作

class RedisSet(RedisBase):

    def sadd(self):
        """添加集合,返回的是成員的個數"""
        result=self.r.sadd('set1',*[1,2,3,4,5])
        return result

    def sismember(self):
        """判斷一個成員是否是集合的成員,返回布爾值"""
        result=self.r.sismember('set1',2)
        return result

    def smembers(self):
        """返回集合的所有成員"""
        result=self.r.smembers('set1')
        return result

    def sdiff(self):
        """返回與其它集合的差異元素"""
        result=self.r.sdiff('s5','s7')
        return result

    def sinder(self):
        """返回幾個集合的交集"""
        result=self.r.sinter('s5','s7')
        return result

    def sunion(self):
        """返回幾個集合的並集"""
        result=self.r.sunion('s5','s7')
        return result

4、完整實例

import redis

class RedisBase:

    def __new__(cls, *args, **kwargs):
        """單例模式"""
        if not hasattr(cls, "instance"):
            cls.instance = super(RedisBase, cls).__new__(cls, *args, **kwargs)
        return cls.instance

    def __init__(self):
        """每一個數據庫實例管理一個連接池"""
        pool = redis.ConnectionPool(host='192.168.0.104',port=6379,db=0,password='bright123')
        self.r=redis.Redis(connection_pool=pool)

class RedisString(RedisBase):

    def set(self):
        """設置值"""
        result=self.r.set('widh',58)
        return result

    def get(self):
        """獲取值"""
        result=self.r.get('width')
        return result

    def mset(self):
        """設置多個鍵值對"""
        result=self.r.mset(
            {
                'salary1':5000,
                'salary2':6000
            }
        )
        return result

    def mget(self):
        """獲取多個值"""
        result=self.r.mget(
            [
                'salary1',
                'salary2'
            ]
        )
        return result

    def delete(self):
        """刪除鍵值"""
        result=self.r.delete('salary1')
        return result

    def incr(self):
        result=self.r.incr('salary1',20)
        return result

class RedisList(RedisBase):

    def lpush(self):
        result=self.r.lpush(
            'l1',*[1,2,3,4,5]
        )
        return result

    def lpop(self):
        """移除最左邊的數據並返回"""
        result=self.r.lpop('l1')
        return result

    def lrange(self):
        """獲取指定長度的數據"""
        result=self.r.lrange('l1',0,-1)
        return result

class RedisSet(RedisBase):

    def sadd(self):
        """添加集合,返回的是成員的個數"""
        result=self.r.sadd('set1',*[1,2,3,4,5])
        return result

    def sismember(self):
        """判斷一個成員是否是集合的成員,返回布爾值"""
        result=self.r.sismember('set1',2)
        return result

    def smembers(self):
        """返回集合的所有成員"""
        result=self.r.smembers('set1')
        return result

    def sdiff(self):
        """返回與其它集合的差異元素"""
        result=self.r.sdiff('s5','s7')
        return result

    def sinder(self):
        """返回幾個集合的交集"""
        result=self.r.sinter('s5','s7')
        return result

    def sunion(self):
        """返回幾個集合的並集"""
        result=self.r.sunion('s5','s7')
        return result

def main():
    rs=RedisString()
    rs1=RedisString()
    rl=RedisList()
    rl1=RedisList()
    rs=RedisSet()
    rs1=RedisSet()
    print(rs)
    print(rs1)
    print(rl)
    print(rl1)
    print(rs)
    print(rs1)
    # rs.set()
    # rs.mset()
    # print( rs.mget())
    # print(rs.delete())
    # print(rs.incr())
    # print(rl.lpush())
    # print(rl.lpop())
    # print(rl.lrange())
    # print(rs.sadd())
    # print(rs1.sismember())
    # print(rs.smembers())
    # print(rs.sdiff())
    # print(rs.sinder())
    print(rs.sunion())

if __name__ == '__main__':
    main()
實例

更多參考:

https://redis-py.readthedocs.io/en/latest/#contents

https://github.com/WoLpH/redis-py

三、Pipelines

  pipline 是Redis類的子類,它為在單個請求中向服務器緩沖多個命令提供支持。

  redis-py默認在執行每次請求都會創建(連接池申請連接)和斷開(歸還連接池)一次連接操作,如果想要在一次請求中指定多個命令,則可以使用pipline實現一次請求指定多個命令,並且默認情況下一次pipline 是原子性操作。

import redis

pool = redis.ConnectionPool(host='192.168.0.104',port=6379,db=0,password='xxx')

r = redis.Redis(connection_pool=pool)

pipe = r.pipeline()#默認事務開啟,具備原子性

pipe.set('rr1', 'v1')
pipe.set('rr2', 'v2')

pipe.execute()

更多參考:https://github.com/WoLpH/redis-py

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM