(廿三)Python:Redis儲存
Redis是一個基於記憶體的高效的(讀的速度是110000次/s,寫的速度是81000次/s)鍵值型非關係型資料庫,存取效率極高,支援多種儲存資料結構。Redis支援資料的備份,即master-slave模式的資料備份。
準備
Python操作Redis請安裝redis-py庫,直接使用命令pip3 install redis
安裝即可。
如果我們還需要多資料進行匯入/匯出工作我們還需要安裝RedisDump庫。由於它是基於Ruby實現的,所有我們需要先安裝Ruby:
- 下載 rubyinstaller 之後,解壓到新建立的目錄下:
- 雙擊 rubyinstaller-2.2.3.exe 檔案,啟動 Ruby 安裝嚮導。
- 點選 Next,繼續嚮導,記得勾選 Add Ruby executables to your PATH,直到 Ruby 安裝程式完成Ruby 安裝為止。
安裝好Ruby後我們使用gem install redis-dump
安裝RedisDump。但是安裝RedisDump時可能會出現如下圖所示問題:
發生這個錯誤的原因是沒有安裝DevKit,所以我們需要安裝它。下載地址:http://rubyinstaller.org/downloads
1、執行,解壓到一個目錄,例如:D:\DevKit
2、開啟命令列,切換到這個目錄;
3、執行命令:ruby dk.rb init
4、執行命令:ruby dk.rb install
執行以上4步後重新執行gem install redis-dump
安裝RedisDump即可。
連線Redis
redis-py提供兩個類Redis和StrictRedis用於實現Redis的命令,StrictRedis用於實現大部分官方的命令,並使用官方的語法和命令。Redis類是 StrictRedis的子類,它主要是用於向後相容舊版本。官方推薦使用StrictRedis類。
from redis import StrictRedis redis = StrictRedis(host='localhost',db=3,port=6379)#選擇db3,redis沒有密碼預設為None redis.set('age',20) print(redis.get('age'))#往db3中設定age=3,列印驗證
觀察StrictRedis的__init__方法我們可以發現StrictRedis類使用host和port等引數構造一個ConnectionPool,所以我們可以直接將ConnetcionPool作為引數傳入。
原始碼如下:
def __init__(self, host='localhost', port=6379,db=0, password=None,connection_pool=None):
if not connection_pool:#判斷是否傳入connection_pool作為引數
#其他程式碼
connection_pool = ConnectionPool(**kwargs)#構建ConnectionPool
self.connection_pool = connection_pool
示例程式碼:
from redis import StrictRedis,ConnectionPool
pool = ConnectionPool(host='localhost',port=6379,db=3,password=None)
redis = StrictRedis(connection_pool=pool)
redis.set('name','Jake')
print(redis.get('name'))
ConnectionPool支援通過URL構建,格式有以下3種:
redis://[:password]@host:port/db #redis tcp連線
rediss://[:password]@host:port/db #redis tcp+ssl連線
unix://[:password]@path/to/socket.sock?db=db #redis unix socket連線
示例程式碼:
from redis import StrictRedis,ConnectionPool
url = 'redis://@localhost:6379/3'
pool = ConnectionPool.from_url(url)#通過url構建ConnectionPool
redis = StrictRedis(connection_pool=pool)
redis.set('addr','beijing')
print(redis.get('addr'))
鍵操作
下表總結了鍵的一些判斷和操作方法。
方法 |
作用 |
引數說明 |
示例 |
示例說明 |
示例結果 |
---|---|---|---|---|---|
|
判斷一個鍵是否存在 |
|
|
是否存在 |
|
|
刪除一個鍵 |
|
|
刪除 |
1 |
|
判斷鍵型別 |
|
|
判斷 |
|
|
獲取所有符合規則的鍵 |
|
|
獲取所有以 |
|
|
獲取隨機的一個鍵 |
|
獲取隨機的一個鍵 |
|
|
|
重新命名鍵 |
|
|
將 |
|
|
獲取當前資料庫中鍵的數目 |
|
獲取當前資料庫中鍵的數目 |
100 |
|
|
設定鍵的過期時間,單位為秒 |
|
|
將 |
|
|
獲取鍵的過期時間,單位為秒,-1表示永久不過期 |
|
|
獲取 |
-1 |
|
將鍵移動到其他資料庫 |
|
|
將 |
|
|
刪除當前選擇資料庫中的所有鍵 |
|
刪除當前選擇資料庫中的所有鍵 |
|
|
|
刪除所有資料庫中的所有鍵 |
|
刪除所有資料庫中的所有鍵 |
|
Redis支援最基本的鍵值對形式儲存,用法總結如下表所示。
方法 |
作用 |
引數說明 |
示例 |
示例說明 |
示例結果 |
---|---|---|---|---|---|
|
給資料庫中鍵為 |
|
|
給 |
|
|
返回資料庫中鍵為 |
|
|
返回 |
|
|
給資料庫中鍵為 |
|
|
賦值 |
|
|
返回多個鍵對應的 |
|
|
返回 |
|
|
如果不存在這個鍵值對,則更新 |
|
|
如果 |
第一次執行結果是 |
|
設定可以對應的值為 |
|
|
將 |
|
|
設定指定鍵的 |
|
|
設定 |
11,修改後的字串長度 |
|
批量賦值 |
|
|
將 |
|
|
鍵均不存在時才批量賦值 |
|
|
在 |
|
|
鍵為 |
|
|
|
1,即修改後的值 |
|
鍵為 |
|
|
|
-1,即修改後的值 |
|
鍵為 |
|
|
向鍵為 |
13,即修改後的字串長度 |
|
返回鍵為 |
|
|
返回鍵為 |
|
|
獲取鍵的 |
|
|
返回鍵為 |
|
Redis還提供了列表儲存,列表內的元素可以重複,而且可以從兩端儲存,用法如下表所示。
方法 |
作用 |
引數說明 |
示例 |
示例說明 |
示例結果 |
---|---|---|---|---|---|
|
在鍵為 |
|
|
向鍵為 |
3,列表大小 |
|
在鍵為 |
|
|
向鍵為 |
4,列表大小 |
|
返回鍵為 |
|
|
返回鍵為 |
4 |
|
返回鍵為 |
|
|
返回起始索引為1終止索引為3的索引範圍對應的列表 |
|
|
擷取鍵為 |
|
|
保留鍵為 |
|
|
返回鍵為 |
|
|
返回鍵為 |
b’2′ |
|
給鍵為 |
|
|
將鍵為 |
|
|
刪除 |
|
|
將鍵為 |
1,即刪除的個數 |
|
返回並刪除鍵為 |
|
|
返回並刪除名為 |
|
|
返回並刪除鍵為 |
|
|
返回並刪除名為 |
|
|
返回並刪除名稱在 |
|
|
返回並刪除鍵為 |
|
|
返回並刪除鍵為 |
|
|
返回並刪除名為 |
|
|
返回並刪除名稱為 |
|
|
將鍵為 |
|
Redis還提供了集合儲存,集合中的元素都是不重複的,用法如下表所示。
方法 |
作用 |
引數說明 |
示例 |
示例說明 |
示例結果 |
---|---|---|---|---|---|
|
向鍵為 |
|
|
向鍵為 |
3,即插入的資料個數 |
|
從鍵為 |
|
|
從鍵為 |
1,即刪除的資料個數 |
|
隨機返回並刪除鍵為 |
|
|
從鍵為 |
|
|
從 |
|
|
從鍵為 |
|
|
返回鍵為 |
|
|
獲取鍵為 |
3 |
|
測試 |
|
|
判斷 |
|
|
返回所有給定鍵的集合的交集 |
|
|
返回鍵為 |
|
|
求交集並將交集儲存到 |
|
|
求鍵為 |
1 |
|
返回所有給定鍵的集合的並集 |
|
|
返回鍵為 |
|
|
求並集並將並集儲存到 |
|
|
求鍵為 |
3 |
|
返回所有給定鍵的集合的差集 |
|
|
返回鍵為 |
|
|
求差集並將差集儲存到 |
|
|
求鍵為tags |
3 |
|
返回鍵為 |
|
|
返回鍵為 |
|
|
隨機返回鍵為 |
|
|
隨機返回鍵為 |
有序集合比集合多了一個分數字段,利用它可以對集合中的資料進行排序,其用法總結如下表所示。
方法 |
作用 |
引數說明 |
示例 |
示例說明 |
示例結果 |
---|---|---|---|---|---|
|
向鍵為 |
|
|
向鍵為 |
2,即新增的元素個數 |
|
刪除鍵為 |
|
|
從鍵為 |
1,即刪除的元素個數 |
|
如果在鍵為 |
|
|
鍵為 |
98.0,即修改後的值 |
|
返回鍵為 |
|
|
得到鍵為 |
1 |
|
返回鍵為 |
|
|
得到鍵為 |
2 |
|
返回鍵為 |
|
|
返回鍵為 |
|
|
返回鍵為 |
|
|
返回鍵為 |
|
|
返回鍵為 |
|
|
返回鍵為 |
2 |
|
返回鍵為 |
|
|
獲取鍵為 |
3 |
|
刪除鍵為 |
|
|
刪除鍵為 |
1,即刪除的元素個數 |
|
刪除鍵為 |
|
|
刪除 |
1,即刪除的元素個數 |
Redis還提供了散列表的資料結構,我們可以用name
指定一個散列表的名稱,表記憶體儲了各個鍵值對,用法總結如下表所示。
表5-10 雜湊操作
方法 |
作用 |
引數說明 |
示例 |
示例說明 |
示例結果 |
---|---|---|---|---|---|
|
向鍵為 |
|
|
向鍵為 |
1,即新增的對映個數 |
|
如果對映鍵名不存在,則向鍵為 |
|
|
向鍵為 |
1,即新增的對映個數 |
|
返回鍵為 |
|
|
獲取鍵為 |
5 |
|
返回鍵為 |
|
|
獲取鍵為 |
|
|
向鍵為 |
|
|
向鍵為 |
|
|
將鍵為 |
|
|
|
6,修改後的值 |
|
鍵為 |
|
|
鍵為 |
|
|
在鍵為 |
|
|
從鍵為 |
|
|
從鍵為 |
|
|
從鍵為 |
6 |
|
從鍵為 |
|
|
從鍵為 |
|
|
從鍵為 |
|
|
從鍵為 |
|
|
從鍵為 |
|
|
從鍵為 |
|