亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解如何通過(guò)Go來(lái)操作Redis實(shí)現(xiàn)簡(jiǎn)單的讀寫(xiě)操作

 更新時(shí)間:2023年09月22日 10:33:56   作者:Shawn590  
作為最常用的分布式緩存中間件——Redis,了解運(yùn)作原理和如何使用是十分有必要的,今天來(lái)學(xué)習(xí)如何通過(guò)Go來(lái)操作Redis實(shí)現(xiàn)基本的讀寫(xiě)操作,需要的朋友可以參考下

為什么要使用Redis?

對(duì)于這個(gè)問(wèn)題,最近看到有種比較清晰的說(shuō)法,想要記錄下來(lái):

  • 在微服務(wù)的場(chǎng)景下,我們有多臺(tái)服務(wù)器。這多臺(tái)的服務(wù)器需要去并發(fā)地操作同一個(gè)變量。在這種情況下,顯然不能只存放在單個(gè)的服務(wù)器上面,而應(yīng)該存放在一個(gè)公共的地方——分布式緩存。

  • 我們有時(shí)候需要加載大量的數(shù)據(jù)放入緩存。如果說(shuō)在每臺(tái)服務(wù)器上面,都開(kāi)辟一個(gè)很大的內(nèi)存空間來(lái)存放這些數(shù)據(jù)的話,顯然非常消耗內(nèi)存。此時(shí)我們應(yīng)該也把它們挪到一個(gè)公共的地方——分布式緩存

導(dǎo)入對(duì)應(yīng)的包

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

創(chuàng)建一個(gè)操作Redis的一個(gè)客戶(hù)端

client := redis.NewClient(&redis.Options{
    Addr:"127.0.0.1:6379",      //地址,這里使用本地服務(wù)器的默認(rèn)端口
    Password:"123456",          //訪問(wèn)Redis的密碼
    DB:0,                       //使用默認(rèn)的0號(hào)DB
})
ctx :=conetxt.TODO()            //創(chuàng)建一個(gè)默認(rèn)的context

寫(xiě)入和讀寫(xiě)string類(lèi)型的值

func string(ctx context.Context, client *redis.Client) {
	key := "name"
	value := "大臉貓"
	err := client.Set(ctx, key, value, 1*time.Second).Err() //1秒后失效。0表示永不失效
  //錯(cuò)誤處理
	if err != nil {  
		if err == redis.Nil {
			fmt.Println("key不存在")
		} else {
			fmt.Println(err)
			os.Exit(1)
		}
	} 
  //通過(guò)Expire設(shè)置3秒后失效
	client.Expire(ctx, key, 3*time.Second) 
	v2, err := client.Get(ctx, key).Result()
  //錯(cuò)誤處理
	if err != nil { 
		if err == redis.Nil {
			fmt.Println("key不存在")
		} else {
			fmt.Println(err)
			os.Exit(1)
		}
	} 
	fmt.Println(v2)
  //刪除鍵
	client.Del(ctx, key)
}

