爬蟲與Python:(四)爬蟲進階二之資料儲存(資料庫儲存)——7.Redis儲存
阿新 • • 發佈:2021-11-08
Redis是一個開源的使用ANSI C語言編寫、遵從BSD協議、支援網路,以及可基於記憶體也可持久化日誌、Key-Value資料庫、並提供多種語言的API。它通常被稱為資料結構伺服器,因為值(value)可以是字串(string)、雜湊(Hash)、列表(list)、集合(set)和有序集合(sorted set)等型別。
在Python爬蟲系統中,經常會使用Redis資料庫進行URL去重。
在爬蟲中應用Redis最多的是Redis的列表(list)和集合(set),所以下面主要以兩個為例進行講解。
安裝Redis庫
關於Redis資料庫的安裝,這裡省略。要在Python中操作Redis,需要安裝redis庫。可以使用pip命令來安裝,程式碼如下:
pip3 install redis
安裝好之後,新建一個test_redis.py檔案並輸入以下程式碼,執行後如果沒有報錯,則表示已安裝成功。
import redis
1.列表
Redis列表是簡單的字串列表,安裝插入順序排序。使用者可以新增一個元素到列表的頭部(左側)或尾部(右側),一個列最多包含232-1個元素(4294967295,每個列超過40億個元素)。下面示例中,使用了Ipushu方法將3個值插入名為test_list的列表中。
1 import redis 2 3 # redis插入列表 4 conn = redis.StrictRedis(host='127.0.0.1',port=6379) 5 6 conn.lpush("test_list",1) 7 conn.lpush("test_list",2) 8 conn.lpush("test_list",3)
與列表相關的基本命令如下表所示。
序號 | 命令 | 描述 |
1 | BLPOP key [key2] timeout | 移出並獲取列的第一個元素,如果列表沒有元素,就會阻塞列表直到等待超時或發現可彈出元素為止。 |
2 | BRPOP key [key2] timeout | 移出並獲取列表的最後一個元素,如果列表沒有元素就會阻塞列表直到等待超時或發現可彈出元素為止。 |
3 | BRPOPLPUSH source desination timeout | 從列表中彈出一個值,將彈出的元素插入另一個列表中並返回;如果列表沒有元素,就會阻塞列表直到等待超時或發現可彈出元素為止。 |
4 | LINDEX key index | 通過索引獲取列表中的元素 |
5 | LINSERT key BEFORE|AFTER pivot value | 在列表的元素前後插入元素 |
6 | LLEN key | 獲取列表長度 |
7 | LPOP key | 移出並獲取列表的第一個元素 |
8 | LPUSH key value1 [value2] | 將一個或多個值插入列表頭部 |
9 | LPUSHX key value | 將一個值插入已存在的列表頭部 |
10 | LRANGE key start stop | 獲取列表指定範圍內的元素 |
11 | LREM key count value | 移除列表元素 |
12 | LSET key index value | 通過索引設定列表元素值 |
13 | LTRIM key start stop | 對一個列表進行修剪,即讓列表只保留指定區間內的元素,不在指定區間內的元素將被刪除 |
14 | RPOP key | 移除列表的最後一個元素,返回值為移除的元素 |
15 | RPOPLPUSHsourcedestination | 移除列表的最後一個元素,並將該元素新增到另一個列表並返回 |
16 | RPUSH key value1 [value2] | 在列表中新增一個或多個值 |
17 | RPUSHX key value | 為已存在的列表新增值 |
2. 集合
Redis裡的set是String型別的無序集合。集合成員是唯一的,這就意味著集合中不能出現重複的資料。Redis中的集合是通過雜湊表實現的,所以新增、刪除、查詢的複雜度都是O(1)。集合中最大的成員數為232-1。下面的實力中,sadd方法將值插入名為test_list1的列表中。
1 import redis 2 3 conn = redis.StrictRedis(host='127.0.0.1',port=6379) 4 5 conn.sadd("test_list1",1) 6 conn.sadd("test_list1",2) 7 conn.sadd("test_list1",3)
下表列出了Redis集合的基本命令。
序號 | 命令 | 描述 |
1 | SADD key member1 [member2] | 向集合新增一個或多個成員 |
2 | SCARD key | 獲取集合的成員數 |
3 | SDIFF key [key2] | 返回給定所有集合的差集 |
4 | SDIFFSTORE destination key [key2] | 返回給定所有集合的差集並存儲在destination中 |
5 | SINTER key1 [key2] | 返回給定所有集合的交集 |
6 | SINTERdestination key [key2] | 返回給定所有集合的交集並存儲在destination中 |
7 | SISMEMBER key member | 判斷member元素是否是集合key的成員 |
8 | SMEMBERS key | 返回集合中所有成員 |
9 | SMOVE source destination member | 將member元素從source集合移動到destination集合 |
10 | SPOP key | 移除並返回集合中的一個隨機元素 |
11 | SRANDMEMBER key [count] | 返回集合中的一個或多個隨機數 |
12 | SREM key member1 [member2] | 移除集合中的一個或多個成員 |
13 | SUNION key1 [key2] | 返回所有給定的並集 |
14 | SUNIONSTORE destination key1 [key2] | 所有給定集合的並集儲存在destination集合中 |
15 | SSAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 |