文章目錄
- 前言
- 一、下載Python插件
- 二、創建項目
- 三、安裝 redis 庫
- 四、新建python軟件包
- 五、鍵操作
- 六、字符串操作
- 七、列表操作
- 八、集合操作
- 九、哈希表操作
- 十、有序集合操作
- 十一、完整代碼
- 1. 完整代碼
- 2. 項目下載
前言
本文是基于 Python 操作 Redis 數據庫的實戰指南,旨在通過分步教程與代碼示例,幫助開發者掌握 Redis 常見數據類型(字符串、列表、集合、哈希表、有序集合)的操作方法。內容覆蓋開發環境搭建、庫安裝、項目結構創建及核心功能代碼實現,適合 Python 初學者及 Redis 入門開發者參考。
一、下載Python插件
打開設置菜單:首先,點擊左上角的“文件”菜單,然后選擇“設置”選項。這將打開一個新窗口,顯示各種設置選項。
進入插件管理:在設置窗口左側的導航欄中,找到并點擊“插件”選項。這將帶你進入插件管理頁面。
搜索Python插件:在插件管理頁面頂部的搜索框中輸入“python”,然后按回車鍵進行搜索。這將列出與Python相關的所有插件。
選擇Python插件:從搜索結果中找到名為“Python”的插件,并點擊它。確保該插件旁邊的復選框被勾選,表示已啟用。
應用更改:完成上述步驟后,點擊右下角的“應用(A)”按鈕,然后點擊“確定”按鈕以保存更改并關閉設置窗口。
具體步驟如下圖所示:
二、創建項目
項目創建是 Python 開發的起始點,規范且合理地創建項目有助于組織代碼結構、管理項目資源。在開發與 Redis 交互的 Python 項目時,明確項目名稱、路徑以及選擇合適的環境類型,如 Virtualenv 虛擬環境,能有效隔離項目依賴,避免不同項目間的依賴沖突,為項目開發營造穩定的運行環境。下面詳細介紹創建 Python 項目的具體流程。
點擊“文件”菜單–>選擇“新建(N)”–>點擊“項目…”–>選擇“Python”項目類型–>輸入項目名稱和路徑–>選擇環境類型為“Virtualenv”–>指定虛擬環境路徑–>選擇基礎解釋器版本–>點擊“創建?”按鈕。
具體步驟如下圖所示:
三、安裝 redis 庫
Redis 庫是 Python 與 Redis 數據庫交互的橋梁。通過終端執行 pip install redis
命令(推薦使用阿里云鏡像源加速下載),可快速安裝官方提供的 Redis 客戶端庫。安裝完成后,需驗證庫是否導入成功(如在 Python 中執行 import redis 無報錯),確保后續代碼能夠調用 Redis 相關接口。
打開終端,執行如下命令安裝redis
庫。
pip install redis -i https://mirrors.aliyun.com/pypi/simple/
具體步驟如下圖所示:
四、新建python軟件包
在 Python 項目中,軟件包用于組織相關的模塊,有助于構建清晰的代碼結構,提高代碼的可維護性與復用性。當項目涉及復雜的功能模塊時,合理創建軟件包能夠更好地管理代碼邏輯。以下介紹在項目中新建 Python 軟件包的操作方法。
在項目視圖中找到并點擊項目名稱–>右鍵點擊項目名稱–>選擇“新建(N)”–>選擇“Python 軟件包”–>輸入軟件包名稱–>點擊“確定”按鈕。
具體步驟如下圖所示:
創建完成如下圖所示:
五、鍵操作
鍵操作是 Redis 數據管理的基礎,涉及鍵的創建、查詢、修改與刪除。核心方法包括:
SET/MSET
:設置單個或多個鍵值對;KEYS
:按模式匹配查詢鍵(如 k* 匹配以 k 開頭的鍵);EXPIRE/TTL
:設置鍵的生存時間及查詢剩余存活時間;RENAME
:重命名鍵;DELETE
:刪除單個或多個鍵。
通過這些操作,可高效管理 Redis 中的數據生命周期。
def key_operation():print("===========鍵操作===========")# 示例:給school鍵設置值為dy。set_result = r.set("school", "dy")print(set_result)print("===============")# 示例:給k1鍵設置值為v1,k2鍵設置值為v2,k3鍵設置值為v3。set_result1 = r.mset({"k1": "v1", "k2": "v2", "k3": "v3"})print(set_result1)print("===============")# 示例1:查看所有鍵。keys = r.keys("*")for key in keys:print(key.decode())print("===============")# 示例2:查看所有以k開頭的鍵。keys1 = r.keys("k*")for key in keys1:print(key.decode())print("===============")# 示例:查看scool鍵的值。school = r.get("school")print(school.decode() if school else None)print("===============")# 示例:查看k1、k2、k3鍵的值。mget = r.mget("k1", "k2", "k3")for s in mget:print(s.decode() if s else None)print("===============")# 示例:查看k1鍵的值的序列化版本。k1s = r.dump("k1")print(k1s)print("===============")# 示例1:查看school鍵是否存在。exists = r.exists("school")print(exists)# print(bool(exists))print("===============")# 示例2:查看k1、k2、k3、k4、k5鍵是否存在。exists1 = r.exists("k1", "k2", "k3", "k4", "k5")print(exists1)print("===============")# 示例:查看school鍵的值的類型。type_ = r.type("school").decode()print(type_)print("===============")# 示例:把school鍵重命名為new_school鍵。rename = r.rename("school", "new_school")print(rename)print("===============")# 示例:把k3鍵的生存時間設置為600秒。expire = r.expire("k3", 600)print(expire)print("===============")# 示例:查看k3鍵的剩余存活時間。ttl = r.ttl("k3")print(ttl)print("===============")# 示例:刪除k3鍵的存活時間。persist = r.persist("k3")print(persist)print("===============")# 示例1:刪除new_school鍵。del_ = r.delete("new_school")print(del_)print("===============")# 示例2:刪除k1、k2、k3鍵。del1 = r.delete("k1", "k2", "k3")print(del1)print("===============")
六、字符串操作
字符串是 Redis 最基礎的數據類型,支持原子性操作。核心方法包括:
GET/MGET
:獲取單個或多個字符串值;GETSET
:先獲取舊值再設置新值;STRLEN
:獲取字符串長度;SETRANGE
:按索引替換字符串內容;APPEND
:向字符串末尾追加內容。
這些操作適用于緩存簡單數據(如用戶信息、配置項)場景。
def string_operation():print("===========字符串操作===========")# 示例:給字符串鍵str1設置值為value1。set_result = r.set("str1", "value1")print(set_result)print("===============")# 示例:給字符串鍵str2、str3、str4分別設置值為value2、value3、value4。mset_result = r.mset({"str2": "value2", "str3": "value3", "str4": "value4"})print(mset_result)print("===============")# 示例:獲取字符串鍵str1的值。str1 = r.get("str1")print(str1.decode() if str1 else None)print("===============")# 示例:獲取字符串鍵str2、str3、str4的值。mget = r.mget("str2", "str3", "str4")for s in mget:print(s.decode() if s else None)print("===============")# 示例:獲取字符串鍵str1的舊值,并設置新值為new_value1。get_set = r.getset("str1", "new_value1")print(get_set.decode() if get_set else None)# 查看設置后的新值。str11 = r.get("str1")print(str11.decode() if str11 else None)print("===============")# 示例:獲取字符串鍵str1的值的長度。strlen = r.strlen("str1")print(strlen)print("===============")# 示例:獲取字符串鍵str1的索引0-5的值的內容。getrange = r.getrange("str1", 0, 5)print(getrange.decode() if getrange else None)print("===============")# 示例:把字符串鍵str1從索引2開始的后面三個字母的內容替換為aaa。setrange = r.setrange("str1", 2, "aaa")print(setrange)# 查看設置后的新值。str12 = r.get("str1")print(str12.decode() if str12 else None)print("===============")# 示例:向字符串鍵str1的結尾追加內容bbb。append = r.append("str1", "bbb")print(append)# 查看設置后的新值。str13 = r.get("str1")print(str13.decode() if str13 else None)
七、列表操作
列表(List)是 Redis 中有序、可重復的鏈表結構,支持兩端插入與刪除。核心方法包括:
LPUSH/RPUSH
:左 / 右端插入元素;LRANGE
:按索引范圍獲取列表元素(如 0 -1 表示所有元素);LPOP/RPOP
:左 / 右端彈出并刪除元素;LREM
:按條件刪除元素(如刪除指定數量或方向的元素)。
列表適用于隊列、棧、歷史記錄等有序數據場景。
def list_operation():print("===========列表操作===========")# 示例:在列表右端向列表color中添加多個值。rpush = r.rpush("color", "blue", "green", "purple", "red", "white")print(rpush)print("===============")# 示例:在列表左端向列表color中添加多個值。lpush = r.lpush("color", "blue2", "green2", "purple2", "red2", "white2")print(lpush)print("===============")# 示例1:獲取列表color中索引0-5的元素。color = r.lrange("color", 0, 5)for s in color:print(s.decode())print("===============")# 示例2:獲取列表color中的所有元素。color1 = r.lrange("color", 0, -1)for s in color1:print(s.decode())print("===============")# 示例:獲取列表color中索引為2的元素。color2 = r.lindex("color", 2)print(color2.decode() if color2 else None)print("===============")# 示例:移除并獲取列表color中的最后一個(最右端)元素。rpop = r.rpop("color")print(rpop.decode() if rpop else None)print("===============")# 示例:移除并獲取列表color中的第一個(最左端)元素。lpop = r.lpop("color")print(lpop.decode() if lpop else None)print("===============")# 示例:獲取列表color的長度。llen = r.llen("color")print(llen)print("===============")# 示例1:從列表開頭開始搜索移除列表color中1個red元素。lrem = r.lrem("color", 1, "red")print(lrem)print("===============")# 示例2:從列表結尾開始搜索移除列表color中3個blue元素。lrem1 = r.lrem("color", -3, "blue")print(lrem1)print("===============")# 示例3:移除列表color中所有blue2元素。lrem2 = r.lrem("color", 0, "blue2")print(lrem2)print("===============")
八、集合操作
集合(Set)是 Redis 中無序、唯一的元素集合,支持交集、并集、差集運算。關鍵操作包括:
SADD
:添加成員(自動去重);SMEMBERS
:獲取所有成員;SISMEMBER
:判斷成員是否存在;SMOVE
:移動成員至其他集合。
集合常用于標簽管理、用戶去重、交集查詢(如共同好友)等場景。
def set_operation():print("===========集合操作===========")# 示例:給集合鍵set1添加多個成員。sadd = r.sadd("set1", "mem1", "mem2", "mem3")print(sadd)print("===============")# 示例:查看集合鍵set1中成員的數量。scard = r.scard("set1")print(scard)print("===============")# 示例:查看集合鍵set1中的所有成員。set1 = r.smembers("set1")for s in set1:print(s.decode())print("===============")# 示例:檢查成員mem1是否在集合set1中。sismember = r.sismember("set1", "mem1")print(sismember)print("===============")# 示例:移除集合set1中成員mem3。srem = r.srem("set1", "mem3")print(srem)print("===============")# 示例:把集合set1中成員mem2移動到集合set2中。smove = r.smove("set1", "set2", "mem2")print(smove)print("===============")
九、哈希表操作
哈希表(Hash)用于存儲鍵值對的集合,適合存儲結構化數據(如用戶詳情)。核心方法包括:
HSET
:設置單個字段值或批量設置(通過 mapping 參數);HGET/HMGET
:獲取單個或多個字段值;HGETALL
:獲取所有字段和值;HDEL
:刪除指定字段。
哈希表可減少鍵的數量,提升數據讀寫效率,適用于存儲對象屬性場景。
def hash_operation():print("===========哈希表操作===========")# 示例:給哈希表student添加一個學生信息。hset = r.hset("student:1", "name", "zhangsan")print(hset)hset1 = r.hset("student:1", "age", "19")print(hset1)hset2 = r.hset("student:1", "address", "yunnan")print(hset2)print("===============")# 示例:給哈希表student添加一個學生信息。# 修復:使用 hset 替代 hmset,傳入映射字典hmset = r.hset("student:2", mapping={"name": "lisi", "age": "20", "address": "guizhou"})print(hmset)print("===============")# 示例:獲取hash鍵student:2中name字段的值。hget = r.hget("student:2", "name")print(hget.decode() if hget else None)print("===============")# 示例:獲取hash鍵student:2中name、age和address字段的值。hget1 = r.hmget("student:2", ["name", "age", "address"])for s in hget1:print(s.decode() if s else None)print("===============")# 示例:獲取hash鍵student:2中的所有字段和值。student2 = r.hgetall("student:2")for key, value in student2.items():print(f"{key.decode()}: {value.decode()}")print("===============")# 示例:獲取hash鍵student:2中的所有字段。hkeys = r.hkeys("student:2")for s in hkeys:print(s.decode())print("===============")# 示例:獲取hash鍵student:2中的所有值。hvals = r.hvals("student:2")for s in hvals:print(s.decode())print("===============")# 示例:刪除hash鍵student:2中的age和address字段。hdel = r.hdel("student:2", "age", "address")print(hdel)print("===============")
十、有序集合操作
有序集合(Sorted Set)通過分數(Score)實現元素的有序排列,支持按分數或索引范圍查詢。核心方法包括:
ZADD
:添加成員與分數;ZCOUNT
:統計指定分數范圍內的成員數量;ZRANGE
:按索引范圍獲取成員(默認按分數升序);ZSCORE
:獲取成員的分數。
有序集合適用于排行榜、實時數據排序(如點贊數、訪問量)等場景。
def order_set_operation():print("===========有序集合操作===========")# 示例:給有序集合salary添加多個分數和成員。zadd = r.zadd("salary", {"zhangsan": 5000, "lisi": 4500, "wangwu": 6000})print(zadd)print("===============")# 示例:獲取有序集合salary中的成員數量。zcard = r.zcard("salary")print(zcard)print("===============")# 示例:計算有序集合中分數在5000-6500之間的成員數量。zcount = r.zcount("salary", 5000, 6500)print(zcount)print("===============")# 示例:根據索引范圍獲取有序集合salary中的成員。salary = r.zrange("salary", 0, 1)for s in salary:print(s.decode())print("===============")# 示例:獲取有序集合salary中成員wangwu的分數。zscore = r.zscore("salary", "wangwu")print(zscore)print("===============")# 示例:移除有序集合salary中成員wangwu。zrem = r.zrem("salary", "wangwu")print(zrem)print("===============")
十一、完整代碼
本章提供完整的 Python 代碼示例,整合前文各模塊功能。代碼通過 redis.Redis 類連接本地 Redis 服務(默認端口 6379,數據庫 1),包含以下核心邏輯:
flush_db()
:清空數據庫,確保測試環境干凈;- 各數據類型操作函數(如 key_operation()、string_operation()):封裝具體功能邏輯;
__main__ 入口
:按順序調用各操作函數,實現完整的 Redis 交互流程。
運行前需確保 Redis 服務已啟動,且代碼中的連接參數與實際環境一致。
1. 完整代碼
import redis# 連接到本地 Redis 服務
r = redis.Redis(host='127.0.0.1', port=6379, db=1)def flush_db():# 清空數據庫r.flushdb()def key_operation():print("===========鍵操作===========")# 示例:給school鍵設置值為dy。set_result = r.set("school", "dy")print(set_result)print("===============")# 示例:給k1鍵設置值為v1,k2鍵設置值為v2,k3鍵設置值為v3。set_result1 = r.mset({"k1": "v1", "k2": "v2", "k3": "v3"})print(set_result1)print("===============")# 示例1:查看所有鍵。keys = r.keys("*")for key in keys:print(key.decode())print("===============")# 示例2:查看所有以k開頭的鍵。keys1 = r.keys("k*")for key in keys1:print(key.decode())print("===============")# 示例:查看scool鍵的值。school = r.get("school")print(school.decode() if school else None)print("===============")# 示例:查看k1、k2、k3鍵的值。mget = r.mget("k1", "k2", "k3")for s in mget:print(s.decode() if s else None)print("===============")# 示例:查看k1鍵的值的序列化版本。k1s = r.dump("k1")print(k1s)print("===============")# 示例1:查看school鍵是否存在。exists = r.exists("school")print(exists)# print(bool(exists))print("===============")# 示例2:查看k1、k2、k3、k4、k5鍵是否存在。exists1 = r.exists("k1", "k2", "k3", "k4", "k5")print(exists1)print("===============")# 示例:查看school鍵的值的類型。type_ = r.type("school").decode()print(type_)print("===============")# 示例:把school鍵重命名為new_school鍵。rename = r.rename("school", "new_school")print(rename)print("===============")# 示例:把k3鍵的生存時間設置為600秒。expire = r.expire("k3", 600)print(expire)print("===============")# 示例:查看k3鍵的剩余存活時間。ttl = r.ttl("k3")print(ttl)print("===============")# 示例:刪除k3鍵的存活時間。persist = r.persist("k3")print(persist)print("===============")# 示例1:刪除new_school鍵。del_ = r.delete("new_school")print(del_)print("===============")# 示例2:刪除k1、k2、k3鍵。del1 = r.delete("k1", "k2", "k3")print(del1)print("===============")def string_operation():print("===========字符串操作===========")# 示例:給字符串鍵str1設置值為value1。set_result = r.set("str1", "value1")print(set_result)print("===============")# 示例:給字符串鍵str2、str3、str4分別設置值為value2、value3、value4。mset_result = r.mset({"str2": "value2", "str3": "value3", "str4": "value4"})print(mset_result)print("===============")# 示例:獲取字符串鍵str1的值。str1 = r.get("str1")print(str1.decode() if str1 else None)print("===============")# 示例:獲取字符串鍵str2、str3、str4的值。mget = r.mget("str2", "str3", "str4")for s in mget:print(s.decode() if s else None)print("===============")# 示例:獲取字符串鍵str1的舊值,并設置新值為new_value1。get_set = r.getset("str1", "new_value1")print(get_set.decode() if get_set else None)# 查看設置后的新值。str11 = r.get("str1")print(str11.decode() if str11 else None)print("===============")# 示例:獲取字符串鍵str1的值的長度。strlen = r.strlen("str1")print(strlen)print("===============")# 示例:獲取字符串鍵str1的索引0-5的值的內容。getrange = r.getrange("str1", 0, 5)print(getrange.decode() if getrange else None)print("===============")# 示例:把字符串鍵str1從索引2開始的后面三個字母的內容替換為aaa。setrange = r.setrange("str1", 2, "aaa")print(setrange)# 查看設置后的新值。str12 = r.get("str1")print(str12.decode() if str12 else None)print("===============")# 示例:向字符串鍵str1的結尾追加內容bbb。append = r.append("str1", "bbb")print(append)# 查看設置后的新值。str13 = r.get("str1")print(str13.decode() if str13 else None)def list_operation():print("===========列表操作===========")# 示例:在列表右端向列表color中添加多個值。rpush = r.rpush("color", "blue", "green", "purple", "red", "white")print(rpush)print("===============")# 示例:在列表左端向列表color中添加多個值。lpush = r.lpush("color", "blue2", "green2", "purple2", "red2", "white2")print(lpush)print("===============")# 示例1:獲取列表color中索引0-5的元素。color = r.lrange("color", 0, 5)for s in color:print(s.decode())print("===============")# 示例2:獲取列表color中的所有元素。color1 = r.lrange("color", 0, -1)for s in color1:print(s.decode())print("===============")# 示例:獲取列表color中索引為2的元素。color2 = r.lindex("color", 2)print(color2.decode() if color2 else None)print("===============")# 示例:移除并獲取列表color中的最后一個(最右端)元素。rpop = r.rpop("color")print(rpop.decode() if rpop else None)print("===============")# 示例:移除并獲取列表color中的第一個(最左端)元素。lpop = r.lpop("color")print(lpop.decode() if lpop else None)print("===============")# 示例:獲取列表color的長度。llen = r.llen("color")print(llen)print("===============")# 示例1:從列表開頭開始搜索移除列表color中1個red元素。lrem = r.lrem("color", 1, "red")print(lrem)print("===============")# 示例2:從列表結尾開始搜索移除列表color中3個blue元素。lrem1 = r.lrem("color", -3, "blue")print(lrem1)print("===============")# 示例3:移除列表color中所有blue2元素。lrem2 = r.lrem("color", 0, "blue2")print(lrem2)print("===============")def set_operation():print("===========集合操作===========")# 示例:給集合鍵set1添加多個成員。sadd = r.sadd("set1", "mem1", "mem2", "mem3")print(sadd)print("===============")# 示例:查看集合鍵set1中成員的數量。scard = r.scard("set1")print(scard)print("===============")# 示例:查看集合鍵set1中的所有成員。set1 = r.smembers("set1")for s in set1:print(s.decode())print("===============")# 示例:檢查成員mem1是否在集合set1中。sismember = r.sismember("set1", "mem1")print(sismember)print("===============")# 示例:移除集合set1中成員mem3。srem = r.srem("set1", "mem3")print(srem)print("===============")# 示例:把集合set1中成員mem2移動到集合set2中。smove = r.smove("set1", "set2", "mem2")print(smove)print("===============")def hash_operation():print("===========哈希表操作===========")# 示例:給哈希表student添加一個學生信息。hset = r.hset("student:1", "name", "zhangsan")print(hset)hset1 = r.hset("student:1", "age", "19")print(hset1)hset2 = r.hset("student:1", "address", "yunnan")print(hset2)print("===============")# 示例:給哈希表student添加一個學生信息。# 修復:使用 hset 替代 hmset,傳入映射字典hmset = r.hset("student:2", mapping={"name": "lisi", "age": "20", "address": "guizhou"})print(hmset)print("===============")# 示例:獲取hash鍵student:2中name字段的值。hget = r.hget("student:2", "name")print(hget.decode() if hget else None)print("===============")# 示例:獲取hash鍵student:2中name、age和address字段的值。hget1 = r.hmget("student:2", ["name", "age", "address"])for s in hget1:print(s.decode() if s else None)print("===============")# 示例:獲取hash鍵student:2中的所有字段和值。student2 = r.hgetall("student:2")for key, value in student2.items():print(f"{key.decode()}: {value.decode()}")print("===============")# 示例:獲取hash鍵student:2中的所有字段。hkeys = r.hkeys("student:2")for s in hkeys:print(s.decode())print("===============")# 示例:獲取hash鍵student:2中的所有值。hvals = r.hvals("student:2")for s in hvals:print(s.decode())print("===============")# 示例:刪除hash鍵student:2中的age和address字段。hdel = r.hdel("student:2", "age", "address")print(hdel)print("===============")def order_set_operation():print("===========有序集合操作===========")# 示例:給有序集合salary添加多個分數和成員。zadd = r.zadd("salary", {"zhangsan": 5000, "lisi": 4500, "wangwu": 6000})print(zadd)print("===============")# 示例:獲取有序集合salary中的成員數量。zcard = r.zcard("salary")print(zcard)print("===============")# 示例:計算有序集合中分數在5000-6500之間的成員數量。zcount = r.zcount("salary", 5000, 6500)print(zcount)print("===============")# 示例:根據索引范圍獲取有序集合salary中的成員。salary = r.zrange("salary", 0, 1)for s in salary:print(s.decode())print("===============")# 示例:獲取有序集合salary中成員wangwu的分數。zscore = r.zscore("salary", "wangwu")print(zscore)print("===============")# 示例:移除有序集合salary中成員wangwu。zrem = r.zrem("salary", "wangwu")print(zrem)print("===============")if __name__ == "__main__":flush_db()key_operation()string_operation()list_operation()set_operation()hash_operation()order_set_operation()
2. 項目下載
下載地址:https://download.csdn.net/download/zcs2312852665/90889723