string函數(shù)展示了如何與Redis數(shù)據(jù)庫(kù)進(jìn)行交互,包括設(shè)置鍵值對(duì)、設(shè)置過(guò)期時(shí)間、獲取值以及刪除鍵的操作。下面是詳細(xì)的解釋?zhuān)?/p>

  • func string(ctx context.Context, client *redis.Client) 該函數(shù)接受兩個(gè)參數(shù)ctx 是一個(gè)類(lèi)型為 context.Context 的上下文對(duì)象,client 是與Redis服務(wù)器建立連接的 redis.Client 實(shí)例。

  • key := "name"value := "大臉貓"定義一個(gè)鍵(key)和一個(gè)值(value。在這里,鍵被設(shè)置為 "name",而值被設(shè)置為 "大臉貓"。這些將作為數(shù)據(jù)存儲(chǔ)在Redis中。

  • err := client.Set(ctx, key, value, 1*time.Second).Err()這一行代碼使用 client.Set 方法來(lái)設(shè)置鍵值對(duì)的參數(shù)到Redis中。它接受四個(gè)參數(shù):

    • ctx:上下文對(duì)象,用于處理操作的超時(shí)和取消。
    • key:要設(shè)置的鍵。
    • value:要設(shè)置的值。
    • 1*time.Second:過(guò)期時(shí)間,這里設(shè)置為1秒,表示在1秒后鍵值對(duì)會(huì)失效。如果將過(guò)期時(shí)間設(shè)置為0,鍵值對(duì)將永不失效。
  • client.Expire(ctx, key, 3*time.Second)這是一種另外的方式來(lái)設(shè)置鍵的過(guò)期時(shí)間:通過(guò)client.Expire 方法設(shè)置鍵 "name" 在3秒后過(guò)期失效。

  • v2, err := client.Get(ctx, key).Result()通過(guò)使用client.Get方法來(lái)獲取鍵"name"對(duì)應(yīng)的值。

  • client.Del(ctx, key) 使用client.Del方法刪除鍵"name",從而把這個(gè)鍵值對(duì)從Redis中刪除。

寫(xiě)入和讀取list類(lèi)型的值

func list(ctx context.Context, client *redis.Client) {
	key := "ids"
	values := []interface{}{1, "中", 3, 4}
	err := client.RPush(ctx, key, values...).Err() //向List右側(cè)插入。如果List不存在會(huì)先創(chuàng)建
	if err != nil { 
		if err == redis.Nil {
			fmt.Println("key不存在")
		} else {
			fmt.Println(err)
			os.Exit(1)
		}
	} 
	v2, err := client.LRange(ctx, key, 0, -1).Result() //截取。雙閉區(qū)間
	if err != nil { 
		if err == redis.Nil {
			fmt.Println("key不存在")
		} else {
			fmt.Println(err)
			os.Exit(1)
		}
	} 
	fmt.Println(v2)
	client.Del(ctx, key)
} 

list函數(shù)展示了Redis的列表(List)數(shù)據(jù)結(jié)構(gòu)的操作,包括向列表右側(cè)插入值、獲取列表元素以及刪除列表。下面是詳細(xì)的解釋?zhuān)?/p>

  • func list(ctx context.Context, client *redis.Client) 該函數(shù)接受兩個(gè)參數(shù)ctx 是一個(gè)類(lèi)型為 context.Context 的上下文對(duì)象,client 是與Redis服務(wù)器建立連接的 redis.Client 實(shí)例。

  • key := "ids" values := []interface{}{1, "中", 3, 4}定義了一個(gè)鍵(key)和一個(gè)值的切片(values)。在這里,鍵被設(shè)置為 "ids",而值的切片包含了多個(gè)元素,包括整數(shù)1、字符串 "中"、整數(shù)3和整數(shù)4。這些將作為列表存儲(chǔ)在Redis中。

  • err := client.RPush(ctx, key, values...).Err()RPush 方法用于將值添加到列表的右側(cè),如果列表不存在,它會(huì)先創(chuàng)建一個(gè)新的列表。在這里,我們將值1、"中"、3和4依次插入到列表 "ids" 中。
    這里的 client.RPush 方法向名為 "ids" 的列表右側(cè)插入多個(gè)值。它接受三個(gè)參數(shù):

    • ctx:上下文對(duì)象,用于處理操作的超時(shí)和取消。
    • key:要插入值的列表的鍵。
    • values...:要插入的多個(gè)值。在這里,我們使用了 values... 來(lái)將切片 values 的元素展開(kāi)作為參數(shù)。
  • v2, err := client.LRange(ctx, key, 0, -1).Result() LRange 方法用于獲取列表中的元素,返回一個(gè)字符串切片。在這里,我們將獲取到的元素存儲(chǔ)在 v2 變量中。這里使用 client.LRange 方法來(lái)獲取列表 "ids" 中的所有元素。它接受三個(gè)參數(shù):

    • ctx:上下文對(duì)象,用于處理操作的超時(shí)和取消。
    • key:要獲取元素的列表的鍵。
    • 0-1:表示要獲取的元素范圍,這里是從列表的第一個(gè)元素(下標(biāo)0)到最后一個(gè)元素(-1)。這相當(dāng)于獲取整個(gè)列表。
  • client.Del(ctx, key) 使用 client.Del 方法刪除了鍵為 "ids" 的列表,從而把這個(gè)列表從Redis中刪除。

