使用Go語言啟動(dòng)Redis的實(shí)例詳解
最近寫了幾篇 Go 并發(fā)編程相關(guān)的文章,想必有些讀者看多了可能會(huì)有些厭倦,今天來點(diǎn)輕松的內(nèi)容,介紹一個(gè)可以用來啟動(dòng) redis-server
的開源庫 github.com/stvp/tempredis
。這是一個(gè)用 Go 語言開發(fā)的包,專門用于創(chuàng)建臨時(shí)的 Redis 實(shí)例,主要用于測(cè)試目的。它可以在本地啟動(dòng)一個(gè)臨時(shí)的 Redis 服務(wù)實(shí)例,在測(cè)試結(jié)束后自動(dòng)關(guān)閉并清理,幫助開發(fā)者避免對(duì)實(shí)際的 Redis 環(huán)境進(jìn)行操作。
主要功能
tempredis
包主要功能如下:
- 快速啟動(dòng)臨時(shí) Redis 實(shí)例:無需手動(dòng)安裝和配置 Redis,只要系統(tǒng)上已經(jīng)安裝了 Redis 二進(jìn)制文件(
redis-server
)。 - 獨(dú)立的測(cè)試環(huán)境:每個(gè)測(cè)試運(yùn)行一個(gè)獨(dú)立的 Redis 實(shí)例,避免了測(cè)試之間的相互干擾。
- 自動(dòng)清理:測(cè)試完成后,臨時(shí)實(shí)例會(huì)被關(guān)閉,相關(guān)文件會(huì)被刪除。
環(huán)境準(zhǔn)備
首先,主機(jī)上當(dāng)然要安裝 Redis 二進(jìn)制文件和安裝 tempredis
Go 包:
# mac 電腦直接使用 brew 即可安裝 redis-server # 其他平臺(tái)可以參考官方文檔:https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/ $ brew install redis # 安裝 tempredis Go 包 $ go get -u github.com/stvp/tempredis
簡(jiǎn)單介紹
可以在 tempredis 文檔 中看到其實(shí)現(xiàn)的 exported 結(jié)構(gòu)體和方法:
type Config func (c Config) Socket() string type Server func Start(config Config) (server *Server, err error) func (s *Server) Kill() (err error) func (s *Server) Socket() string func (s *Server) Stderr() string func (s *Server) Stdout() string func (s *Server) Term() (err error)
Config
結(jié)構(gòu)體實(shí)際上就是一個(gè) map[string]string
對(duì)象,用于設(shè)置 Redis 配置。它的 Socket
方法用于返回 redis.sock
文件位置。
Server
結(jié)構(gòu)體代表一個(gè) Redis 實(shí)例對(duì)象,幾個(gè)方法作用分別如下:
Start
是一個(gè)函數(shù),用于根據(jù)給定的配置Config
啟動(dòng)Server
。Kill
方法用于強(qiáng)制關(guān)閉redis-server
。Term
方法用于優(yōu)雅關(guān)閉redis-server
。Socket
方法會(huì)代理到Config.Socket
方法調(diào)用。Stdout
方法阻塞等待返回redis-server
執(zhí)行后的標(biāo)準(zhǔn)輸出。Stderr
方法阻塞等待返回redis-server
執(zhí)行后的錯(cuò)誤輸出。
使用示例
我們已經(jīng)對(duì) tempredis
提供的方法有了初步的了解,那么是時(shí)候?qū)懸粋€(gè)小 demo 練練手了,示例代碼如下:
package main import ( "fmt" "log" "time" "github.com/go-redis/redis" "github.com/stvp/tempredis" ) func main() { // 創(chuàng)建并啟動(dòng)一個(gè)臨時(shí)的 Redis 實(shí)例 server, err := tempredis.Start(tempredis.Config{ "port": "0", // 自動(dòng)分配端口 }) if err != nil { log.Fatalf("Failed to start tempredis: %v", err) } // 放在 defer 中執(zhí)行,避免阻塞 main goroutine defer func() { fmt.Println("====================== stdout ======================") fmt.Println(server.Stdout()) fmt.Println("====================== stderr ======================") fmt.Println(server.Stderr()) }() // main 退出時(shí)關(guān)閉 redis-server defer server.Term() // 獲取 Redis 的地址 fmt.Println("Redis server is running at", server.Socket()) // 連接臨時(shí)的 Redis 實(shí)例 client := redis.NewClient(&redis.Options{ Network: "unix", Addr: server.Socket(), }) // 使用 Redis 實(shí)例 client.Set("name", "jianghushinian", time.Second) val, err := client.Get("name").Result() if err != nil { fmt.Println("Get redis key error:", err) return } fmt.Println("name:", val) time.Sleep(time.Second) // 1s 后 name 已經(jīng)過期 val, err = client.Get("name").Result() if err != nil { fmt.Println("Get redis key error:", err) return } fmt.Println("name:", val) }
代碼中每個(gè)部分我都寫了注釋說明,不難理解。在啟動(dòng)臨時(shí)的 Redis 實(shí)例后,可以使用任何 Go Redis 客戶端進(jìn)行連接,這里使用的是 go-redis/redis
。之后就可以正常使用 Redis 的功能了。
執(zhí)行示例代碼,得到輸出如下:
$ go run main.go
Redis server is running at /var/folders/_n/xb14yhv56fq98c_nqcg8skfc0000gp/T/tempredis1387753332/redis.sock
name: jianghushinian
Get redis key error: redis: nil
====================== stdout ======================
31048:C 02 Jan 2025 00:24:23.933 * Reading config from stdin
31048:C 02 Jan 2025 00:24:23.933 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
31048:C 02 Jan 2025 00:24:23.933 * Redis version=7.2.6, bits=64, commit=00000000, modified=0, pid=31048, just started
31048:C 02 Jan 2025 00:24:23.933 * Configuration loaded
31048:M 02 Jan 2025 00:24:23.933 * monotonic clock: POSIX clock_gettime
31048:M 02 Jan 2025 00:24:23.934 * Running mode=standalone, port=0.
31048:M 02 Jan 2025 00:24:23.934 # WARNING: The TCP backlog setting of 511 cannot be enforced because kern.ipc.somaxconn is set to the lower value of 128.
31048:M 02 Jan 2025 00:24:23.934 * Server initialized
31048:M 02 Jan 2025 00:24:23.934 * Loading RDB produced by version 7.2.6
31048:M 02 Jan 2025 00:24:23.934 * RDB age 167 seconds
31048:M 02 Jan 2025 00:24:23.934 * RDB memory usage when created 1.11 Mb
31048:M 02 Jan 2025 00:24:23.934 * Done loading RDB, keys loaded: 0, keys expired: 0.
31048:M 02 Jan 2025 00:24:23.934 * DB loaded from disk: 0.000 seconds
31048:M 02 Jan 2025 00:24:23.934 * Ready to accept connections unix
31048:signal-handler (1735748664) Received SIGTERM scheduling shutdown...
31048:M 02 Jan 2025 00:24:24.944 * User requested shutdown...
31048:M 02 Jan 2025 00:24:24.944 * Saving the final RDB snapshot before exiting.
31048:M 02 Jan 2025 00:24:24.954 * DB saved on disk
31048:M 02 Jan 2025 00:24:24.954 * Removing the unix socket file.
31048:M 02 Jan 2025 00:24:24.954 # Redis is now ready to exit, bye bye...
====================== stderr ======================
這個(gè)示例很好的演示了 tempredis
的功能和用法,剩下唯一沒有演示的就是 Server.Kill
方法了,你可以自行嘗試下。
總結(jié)
本文介紹了如何使用 tempredis
包來啟動(dòng) Redis 實(shí)例,并應(yīng)用于 Go 項(xiàng)目中??梢园l(fā)現(xiàn),tempredis
包的功能和用法都非常簡(jiǎn)單。
之所以介紹這個(gè)包,其實(shí)是因?yàn)檫@個(gè)包出現(xiàn)在 redsync 項(xiàng)目中,這是一個(gè)用 Go 語言實(shí)現(xiàn)的 Redis 分布式鎖,感興趣的讀者可以自行研究下。
到此這篇關(guān)于使用Go語言啟動(dòng)Redis的實(shí)例詳解的文章就介紹到這了,更多相關(guān)Go啟動(dòng)Redis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go實(shí)現(xiàn)一個(gè)輕量級(jí)并發(fā)任務(wù)調(diào)度器(支持限速)
本文主要介紹了Go實(shí)現(xiàn)一個(gè)輕量級(jí)并發(fā)任務(wù)調(diào)度器(支持限速),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04Go語言同步與異步執(zhí)行多個(gè)任務(wù)封裝詳解(Runner和RunnerAsync)
這篇文章主要給大家介紹了關(guān)于Go語言同步與異步執(zhí)行多個(gè)任務(wù)封裝(Runner和RunnerAsync)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01Go語言實(shí)現(xiàn)websocket推送程序
這篇文章主要介紹了Go語言實(shí)現(xiàn)websocket推送程序,WebSocket是基于TCP的一個(gè)雙向傳輸數(shù)據(jù)的協(xié)議,和HTTP協(xié)議一樣,是在應(yīng)用層的,他的出現(xiàn),是為了解決網(wǎng)頁進(jìn)行持久雙向傳輸數(shù)據(jù)的問題2023-01-01GO語言運(yùn)行環(huán)境下載、安裝、配置圖文教程
這篇文章主要介紹了GO語言運(yùn)行環(huán)境下載、安裝、配置圖文教程,需要的朋友可以參考下2017-02-02Fedora14 Linux系統(tǒng)安裝Golang開發(fā)環(huán)境筆記
這篇文章主要介紹了Fedora14 Linux系統(tǒng)安裝Golang開發(fā)環(huán)境筆記,本文講解了2種安裝方法,需要的朋友可以參考下2014-10-10