go-redis庫使用總結

文章目錄

  • 1. 概述與特性
  • 2. 安裝與初始化
    • 2.1 安裝
    • 2.2 初始化
  • 3 基本使用模式
    • 3.1 單實例客戶端
    • 3.2 連接池與自動重連
  • 4. 常用 Redis 數據結構操作
    • 4.1 字符串(String)
    • 4.2 哈希(Hash)
    • 4.3 列表(List)
    • 4.4 集合(Set)
    • 4.5 有序集合(ZSet)
    • 4.6 事務(Tx/TxPipeline)

1. 概述與特性

go-redis 是一個高性能、功能豐富的 Redis 客戶端庫,支持 Redis 的大部分核心特性(字符串、哈希、列表、集合、有序集合、事務、Lua 腳本、發布訂閱、Pipeline、Cluster、Sentinel 等)。
提供了對 Redis 6/7 及以上版本的特性支持,包含專門的客戶端下載與連接管理、上下文感知 API、以及對 Redis 模塊/RESP3 的部分支持。
官方地址與文檔:https://github.com/go-redis/redis

2. 安裝與初始化

2.1 安裝

使用 go.mod 管理依賴:

go get github.com/go-redis/redis/v8

Go 版本要求:1.18+(go-redis v8 基于 go mod,使用模塊版本,推薦使用 go1.18+),這里使用的是最新版本go1.24。

2.2 初始化