寫(xiě)入和讀取hashtable類(lèi)型的

func hashtable(ctx context.Context, client *redis.Client) {
	//key  field1 value1  field2 value2  ...
	err := client.HSet(ctx, "學(xué)生1", "Name", "張三", "Age", 18, "Height", 173.5).Err()
	//錯(cuò)誤處理
  if err != nil { 
		if err == redis.Nil {
			fmt.Println("key不存在")
		} else {
			fmt.Println(err)
			os.Exit(1)
		}
	} 
	err = client.HSet(ctx, "學(xué)生2", "Name", "李四", "Age", 20, "Height", 180.0).Err()
  //錯(cuò)誤處理
  if err != nil { 
		if err == redis.Nil {
			fmt.Println("key不存在")
		} else {
			fmt.Println(err)
			os.Exit(1)
		}
	} 
	age, err := client.HGet(ctx, "學(xué)生2", "Age").Result()
  //錯(cuò)誤處理
  if err != nil { 
		if err == redis.Nil {
			fmt.Println("key不存在")
		} else {
			fmt.Println(err)
			os.Exit(1)
		}
	} 
	fmt.Println(age)
	for field, value := range client.HGetAll(ctx, "學(xué)生1").Val() {
		fmt.Println(field, value)
	}
	client.Del(ctx, "學(xué)生1")
	client.Del(ctx, "學(xué)生2")
}

hashtable函數(shù)具體展示了Redis的哈希表(Hash)數(shù)據(jù)結(jié)構(gòu)的操作,包括設(shè)置字段和值、獲取字段的值、獲取所有字段-值對(duì)以及刪除哈希表。下面是詳細(xì)的解釋?zhuān)?/p>

  • func hashtable(ctx context.Context, client *redis.Client) 該函數(shù)接受兩個(gè)參數(shù)ctx 是一個(gè)類(lèi)型為 context.Context 的上下文對(duì)象,client 是與Redis服務(wù)器建立連接的 redis.Client 實(shí)例。

  • err := client.HSet(ctx, "學(xué)生1", "Name", "張三", "Age", 18, "Height", 173.5).Err()使用 client.HSet 方法向名為 "學(xué)生1" 的哈希表中設(shè)置多個(gè)字段(field)和對(duì)應(yīng)的值(value)。哈希表是一種鍵值對(duì)存儲(chǔ)結(jié)構(gòu),類(lèi)似于字典。在這里,我們?cè)O(shè)置了三對(duì)字段和值: "Name" 和 "張三"、"Age" 和 18、"Height" 和 173.5。換言之,就是在 "學(xué)生1" 哈希表中存儲(chǔ)了學(xué)生的姓名、年齡和身高信息。

  • age, err := client.HGet(ctx, "學(xué)生2", "Age").Result() 使用 client.HGet 方法獲取名為 "學(xué)生2" 的哈希表中的 "Age" 字段對(duì)應(yīng)的值。在這里,我們獲取了學(xué)生的年齡信息,并將其存儲(chǔ)在 age 變量中。

for field, value := range client.HGetAll(ctx, "學(xué)生1").Val() {
   fmt.Println(field, value)
}
  • 使用 client.HGetAll 方法獲取名為 "學(xué)生1" 的哈希表中的所有字段和對(duì)應(yīng)的值,并將它們以字段-值 對(duì)的形式遍歷并打印出來(lái)。這樣可以獲取并顯示學(xué)生1的所有信息。

  • client.Del(ctx, "學(xué)生1")client.Del(ctx, "學(xué)生2")使用 client.Del 方法刪除了 "學(xué)生1" 和 "學(xué)生2" 兩個(gè)哈希表。這將從Redis中刪除這兩個(gè)哈希表,清除了示例中使用的數(shù)據(jù)。

