您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python3爬蟲中Redis數(shù)據(jù)庫的基本操作有哪些,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
Redis是一個(gè)基于內(nèi)存的高效的鍵值型非關(guān)系型數(shù)據(jù)庫,存取效率極高,而且支持多種存儲數(shù)據(jù)結(jié)構(gòu),使用也非常簡單。
1. 準(zhǔn)備工作
在開始之前,請確保已經(jīng)安裝好了Redis及RedisPy庫。如果要做數(shù)據(jù)導(dǎo)入/導(dǎo)出操作的話,還需要安裝RedisDump。如果沒有安裝,可以參考第1章。
2. Redis和StrictRedis
RedisPy庫提供兩個(gè)類Redis和StrictRedis來實(shí)現(xiàn)Redis的命令操作。
StrictRedis實(shí)現(xiàn)了絕大部分官方的命令,參數(shù)也一一對應(yīng),比如set()方法就對應(yīng)Redis命令的set方法。而Redis是StrictRedis的子類,它的主要功能是用于向后兼容舊版本庫里的幾個(gè)方法。為了做兼容,它將方法做了改寫,比如lrem()方法就將value和num參數(shù)的位置互換,這和Redis命令行的命令參數(shù)不一致。
官方推薦使用StrictRedis,所以本節(jié)中我們也用StrictRedis類的相關(guān)方法作演示。
3. 連接Redis
現(xiàn)在我們已經(jīng)在本地安裝了Redis并運(yùn)行在6379端口,密碼設(shè)置為foobared。那么,可以用如下示例連接Redis并測試:
from redis import StrictRedis redis = StrictRedis(host='localhost', port=6379, db=0, password='foobared') redis.set('name', 'Bob') print(redis.get('name'))
這里我們傳入了Redis的地址、運(yùn)行端口、使用的數(shù)據(jù)庫和密碼信息。在默認(rèn)不傳的情況下,這4個(gè)參數(shù)分別為localhost、6379、0和None。首先聲明了一個(gè)StrictRedis對象,接下來調(diào)用set()方法,設(shè)置一個(gè)鍵值對,然后將其獲取并打印。
運(yùn)行結(jié)果如下:
b'Bob'
這說明我們連接成功,并可以執(zhí)行set()和get()操作了。
當(dāng)然,我們還可以使用ConnectionPool來連接,示例如下:
from redis import StrictRedis, ConnectionPool pool = ConnectionPool(host='localhost', port=6379, db=0, password='foobared') redis = StrictRedis(connection_pool=pool)
這樣的連接效果是一樣的。觀察源碼可以發(fā)現(xiàn),StrictRedis內(nèi)其實(shí)就是用host和port等參數(shù)又構(gòu)造了一個(gè)ConnectionPool,所以直接將ConnectionPool當(dāng)作參數(shù)傳給StrictRedis也一樣。
另外,ConnectionPool還支持通過URL來構(gòu)建。URL的格式支持有如下3種:
redis://[:password]@host:port/db rediss://[:password]@host:port/db unix://[:password]@/path/to/socket.sock?db=db
這3種URL分別表示創(chuàng)建Redis TCP連接、Redis TCP+SSL連接、Redis UNIX socket連接。我們只需要構(gòu)造上面任意一種URL即可,其中password部分如果有則可以寫,沒有則可以省略。下面再用URL連接演示一下:
url = 'redis://:foobared@localhost:6379/0' pool = ConnectionPool.from_url(url) redis = StrictRedis(connection_pool=pool)
這里我們使用第一種連接字符串進(jìn)行連接。首先,聲明一個(gè)Redis連接字符串,然后調(diào)用from_url()方法創(chuàng)建ConnectionPool,接著將其傳給StrictRedis即可完成連接,所以使用URL的連接方式還是比較方便的。
4. 鍵操作
表5-5總結(jié)了鍵的一些判斷和操作方法。
表5-5 鍵的一些判斷和操作方法
5. 字符串操作
Redis支持最基本的鍵值對形式存儲,用法總結(jié)如表5-6所示。
表5-6 鍵值對形式存儲
6. 列表操作
Redis還提供了列表存儲,列表內(nèi)的元素可以重復(fù),而且可以從兩端存儲,用法如表5-7所示。
表5-7 列表操作
7. 集合操作
Redis還提供了集合存儲,集合中的元素都是不重復(fù)的,用法如表5-8所示。
表5-8 集合操作
8. 有序集合操作
有序集合比集合多了一個(gè)分?jǐn)?shù)字段,利用它可以對集合中的數(shù)據(jù)進(jìn)行排序,其用法總結(jié)如表5-9所示。
表5-9 有序集合操作
9. 散列操作
Redis還提供了散列表的數(shù)據(jù)結(jié)構(gòu),我們可以用name指定一個(gè)散列表的名稱,表內(nèi)存儲了各個(gè)鍵值對,用法總結(jié)如表5-10所示。
表5-10 散列操作
10. RedisDump
RedisDump提供了強(qiáng)大的Redis數(shù)據(jù)的導(dǎo)入和導(dǎo)出功能,現(xiàn)在就來看下它的具體用法。
首先,確保已經(jīng)安裝好了RedisDump。
RedisDump提供了兩個(gè)可執(zhí)行命令:redis-dump用于導(dǎo)出數(shù)據(jù),redis-load用于導(dǎo)入數(shù)據(jù)。
redis-dump
首先,可以輸入如下命令查看所有可選項(xiàng):
redis-dump -h
運(yùn)行結(jié)果如下:
Usage: redis-dump [global options] COMMAND [command options] -u, --uri=S Redis URI (e.g. redis://hostname[:port]) -d, --database=S Redis database (e.g. -d 15) -s, --sleep=S Sleep for S seconds after dumping (for debugging) -c, --count=S Chunk size (default: 10000) -f, --filter=S Filter selected keys (passed directly to redis' KEYS command) -O, --without_optimizations Disable run time optimizations -V, --version Display version -D, --debug --nosafe
其中-u代表Redis連接字符串,-d代表數(shù)據(jù)庫代號,-s代表導(dǎo)出之后的休眠時(shí)間,-c代表分塊大小,默認(rèn)是10000,-f代表導(dǎo)出時(shí)的過濾器,-O代表禁用運(yùn)行時(shí)優(yōu)化,-V用于顯示版本,-D表示開啟調(diào)試。
我們拿本地的Redis做測試,運(yùn)行在6379端口上,密碼為foobared,導(dǎo)出命令如下:
redis-dump -u :foobared@localhost:6379
如果沒有密碼的話,可以不加密碼前綴,命令如下:
redis-dump -u localhost:6379
運(yùn)行之后,可以將本地0至15號數(shù)據(jù)庫的所有數(shù)據(jù)輸出出來,例如:
{"db":0,"key":"name","ttl":-1,"type":"string","value":"James","size":5} {"db":0,"key":"name2","ttl":-1,"type":"string","value":"Durant","size":6} {"db":0,"key":"name3","ttl":-1,"type":"string","value":"Durant","size":6} {"db":0,"key":"name4","ttl":-1,"type":"string","value":"HelloWorld","size":10} {"db":0,"key":"name5","ttl":-1,"type":"string","value":"James","size":5} {"db":0,"key":"name6","ttl":-1,"type":"string","value":"James","size":5} {"db":0,"key":"age","ttl":-1,"type":"string","value":"1","size":1} {"db":0,"key":"age2","ttl":-1,"type":"string","value":"-5","size":2}
每條數(shù)據(jù)都包含6個(gè)字段,其中db即數(shù)據(jù)庫代號,key即鍵名,ttl即該鍵值對的有效時(shí)間,type即鍵值類型,value即內(nèi)容,size即占用空間。
如果想要將其輸出為JSON行文件,可以使用如下命令:
redis-dump -u :foobared@localhost:6379 > ./redis_data.jl
這樣就可以成功將Redis的所有數(shù)據(jù)庫的所有數(shù)據(jù)導(dǎo)出成JSON行文件了。
另外,可以使用-d參數(shù)指定某個(gè)數(shù)據(jù)庫的導(dǎo)出,例如只導(dǎo)出1號數(shù)據(jù)庫的內(nèi)容:
redis-dump -u :foobared@localhost:6379 -d 1 > ./redis.data.jl
如果只想導(dǎo)出特定的內(nèi)容,比如想導(dǎo)出以adsl開頭的數(shù)據(jù),可以加入-f參數(shù)用來過濾,命令如下:
redis-dump -u :foobared@localhost:6379 -f adsl:* > ./redis.data.jl
其中-f參數(shù)即Redis的keys命令的參數(shù),可以寫一些過濾規(guī)則。
redis-load
同樣,我們可以首先輸入如下命令查看所有可選項(xiàng):
redis-load -h
運(yùn)行結(jié)果如下:
redis-load --help Try: redis-load [global options] COMMAND [command options] -u, --uri=S Redis URI (e.g. redis://hostname[:port]) -d, --database=S Redis database (e.g. -d 15) -s, --sleep=S Sleep for S seconds after dumping (for debugging) -n, --no_check_utf8 -V, --version Display version -D, --debug --nosafe
其中-u代表Redis連接字符串,-d代表數(shù)據(jù)庫代號,默認(rèn)是全部,-s代表導(dǎo)出之后的休眠時(shí)間,-n代表不檢測UTF-8編碼,-V表示顯示版本,-D表示開啟調(diào)試。
我們可以將JSON行文件導(dǎo)入到Redis數(shù)據(jù)庫中:
< redis_data.json redis-load -u :foobared@localhost:6379
這樣就可以成功將JSON行文件導(dǎo)入到數(shù)據(jù)庫中了。
另外,下面的命令同樣可以達(dá)到同樣的效果:
cat redis_data.json | redis-load -u :foobared@localhost:6379
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python3爬蟲中Redis數(shù)據(jù)庫的基本操作有哪些內(nèi)容對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。