Redis(四) - 使用Python操作Redis詳解

文章目錄

  • 前言
  • 一、下載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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81430.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81430.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81430.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

xdvipdfmx:fatal: File ended prematurely. No output PDF file written.

今天忽然遇到:使用xelatex或lualatex編譯,一直卡住,不報錯,也無法生成PDF,主動停止編譯后就報錯 xdvipdfmx:fatal: File ended prematurely. No output PDF file written. 然后,之前能正常編譯的一些文件…

解鎖未來AI:使用DACA模式和Agentic技術提高開發效率

學習Agentic AI:Dapr Agentic Cloud Ascent (DACA)設計模式的應用與演進 背景介紹 近年來,Agentic AI(代理型人工智能)的概念在學術界和產業界掀起了一陣熱潮。Agentic AI指的是能夠自主感知、決策和行動的智能體系統,它們不僅改變了我們與技術互動的方式,也為行業發展…

Jenkins+Docker+Harbor快速部署Spring Boot項目詳解

JenkinsDockerHarbor快速部署Spring Boot項目詳解 Jenkins、Docker和Harbor是現代DevOps流程中的核心工具,結合使用可以實現自動化構建、測試和部署。下面我將詳細介紹如何搭建這個集成環境。 一、各工具的核心作用 Jenkins 自動化CI/CD工具,負責拉取代…

第12次04 :首頁展示用戶名

登錄后&#xff0c;跳轉到首頁&#xff0c;首頁會展示用戶名&#xff1b;未登錄時&#xff0c;首頁將展示登錄與注冊的選項。 第一步&#xff1a;index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml…

Flask 路由跳轉機制:url_for生成動態URL、redirect頁面重定向

在 Flask 開發中&#xff0c;url_for() 與 redirect() 是實現路由跳轉邏輯的核心工具。 url_for()負責安全、靈活地生成 URL。 redirect()負責發起重定向響應。 1、url_for()&#xff1a;生成URL url_for(endpoint, **values) 是 Flask 提供的 URL 構造工具&#xff0c;可根據…

華為OD機試真題——構成正方形的數量(2025B卷:100分)Java/python/JavaScript/C++/C/GO六種最佳實現

2025 B卷 100分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析; 并提供Java、python、JavaScript、C++、C語言、GO六種語言的最佳實現方式! 本文收錄于專欄:《2025華為OD真題目錄+全流程解析/備考攻略/經驗分享》 華為OD機試真題《構成…

FFMPEG-AAC編碼

一、流程圖 二、代碼解釋 avcodec_find_encoder: 根據指定的AVCodecID查找注冊的編碼器。avcodec_alloc_context3: 為AVCodecContext分配內存。()avcodec_open2: 打開編碼器。avcodec_send_frame: 將AVFrame?壓縮數據給編碼器。avcodec_receive_packet: 獲取到編碼后的…

RPC 協議詳解、案例分析與應用場景

一、RPC 協議原理詳解 RPC 協議的核心目標是讓開發者像調用本地函數一樣調用遠程服務&#xff0c;其實現過程涉及多個關鍵組件與流程。 &#xff08;一&#xff09;核心組件 客戶端&#xff08;Client&#xff09;&#xff1a;發起遠程過程調用的一方&#xff0c;它并不關心調…

Docker基礎 -- Ubuntu 22.04 AArch64 交叉編譯 Docker 鏡像構建指南

Ubuntu 22.04 AArch64 交叉編譯 Docker 鏡像構建指南 作者&#xff1a; &#xff08;填寫作者&#xff09; 發布日期&#xff1a; 2025?05?26 1 背景與目標 在企業內網&#xff08;需要代理&#xff09;環境下&#xff0c;我們需要一套可靠、可復用的 Ubuntu 22.04 交叉編…

【ISP算法精粹】ISP算法管線的預處理算法有哪些?

1. ISP預處理算法有哪些&#xff1f; 在圖像信號處理&#xff08;ISP&#xff09;流程中&#xff0c;預處理階段主要針對圖像傳感器&#xff08;如CMOS/CCD&#xff09;輸出的原始圖像數據&#xff08;通常為拜耳格式的RAW圖像&#xff09;進行初步處理&#xff0c;以校正硬件…

華為OD機試真題——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

視頻存儲開源方案

項目成熟度 GitHub - ceph/ceph: Ceph is a distributed object, block, and file storage platform GitHub - minio/minio: MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license. GitHub - seaweedfs/seaweedfs: SeaweedFS i…

典型城市工況數據(Drive Cycle)用于車輛仿真

典型城市工況數據&#xff08;Drive Cycle&#xff09;用于車輛仿真 在車輛仿真過程中&#xff0c;使用典型的城市工況數據&#xff08;Drive Cycle&#xff09;是評估車輛性能、能耗和排放的關鍵步驟。以下是一些常用的典型城市工況數據及其來源&#xff0c;這些數據可以幫助…

深度解析新能源汽車結構與工作原理

一、核心系統架構 新能源汽車主要由三大核心系統構成&#xff1a; 電力驅動系統&#xff1a;包含永磁同步電機、電機控制器&#xff08;MCU&#xff09;及減速器&#xff0c;采用三合一集成設計實現輕量化。永磁同步電機通過電磁感應原理將電能轉化為機械能&#xff0c;其效率可…

跳板問題(貪心算法+細節思考)

首先直接看題&#xff1a; 這題直接貪心其實問題不大&#xff1a; 下面先展示我的一個錯誤代碼&#xff1a; # include<iostream> # include<vector> # include<algorithm>using namespace std;int main() {int N,M;cin>>N>>M;vector<vecto…

pgsql 一些用法

要查詢PostgreSQL數據庫中剩余的磁盤空間&#xff0c;可以使用以下方法&#xff1a; 使用SQL查詢函數&#xff1a; 可以通過pg_size_pretty函數來查看數據庫的總磁盤使用情況&#xff0c;例如&#xff1a; SELECT pg_size_pretty(pg_database_size(‘your_database_name’)); …

【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球

【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球 文章目錄 【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球前言高斯函數一維高斯多維高斯 橢球基本定義一般二次形式 3D高斯橢球3D高斯與橢球的關系各向同性(Isotropic)和…

unix的定時任務和quartz和spring schedule的cron表達式區別

一、核心區別對比表 對比項Unix CrontabQuartzSpring Scheduled表達式位數5 位6 位或 7 位6 位秒級支持? 不支持&#xff08;最小單位是分鐘&#xff09;? 支持? 支持年字段? 無? 可選第7位? 不支持特殊符號支持較少&#xff08;如 *, ,, -, /&#xff09;很豐富和 Quar…

C++基礎算法————遞推

C++遞推:初學者的進階之旅 一、引言 在計算機編程的世界里,C++ 以其強大的功能和高效性受到眾多開發者的青睞。遞推作為一種重要的編程思想,在解決各種復雜問題時發揮著關鍵作用。對于初學者來說,理解并掌握遞推不僅可以提升編程能力,還能培養邏輯思維和問題解決能力。本…

QTabWidget垂直TabBar的圖標和文本水平顯示

一般情況下,我們可以通過QTabWidget的setTabPosition方法來設置TabBar的位置,比如設置在左邊 ui->tabWidget->setTabPosition(QTabWidget::West); 但是此時圖標和文字都是垂直的,如果讓它們水平顯示呢? 一.效果 二.原理 在繪制TabBar時,順時針旋轉90度 三.實現 …