以上就是詳解如何通過(guò)Go來(lái)操作Redis實(shí)現(xiàn)簡(jiǎn)單的讀寫(xiě)操作的詳細(xì)內(nèi)容,更多關(guān)于Go操作Redis實(shí)現(xiàn)讀寫(xiě)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Go語(yǔ)言實(shí)現(xiàn)敏感詞過(guò)濾功能

    使用Go語(yǔ)言實(shí)現(xiàn)敏感詞過(guò)濾功能

    敏感詞過(guò)濾,算是一個(gè)比較常見(jiàn)的功能,尤其是在內(nèi)容、社交類(lèi)應(yīng)用中更是如此,本文介紹如何使用Go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的敏感詞過(guò)濾功能,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • GoLang日志監(jiān)控系統(tǒng)實(shí)現(xiàn)

    GoLang日志監(jiān)控系統(tǒng)實(shí)現(xiàn)

    這篇文章主要介紹了GoLang日志監(jiān)控系統(tǒng)的實(shí)現(xiàn)流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-12-12
  • 使用go xorm來(lái)操作mysql的方法實(shí)例

    使用go xorm來(lái)操作mysql的方法實(shí)例

    今天小編就為大家分享一篇關(guān)于使用go xorm來(lái)操作mysql的方法實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • Golang中fsnotify包監(jiān)聽(tīng)文件變化的原理詳解

    Golang中fsnotify包監(jiān)聽(tīng)文件變化的原理詳解

    Golang提供了一個(gè)強(qiáng)大的fsnotify包,它能夠幫助我們輕松實(shí)現(xiàn)文件系統(tǒng)的監(jiān)控,本文將深入探討fsnotify包的原理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Go處理包含多種引號(hào)的字符串的幾種方法

    Go處理包含多種引號(hào)的字符串的幾種方法

    在Go中,有幾種方式可以處理包含多種引號(hào)的字符串,以確保代碼的可讀性和正確性,本文將給大家詳細(xì)介紹了這幾種處理方式,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Go-Web框架中AOP方案的實(shí)現(xiàn)方式

    Go-Web框架中AOP方案的實(shí)現(xiàn)方式

    本文主要介紹了Go-Web框架中AOP方案的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Go語(yǔ)言中一定要知道的切片使用注意事項(xiàng)總結(jié)

    Go語(yǔ)言中一定要知道的切片使用注意事項(xiàng)總結(jié)

    了解和掌握切片的使用注意事項(xiàng),可以避免意外的程序行為,所以本文就來(lái)和大家深入探討一下Go語(yǔ)言切片常見(jiàn)的注意事項(xiàng),希望對(duì)大家有所幫助
    2023-06-06
  • 深入解析Go語(yǔ)言中上下文超時(shí)與子進(jìn)程管理

    深入解析Go語(yǔ)言中上下文超時(shí)與子進(jìn)程管理

    這篇文章小編將通過(guò)一個(gè)實(shí)際問(wèn)題的案例,和大家深入探討一下Go語(yǔ)言中的上下文超時(shí)和子進(jìn)程管理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Go Java算法之Excel表列名稱(chēng)示例詳解

    Go Java算法之Excel表列名稱(chēng)示例詳解

    這篇文章主要為大家介紹了Go Java算法之Excel表列名稱(chēng)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 深入剖析Go語(yǔ)言編程中switch語(yǔ)句的使用

    深入剖析Go語(yǔ)言編程中switch語(yǔ)句的使用

    這篇文章主要介紹了Go語(yǔ)言編程中switch語(yǔ)句的使用,是Go語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10

最新評(píng)論