最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Go語言啟動(dòng)Redis的實(shí)例詳解

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

最近寫了幾篇 Go 并發(fā)編程相關(guān)的文章,想必有些讀者看多了可能會(huì)有些厭倦,今天來點(diǎn)輕松的內(nèi)容,介紹一個(gè)可以用來啟動(dòng) redis-server 的開源庫(kù) 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 gRPC超時(shí)控制Deadlines用法詳解

    Go gRPC超時(shí)控制Deadlines用法詳解

    這篇文章主要為大家介紹了Go gRPC超時(shí)控制Deadlines用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Golang中的錯(cuò)誤處理的示例詳解

    Golang中的錯(cuò)誤處理的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Golang中的錯(cuò)誤處理的相關(guān)資料,文章中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Golang有一定幫助,需要的可以參考一下
    2022-12-12
  • golang編程入門之http請(qǐng)求天氣實(shí)例

    golang編程入門之http請(qǐng)求天氣實(shí)例

    這篇文章主要介紹了golang編程入門之http請(qǐng)求天氣實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解Go中的高效切片拼接和Go1.22提供的新方法

    詳解Go中的高效切片拼接和Go1.22提供的新方法

    在?Go?語言中,切片拼接是一項(xiàng)常見的操作,但如果處理不當(dāng),可能會(huì)導(dǎo)致性能問題或意外的副作用,本文將詳細(xì)介紹幾種高效的切片拼接方法,希望對(duì)大家有所幫助
    2024-01-01
  • Go interface接口聲明實(shí)現(xiàn)及作用詳解

    Go interface接口聲明實(shí)現(xiàn)及作用詳解

    這篇文章主要為大家介紹了Go interface接口聲明實(shí)現(xiàn)及作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 使用Go構(gòu)建一款靜態(tài)分析工具Owl詳解

    使用Go構(gòu)建一款靜態(tài)分析工具Owl詳解

    Owl是一款開源項(xiàng)目依賴分析工具,可以快速在指定的項(xiàng)目目錄下查找符合某些特征的源代碼文件或者依賴文件,這篇文章主要介紹了使用Go構(gòu)建一款靜態(tài)分析工具,需要的朋友可以參考下
    2022-06-06
  • Go語言生成隨機(jī)數(shù)的方法

    Go語言生成隨機(jī)數(shù)的方法

    這篇文章主要介紹了Go語言生成隨機(jī)數(shù)的方法,實(shí)例分析了Go語言生成隨機(jī)數(shù)的原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 詳解Golang如何動(dòng)態(tài)獲取配置文件

    詳解Golang如何動(dòng)態(tài)獲取配置文件

    項(xiàng)目中經(jīng)常獲取一些常用配置文件,當(dāng)有配置文件中的參數(shù)被修改后,如何的實(shí)時(shí)獲取配置文件就很關(guān)鍵了,下面小編就來講講如何利用viper實(shí)時(shí)獲取配置文件吧
    2023-08-08
  • Go?json自定義Unmarshal避免判斷nil示例詳解

    Go?json自定義Unmarshal避免判斷nil示例詳解

    這篇文章主要為大家介紹了Go?json自定義Unmarshal避免判斷nil示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Golang Gin局部和全局中間件使用詳解

    Golang Gin局部和全局中間件使用詳解

    中間件是放在客戶端和服務(wù)端的中間,當(dāng)你的客戶端對(duì)某個(gè)接口發(fā)起一個(gè)請(qǐng)求,但是在到達(dá)接口2之前,這里是有一層中間件的處理。本文詳細(xì)介紹了Golang Gin局部、全局中間件使用方法,感興趣的同學(xué)可以閱讀本文
    2023-04-04

最新評(píng)論

济南市| 定州市| 永宁县| 堆龙德庆县| 合肥市| 贵德县| 林芝县| 九江县| 嘉义县| 任丘市| 新田县| 揭阳市| 阿克苏市| 登封市| 库车县| 神木县| 金塔县| 乌拉特后旗| 万盛区| 旬阳县| 达孜县| 武穴市| 灵璧县| 泸定县| 当涂县| 宝清县| 马龙县| 湖北省| 高青县| 定安县| 清流县| 长宁县| 德钦县| 房山区| 曲阜市| 东乌珠穆沁旗| 临邑县| 张掖市| 丰原市| 丹东市| 建昌县|