python之redis的使用及封裝


首先安裝 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

 

redis 基本命令詳見:https://www.runoob.com/w3cnote/python-redis-intro.html


免責聲明!

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



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