package mainimport ("errors""fmt""github.com/go-redis/redis"
)var client *redis.Clientfunc initClient() (err error) {client = redis.NewClient(&redis.Options{Addr:     "localhost:6379",Password: "",DB:       1,PoolSize: 100,DialTimeout: 5 * time.Second,ReadTimeout: 3 * time.Second,WriteTimeout: 3 * time.Second,PoolSize: 10, // 連接池大小MinIdleConns: 2,})_, err = client.Ping().Result()if err != nil {return err}return nil
}func initClient2() (err error) {// 哨兵模式client = redis.NewFailoverClient(&redis.FailoverOptions{MasterName:    "mymaster",SentinelAddrs: []string{"localhost:6379"},})_, err = client.Ping().Result()if err != nil {return err}return nil
}func initClient3() (err error) {// 連接redis集群rds := redis.NewClusterClient(&redis.ClusterOptions{Addrs: []string{"7000", "7001", "7002", "7003", "7004", "7005"},})_, err = rds.Ping().Result()if err != nil {return err}return nil
}func main() {err := initClient()if err != nil {panic(err)}fmt.Println("redis connect success...")result, err := client.Get("1").Result()if err != nil {return}fmt.Println(result)
}}

3 基本使用模式

3.1 單實例客戶端

語法糖:使用 rdb.Get、rdb.Set 等方法,返回的錯誤大多用 err != nil 判斷。

func singleInstanceDemo() {
client := newClient()
defer client.Close()// 設置鍵值
if err := client.Set(ctx, "key", "value", 0).Err(); err != nil {
// handle error
}// 獲取值
val, err := client.Get(ctx, "key").Result()
if err != nil {
// 處理錯誤(不存在等情況)
} else {
fmt.Println("value:", val)
}// 自增
client.Incr(ctx, "counter")
}

3.2 連接池與自動重連

go-redis 通過 Options 提供連接池設置:

  1. PoolSize: 最大并發連接數
  2. MinIdleConns: 最小空閑連接數量
  3. MaxRetries: 全局重試次數
  4. MinRetryBackoff / MaxRetryBackoff: 重試間隔
  5. DialTimeout、ReadTimeout、WriteTimeout
  6. 對于短連接場景也能高效工作,確保在應用生命周期內復用一個客戶端實例。

4. 常用 Redis 數據結構操作

4.1 字符串(String)

Set、Get、Incr、Decr、MGet、MSet、GetSet、Append 等常用操作。

client.Set(ctx, "name", "GoLang", 0)
name, _ := client.Get(ctx, "name").Result
client.Incr(ctx, "age")
vals, _ := client.MGet(ctx, "name", "age").Result

4.2 哈希(Hash)

HSet、HGet、HGetAll、HExists、HDel、HMSet(在 v8+ 內置 HMSet 的行為變更,推薦使用 HSet)

client.HSet(ctx, "user:1000", "name", "Alice", "age", "30")
name, _ := client.HGet(ctx, "user:1000", "name").Result
all, _ := client.HGetAll(ctx, "user:1000").Result

4.3 列表(List)

LPUSH、RPUSH、LPOP、RPOP、LRANGE、LPOS

client.RPush(ctx, "queue", "task1", "task2")
item, _ := client.LPop(ctx, "queue").Result

4.4 集合(Set)

SADD、SMEMBERS、SISMEMBER、SPOP、SUNION

client.SAdd(ctx, "tags", "go", "redis")
members, _ := client.SMembers(ctx, "tags").Result

4.5 有序集合(ZSet)

ZADD、ZRANGE、ZREVRANGE、ZCARD、ZSCORE

client.ZAdd(ctx, "leaders", &redis.Z{Score: 100, Member: "alice"})
score, _ := client.ZScore(ctx, "leaders", "alice").Result

4.6 事務(Tx/TxPipeline)

事務模式有樂觀/樂觀鎖風格,go-redis 提供 Tx、TxPipelined 等接口。

tx := client.TxPipeline()
tx.Set(ctx, "k1", "v1", 0)
tx.Incr(ctx, "counter")
_, _ := tx.Exec(ctx)

TxPipelined(帶閉包的流水線事務):

_, err := client.TxPipelined(ctx, func(pipe redis.Pipeliner) error {
pipe.Incr(ctx, "counter")
pipe.Set(ctx, "k1", "v1", 0)
return nil
})

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

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

相關文章

【軟件設計模式】策略模式

1.概念策略(Strategy)模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。策略模式屬于行為型設計模式,它通過對算法進行封裝,把使用算法的責…

Mac電腦英特爾版本最新系統15.6.1安裝php環境

Mac電腦安裝php環境 版本環境: 2025-08-22 14:09:19 安裝 最新系統15.6.1系統: 新版本的mac不帶php環境,需要自己 安裝 brew install php8.3 啟動說明 查看 . 使用官方方法安裝 NVM curl -o- https://raw.githubusercontent.com/nvm-sh/…

Android焦點窗口變化導致遙控鍵值監聽失效問題分析

最近在做語音全局控制Android系統功能,通過集成第三方語音識別sdk得到相關控制指令,然后將指令通過進程間通信傳遞給當前應用并作出響應。有很多通用指令,比如播放/暫停,Android系統本身就有全局控制指令:KeyEvent.KEY…

降本增效:基于 JavaScript 的 AI 編程 IDE 上下文壓縮優化方案

降本增效:基于 JavaScript 的 AI 編程 IDE 上下文壓縮優化方案 在當前 AI 輔助編程(AI Pair Programming)日益普及的背景下,開發者越來越依賴如 GitHub Copilot、Tabnine、CodeLlama 等智能編碼工具。然而,一個普遍存在…

DataX HdfsWriter 插件文檔

?博客主頁: https://blog.csdn.net/m0_63815035?typeblog 💗《博客內容》:大數據、Java、測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 📢博客專欄: https://blog.csdn.net/m0_63815035/…

Rancher 管理的 K8S 集群中部署常見應用(MySQL、Redis、RabbitMQ)并支持擴縮容的操作

文章目錄一、前提條件二、準備鏡像三、進入 Rancher UI 部署3.1. 進入 Workloads3.2. 部署 MySQL3.3. 部署 Redis3.4. 部署 RabbitMQ四、驗證服務五、擴縮容(UI 操作)六、附錄yml部署文件6.1. mysql.yaml6.2. redis.yaml6.3. rabbitmq.yaml一、前提條件 …

8.21-8.22網絡編程——詞典

文章目錄一、思維導圖二、詞典1、服務器2、客戶端3、現象三、牛客網刷題一、思維導圖 二、詞典 1、服務器 #include <myhead.h>#define SER_PORT 8888 //服務器端口號 #define SER_IP "192.168.116.128" //服務器IP地址 //賬戶密碼結構 typedef s…

ffmpeg測試rtsp地址

ffmpeg可以用 ffmpeg 通過 tcp協議/udp協議傳輸流到 null設備&#xff0c;ffmpeg \-rtsp_transport tcp \ # 使用TCP協議傳輸RTSP流-timeout 5000000 \ # 設置超時時間為5000000微秒&#xff08;5秒&#xff09;-i "rtsp://admin:admin123192.168.1.…

Apache Commons Math_Java科學計算的利器

1. 引言 1.1 科學計算在現代軟件開發中的重要性 隨著大數據、人工智能和科學計算需求的不斷增長,科學計算能力已成為現代軟件開發不可或缺的重要組成部分。從金融風險評估到工程仿真,從數據分析到機器學習,科學計算在各行各業中發揮著關鍵作用。 科學計算涉及復雜的數學運…

Python爬蟲框架設計:類封裝與工程化實踐?

實戰中的UA輪換技巧 import fake_useragent import random class DynamicHeader: def init(self): self.ua_generator fake_useragent.UserAgent() # 注意&#xff1a;實際使用需更新數據路徑 self.fingerprints [“chrome125”, “edge115”, “safari17”] # 2025年主流指…

5G 三卡圖傳終端:公安執法的 “移動可視化指揮中樞”

前言 在公安執法中&#xff0c;“實時取證、高效指揮、安全協同” 是破解現場復雜局面的核心需求。傳統執法設備常因傳輸卡頓、證據存證難、跨警種信息斷層等問題影響執法效能&#xff0c;而 5G 便攜式多卡高清視頻融合終端憑借多網聚合、高清編碼、安全存儲等特性&#xff0c;…

R語言rbind()和cbind()使用

rbind&#xff1a;r row&#xff08;行&#xff09;cbind&#xff1a;c column&#xff08;列&#xff09; 核心區別方向 ? rbind&#xff1a;縱向&#xff08;按行&#xff09;堆疊&#xff0c;行數相加。 ? cbind&#xff1a;橫向&#xff08;按列&#xff09;拼接&#…

【Linux】開發工具命令指南:深度解析Vim的使用操作

歡迎各位佬進行交流&#xff0c;我們一起無限進步&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目錄Vim&#xff1a;多模式高效文本編輯器1. 初次體驗 Vim2. Vim 核心工作模式&#xff08;…

【Day 12】73.矩陣置零

文章目錄73.矩陣置零題目&#xff1a;思路&#xff1a;方法一&#xff1a;用兩個標記數組&#xff08;易理解&#xff0c;額外空間 O(mn)&#xff09;思路&#xff08;直觀&#xff09;舉例&#xff08;[[1,1,1],[1,0,1],[1,1,1]]&#xff09;優缺點代碼實現&#xff08;Go&…

Clustering Enabled Wireless Channel Modeling Using Big Data Algorithms

文章目錄Clustering TechniquesPartitioning-Based AlgorithmsDensity-Based AlgorithmsHierarchical-based algorithmsClustering Enabled Channel ModelingCluster-Based Channel ModelsClustering AlgorithmsClustering Techniques 聚類是一種已被廣泛用于數據分析的技術。…

基于「多模態大模型 + BGE向量檢索增強RAG」的兒童繪畫心理健康分析系統(vue+flask+AI算法)

一、項目演示視頻 基于「多模態大模型 BGE向量檢索增強RAG」的兒童繪畫心理健康分析系統(vueflaskAI算法)二、技術棧 前端技術棧 (web-vue) 核心框架: Vue 3.5.13 (Composition API) UI組件庫: Element Plus 2.9.4 狀態管理: Pinia 2.3.1 路由管理: Vue Router 4.5.0 HTTP客戶…

QML中的Component

目錄 &#x1f9e0; 核心概念&#xff1a;什么是 Component&#xff1f; &#x1f4ca; Component 的兩種主要形式 1. 內聯 Component&#xff08;在 QML 文件內部定義&#xff09; 2. 外部 Component&#xff08;單獨的 .qml 文件&#xff09; &#x1f3af; Component 的…

什么是模型訓練中的 特征提取,如何對光伏發電預測中的特征進行提取

&#x1f50d; 什么是模型訓練中的“特征提取” 定義&#xff1a;特征提取是從原始數據中提煉出對預測或分類最有用的信息的過程。它的目標是去掉冗余和噪聲&#xff0c;保留能最好反映數據規律的特征。 作用&#xff1a; 降低數據維度&#xff0c;減少計算量 提高模型的泛化…

Linux應急響應一般思路(三)

日志分析Linux日志分析Linux日志類型大致可以分為三類&#xff0c;內核和系統日志、用戶日志、應用日志內核和系統日志&#xff1a;這種日志主要由syslog管理、根據其配置文件/etc/syslog.conf中的設置決定內核消息和各種系統程序信息記錄到哪個位置用戶日志&#xff1a;用戶日…

【酒店酒水寄存管理效率低?】佳易王酒水寄存管理系統操作教程全解析

前言&#xff1a; &#xff08;一&#xff09;試用版獲取方式 資源下載路徑&#xff1a;進入博主頭像主頁第一篇文章末尾&#xff0c;點擊卡片按鈕&#xff1b;或訪問左上角博客主頁&#xff0c;通過右側按鈕獲取詳細資料。 說明&#xff1a;下載文件為壓縮包&#xff0c;使用…