欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Go語言啟動Redis的實例詳解

 更新時間:2025年01月23日 08:34:24   作者:江湖十年  
這篇文章主要為大家介紹了Go語言中一個可以用來啟動?redis-server?的開源庫?github.com/stvp/tempredis,感興趣的小伙伴可以跟隨小編一起學(xué)習一下

最近寫了幾篇 Go 并發(fā)編程相關(guān)的文章,想必有些讀者看多了可能會有些厭倦,今天來點輕松的內(nèi)容,介紹一個可以用來啟動 redis-server 的開源庫 github.com/stvp/tempredis。這是一個用 Go 語言開發(fā)的包,專門用于創(chuàng)建臨時的 Redis 實例,主要用于測試目的。它可以在本地啟動一個臨時的 Redis 服務(wù)實例,在測試結(jié)束后自動關(guān)閉并清理,幫助開發(fā)者避免對實際的 Redis 環(huán)境進行操作。

主要功能

tempredis 包主要功能如下:

  • 快速啟動臨時 Redis 實例:無需手動安裝和配置 Redis,只要系統(tǒng)上已經(jīng)安裝了 Redis 二進制文件(redis-server)。
  • 獨立的測試環(huán)境:每個測試運行一個獨立的 Redis 實例,避免了測試之間的相互干擾。
  • 自動清理:測試完成后,臨時實例會被關(guān)閉,相關(guān)文件會被刪除。

環(huán)境準備

首先,主機上當然要安裝 Redis 二進制文件和安裝 tempredis Go 包:

# mac 電腦直接使用 brew 即可安裝 redis-server
# 其他平臺可以參考官方文檔:https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/
$ brew install redis
# 安裝 tempredis Go 包
$ go get -u github.com/stvp/tempredis

簡單介紹

可以在 tempredis 文檔 中看到其實現(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)體實際上就是一個 map[string]string 對象,用于設(shè)置 Redis 配置。它的 Socket 方法用于返回 redis.sock 文件位置。

Server 結(jié)構(gòu)體代表一個 Redis 實例對象,幾個方法作用分別如下:

  • Start 是一個函數(shù),用于根據(jù)給定的配置 Config 啟動 Server。
  • Kill 方法用于強制關(guān)閉 redis-server。
  • Term 方法用于優(yōu)雅關(guān)閉 redis-server。
  • Socket 方法會代理到 Config.Socket 方法調(diào)用。
  • Stdout 方法阻塞等待返回 redis-server 執(zhí)行后的標準輸出。
  • Stderr 方法阻塞等待返回 redis-server 執(zhí)行后的錯誤輸出。

使用示例

我們已經(jīng)對 tempredis 提供的方法有了初步的了解,那么是時候?qū)懸粋€小 demo 練練手了,示例代碼如下:

package main

import (
	"fmt"
	"log"
	"time"

	"github.com/go-redis/redis"
	"github.com/stvp/tempredis"
)

func main() {
	// 創(chuàng)建并啟動一個臨時的 Redis 實例
	server, err := tempredis.Start(tempredis.Config{
		"port": "0", // 自動分配端口
	})
	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 退出時關(guān)閉 redis-server
	defer server.Term()

	// 獲取 Redis 的地址
	fmt.Println("Redis server is running at", server.Socket())

	// 連接臨時的 Redis 實例
	client := redis.NewClient(&redis.Options{
		Network: "unix",
		Addr:    server.Socket(),
	})

	// 使用 Redis 實例
	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)
}

代碼中每個部分我都寫了注釋說明,不難理解。在啟動臨時的 Redis 實例后,可以使用任何 Go Redis 客戶端進行連接,這里使用的是 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 ======================

這個示例很好的演示了 tempredis 的功能和用法,剩下唯一沒有演示的就是 Server.Kill 方法了,你可以自行嘗試下。

總結(jié)

本文介紹了如何使用 tempredis 包來啟動 Redis 實例,并應(yīng)用于 Go 項目中??梢园l(fā)現(xiàn),tempredis 包的功能和用法都非常簡單。

之所以介紹這個包,其實是因為這個包出現(xiàn)在 redsync 項目中,這是一個用 Go 語言實現(xiàn)的 Redis 分布式鎖,感興趣的讀者可以自行研究下。

到此這篇關(guān)于使用Go語言啟動Redis的實例詳解的文章就介紹到這了,更多相關(guān)Go啟動Redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go 高效截取字符串的一些思考

    Go 高效截取字符串的一些思考

    這篇文章主要介紹了Go 高效截取字符串的一些思考,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-10-10
  • Go語言操作redis用法實例

    Go語言操作redis用法實例

    這篇文章主要介紹了Go語言操作redis用法,實例分析了Go語言操作redis的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go實現(xiàn)一個輕量級并發(fā)任務(wù)調(diào)度器(支持限速)

    Go實現(xiàn)一個輕量級并發(fā)任務(wù)調(diào)度器(支持限速)

    本文主要介紹了Go實現(xiàn)一個輕量級并發(fā)任務(wù)調(diào)度器(支持限速),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2025-04-04
  • 重學(xué)Go語言之如何使用Modules

    重學(xué)Go語言之如何使用Modules

    Go語言在Go.1.11版本發(fā)布了Go?Modules,這是一種新的Go項目依賴管理解決方案,可以讓Go項目的依賴包關(guān)系更加清晰,也更容易管理,下面就來看看Modules是如何使用的吧
    2023-07-07
  • Go語言同步與異步執(zhí)行多個任務(wù)封裝詳解(Runner和RunnerAsync)

    Go語言同步與異步執(zhí)行多個任務(wù)封裝詳解(Runner和RunnerAsync)

    這篇文章主要給大家介紹了關(guān)于Go語言同步與異步執(zhí)行多個任務(wù)封裝(Runner和RunnerAsync)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧。
    2018-01-01
  • Go語言實現(xiàn)websocket推送程序

    Go語言實現(xiàn)websocket推送程序

    這篇文章主要介紹了Go語言實現(xiàn)websocket推送程序,WebSocket是基于TCP的一個雙向傳輸數(shù)據(jù)的協(xié)議,和HTTP協(xié)議一樣,是在應(yīng)用層的,他的出現(xiàn),是為了解決網(wǎng)頁進行持久雙向傳輸數(shù)據(jù)的問題
    2023-01-01
  • Go語言select語句用法示例

    Go語言select語句用法示例

    這篇文章主要為大家介紹了Go語言select語句用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • GO語言運行環(huán)境下載、安裝、配置圖文教程

    GO語言運行環(huán)境下載、安裝、配置圖文教程

    這篇文章主要介紹了GO語言運行環(huán)境下載、安裝、配置圖文教程,需要的朋友可以參考下
    2017-02-02
  • Fedora14 Linux系統(tǒng)安裝Golang開發(fā)環(huán)境筆記

    Fedora14 Linux系統(tǒng)安裝Golang開發(fā)環(huán)境筆記

    這篇文章主要介紹了Fedora14 Linux系統(tǒng)安裝Golang開發(fā)環(huán)境筆記,本文講解了2種安裝方法,需要的朋友可以參考下
    2014-10-10
  • 詳解go語言中sort如何排序

    詳解go語言中sort如何排序

    我們的代碼業(yè)務(wù)中很多地方需要我們自己進行排序操作,本文主要介紹了詳解go語言中sort如何排序,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論