首先安裝 redis 模塊
Python 要使用 redis,需要先安裝 redis 模塊:
sudo pip3 install redis
或
sudo easy_install redis
或
sudo python setup.py install
redis 提供兩個類 Redis 和 StrictRedis, StrictRedis 用於實現大部分官方的命令,Redis 是 StrictRedis 的子類,用於向后兼用舊版本。
redis 取出的結果默認是字節,我們可以設定 decode_responses=True 改成字符串。
實例:
import redis # 導入redis 模塊 r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'runoob') # 設置 name 對應的值 print(r['name']) print(r.get('name')) # 取出鍵 name 對應的值 print(type(r.get('name'))) # 查看類型
輸出結果為:
runoob runoob <class 'str'>
連接池
redis-py 使用 connection pool 來管理對一個 redis server 的所有連接,避免每次建立、釋放連接的開銷。
默認,每個Redis實例都會維護一個自己的連接池。可以直接建立一個連接池,然后作為參數 Redis,這樣就可以實現多個 Redis 實例共享一個連接池。
實例
import redis # 導入redis 模塊 pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'runoob') # 設置 name 對應的值 print(r.get('name')) # 取出鍵 name 對應的值
下面為封裝好的redis腳本
import redis # 不適用於模糊搜索 class MyRedis(): def __init__(self, host = "XXX", port = 6379, password = 'XXX'): pools = redis.ConnectionPool(host= host, port= port, password= password, decode_responses=True) self.__redis = redis.StrictRedis(connection_pool=pools) # 在 Redis 中設置值,默認,不存在則創建,存在則修改。 def set(self, key, value): return self.__redis.set(key, value) # 取出鍵對應的值 def get(self, key): if self.__redis.exists(key): return self.__redis.get(key) else: return None # 獲取有序集合中所有元素 def zrange(self, key): if self.__redis.exists(key): return self.__redis.zrange(key,0,-1,desc=False, withscores=True) else: return None # 獲取值的索引號 def zrank(self, key): if self.__redis.exists(key): return self.__redis.zrank(key) else: return None # 按照分數范圍獲取name對應的有序集合的元素 def zrangebyscore(self, key): if self.__redis.exists(key): return self.__redis.zrangebyscore(key, 0, -1, withscores=True) else: return None # 按照分數范圍獲取有序集合的元素並排序(默認從大到小排序) def zrevrange(self, key): if self.__redis.exists(key): return self.__redis.zrevrange(key, 0, -1) else: return None # 刪除鍵值對 def delete(self,key): if self.__redis.exists(key): return self.__redis.delete(key) else: return None # 獲取key對應hash的所有鍵值 def hgetall(self, key): if self.__redis.exists(key): return self.__redis.hgetall(key) else: return None # 統計返回的總個數 def rcount(self, re, key): if self.__redis.exists(key): sum = 0 for i in re: print(i) sum += 1 print("總共有%s個" % (sum)) if __name__ =="__main__": MyR = MyRedis() key = "XXX" result = MyR.zrange(key) print(result)
常見報錯:
1、UserWarning: redis-py works best with hiredis. Please consider installing warnings.warn(msg)
解決方法:安裝 hiredis庫
2、redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of value
如果是 MyR.zrange 可嘗試換成 MyR.hgetall