一、環境安裝
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