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

golang操作Redis的實現(xiàn)示例

 更新時間:2024年04月25日 11:52:45   作者:寸 鐵  
本文主要介紹了golang操作Redis的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Redis的作用

Redis(Remote Dictionary Server)是一個開源的內(nèi)存數(shù)據(jù)庫,它主要用于存儲鍵值對,并提供多種數(shù)據(jù)結(jié)構(gòu)的支持。Redis 的主要作用包括:

  • 1.緩存: Redis 可以作為緩存系統(tǒng),將常用的數(shù)據(jù)緩存在內(nèi)存中,以提高數(shù)據(jù)訪問速度。由于 Redis 是基于內(nèi)存的,所以讀取速度非常快,適用于需要快速訪問的場景,如網(wǎng)頁緩存、API 響應(yīng)緩存等。
  • 2.會話存儲: 可以將用戶會話信息存儲在 Redis 中,實現(xiàn)分布式會話管理。這樣可以避免單點故障,并且能夠輕松地實現(xiàn)會話共享和負(fù)載均衡。
  • 3.消息隊列: Redis 支持發(fā)布訂閱(Pub/Sub)模式,可以用作簡單的消息隊列系統(tǒng)。發(fā)布者將消息發(fā)布到特定的頻道,而訂閱者則可以訂閱這些頻道以接收消息。這使得 Redis 在異步通信、任務(wù)隊列等場景中非常有用。
  • 4.計數(shù)器和排行榜: Redis 的原子計數(shù)器和有序集合功能可用于實現(xiàn)計數(shù)器和排行榜功能。比如統(tǒng)計網(wǎng)站訪問次數(shù)、文章點贊數(shù)、用戶積分排行等。
  • 5.分布式鎖: Redis 的 SETNX 和 EXPIRE 命令結(jié)合可以實現(xiàn)分布式鎖,用于控制多個客戶端對共享資源的訪問,防止出現(xiàn)競態(tài)條件。
  • 6.持久化: Redis 支持多種持久化方式,包括快照(snapshot)和日志(append-only file),可以將內(nèi)存中的數(shù)據(jù)定期或?qū)崟r地保存到磁盤上,以防止數(shù)據(jù)丟失。
  • 7.地理空間數(shù)據(jù)處理: Redis 支持地理空間數(shù)據(jù)類型(Geo),可以存儲經(jīng)緯度信息,并提供相關(guān)的距離計算、地理位置查詢等功能。

總的來說,Redis 是一個功能豐富的內(nèi)存數(shù)據(jù)庫,可以用于多種場景,包括緩存、會話存儲、消息隊列、計數(shù)器和排行榜、分布式鎖等,為應(yīng)用程序提供高性能、高可用的數(shù)據(jù)存儲和處理能力。

go實現(xiàn)

那怎么使用go語言實現(xiàn)Redis的基本操作呢?下面寸鐵帶你手把手實現(xiàn)!

建立redis連接

var rdb *redis.Client

// 建立redis連接
func init() {
	rdb = redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "",
		DB:       0,
	})
}

字段說明

  • Addr: 指定 Redis 服務(wù)器的地址,包括主機和端口號。在這里是本地主機的默認(rèn) Redis 端口 6379。
  • Password: Redis 服務(wù)器的訪問密碼,如果 Redis 設(shè)置了密碼,需要在此處填入密碼。
  • DB: 指定連接的 Redis 數(shù)據(jù)庫編號。Redis 支持多個數(shù)據(jù)庫,默認(rèn)使用的是第一個數(shù)據(jù)庫編號為 0。

設(shè)置指定鍵的值

ctx := context.Background()
	err := rdb.Set(ctx, "rediskey", "redisvalue", 0).Err()
	if err != nil {
		panic(err)
	}

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 鍵名:“rediskey”,指定要設(shè)置的鍵名。
  • 鍵值:“redisvalue”,指定要設(shè)置的鍵值。
  • 過期時間:0,表示該鍵永不過期。

獲取指定鍵的值

	getres, err := rdb.Get(ctx, "rediskey").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("get執(zhí)行的result", getres) 

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 鍵名:“rediskey”,指定要獲取值的鍵名。

執(zhí)行原生的 Redis 命令

dores, err := rdb.Do(ctx, "GET", "rediskey").Result()
if err != nil {
    panic(err)
}
fmt.Println("do get 執(zhí)行的result", dores.(string))

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • Redis 命令:“GET”,指定要執(zhí)行的 Redis 命令是 GET。
  • 命令參數(shù):“rediskey”,指定 GET 命令的鍵名。

設(shè)置指定鍵的值,并返回鍵的舊值

oldres, err := rdb.GetSet(ctx, "rediskey", "newvalue").Result()
if err != nil {
    panic(err)
}
fmt.Println("GetSet執(zhí)行的result", oldres) // redisvalue

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 鍵名:“rediskey”,指定要設(shè)置值的鍵名。
  • 新值:“newvalue”,指定要設(shè)置的新值。

鍵不存在時設(shè)置鍵的值

err = rdb.SetNX(ctx, "key3", "value3", 0).Err()
if err != nil {
    panic(err)
}

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 鍵名:“key3”,指定要設(shè)置值的鍵名。
  • :“value3”,指定要設(shè)置的值。
  • 超時時間:0,表示不設(shè)置超時時間。

批量獲取多個鍵的值

result, err := rdb.MGet(ctx, "key1", "key2", "key3").Result()
if err != nil {
    panic(err)
}
fmt.Println(result)

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 要獲取值的鍵名:“key1”, “key2”, “key3”,指定了要獲取值的多個鍵名。

批量設(shè)置多個鍵的值

setKey := rdb.MSet(ctx, "key1", "value1", "key2", "value2", "key3", "value3")
if err != nil {
    panic(err)
}
fmt.Println(setKey)

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 要設(shè)置值的鍵值對:“key1”, “value1”, “key2”, “value2”, “key3”, “value3”,這里同時設(shè)置了多個鍵值對。

將鍵的值自增 1

i, err := rdb.Incr(ctx, "inckey").Result()
fmt.Println("Incr自增后的值:", i) //1

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 要自增的鍵名:“inckey”,指定了要進行自增操作的鍵名。

自增設(shè)定的整數(shù)

i2, err := rdb.IncrBy(ctx, "inckey", 2).Result()
fmt.Println("IncrBy自增后的值", i2) //3

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 要自增的鍵名:“inckey”,指定了要進行自增操作的鍵名。
  • 自增的整數(shù)值:這里是 2,表示要將鍵的值增加 2。

將鍵的值自增指定的浮點數(shù)

i3, err := rdb.IncrByFloat(ctx, "inckey", 2.2).Result()
fmt.Println("IncrByFloat自增后的值", i3) //5.2

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 要自增的鍵名:“inckey”,指定了要進行自增操作的鍵名。
  • 自增的浮點數(shù)值:這里是 2.2,表示要將鍵的值增加 2.2。

刪除指定的鍵

rdb.Del(ctx, "key1")

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 要刪除的鍵名:“key1”,指定了要進行刪除操作的鍵名。

批量刪除多個鍵

err = rdb.Del(ctx, "key2", "key3").Err()
if err != nil {
    panic(err)
}

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 要刪除的多個鍵名:“key2”, “key3”,指定了要進行刪除操作的鍵名列表。

設(shè)置指定鍵的過期時間

rdb.Expire(ctx, "key", 10*time.Second)

字段說明

  • 上下文(context):在 Go 中,上下文用于控制請求的生命周期,包括取消請求和設(shè)置超時時間等。
  • 要設(shè)置過期時間的鍵名:“key”,指定了要設(shè)置過期時間的鍵名。
  • 過期時間:這里是 10 秒,表示在當(dāng)前時間的基礎(chǔ)上,鍵 “key” 會在 10 秒后過期失效。

demo

package main

import (
	"context"
	"fmt"
	"github.com/go-redis/redis/v8"
	"time"
)

// 建立redis連接
func init() {
	rdb = redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "",
		DB:       0,
	})
}

func main() {
	ctx := context.Background()
	err := rdb.Set(ctx, "rediskey", "redisvalue", 0).Err()
	if err != nil {
		panic(err)
	}
	getres, err := rdb.Get(ctx, "rediskey").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("get執(zhí)行的result", getres) //redisvalue

	//使用DO 原生的操作
	dores, err := rdb.Do(ctx, "GET", "rediskey").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("do get 執(zhí)行的result", dores.(string)) //redisvalue

	//即使設(shè)置新的值 取到的是舊的值 但是在redis中是設(shè)置了新的值
	oldres, err := rdb.GetSet(ctx, "rediskey", "newvalue").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("GetSet執(zhí)行的result", oldres) //redisvalue

	//存在則不設(shè)置該值 不存在則設(shè)置該值
	err = rdb.SetNX(ctx, "key3", "value3", 0).Err()
	if err != nil {
		panic(err)
	}

	//批量取出鍵的值
	result, err := rdb.MGet(ctx, "key1", "key2", "key3").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(result)

	//批量設(shè)置鍵的值 類似Map 對于同一個鍵的值 再設(shè)置會進行覆蓋
	setKey := rdb.MSet(ctx, "key1", "value1", "key2", "value2", "key3", "value3")
	if err != nil {
		panic(err)
	}
	fmt.Println(setKey)

	//自增1
	i, err := rdb.Incr(ctx, "inckey").Result()
	fmt.Println("Incr自增后的值:", i) //1

	//自增設(shè)定的整數(shù)
	i2, err := rdb.IncrBy(ctx, "inckey", 2).Result()
	fmt.Println("IncrBy自增后的值", i2) //3

	//自增設(shè)定的浮點數(shù)
	i3, err := rdb.IncrByFloat(ctx, "inckey", 2.2).Result()
	fmt.Println("IncrByFloat自增后的值", i3) //5.2

	//自減1
	i4, err := rdb.Decr(ctx, "inckey").Result()
	fmt.Println("Incr自增后的值:", i4) //0 3-->2

	//自減設(shè)定的整數(shù)
	i5, err := rdb.DecrBy(ctx, "inckey", 2).Result()
	fmt.Println("IncrBy自增后的值", i5) //0 2-->0

	//單個刪除
	rdb.Del(ctx, "key1")

	//批量刪除
	err = rdb.Del(ctx, "key2", "key3").Err()
	if err != nil {
		panic(err)
	}

	//設(shè)置過期時間 10秒鐘后失效
	//rdb.Set(ctx, "key", "value", 10*time.Second)
	rdb.Expire(ctx, "key", 10*time.Second)

}

到此這篇關(guān)于golang操作Redis的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)golang操作Redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 深入理解golang chan的使用

    深入理解golang chan的使用

    本文主要介紹了golang chan的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Golang實現(xiàn)自定義recovery中間件

    Golang實現(xiàn)自定義recovery中間件

    在?Golang?的?Web?項目中,自定義?recovery?中間件是一種常見的做法,用于捕獲并處理應(yīng)用程序的運行時錯誤,下面我們就來看看具體如何實現(xiàn)吧
    2023-09-09
  • goland把go項目打包進docker鏡像的全過程記錄

    goland把go項目打包進docker鏡像的全過程記錄

    golang編譯的應(yīng)用是不需要依賴其他運行環(huán)境的,下面這篇文章主要給大家介紹了關(guān)于goland把go項目打包進docker鏡像的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 基于Go語言實現(xiàn)類似tree命令的小程序

    基于Go語言實現(xiàn)類似tree命令的小程序

    tree?命令是一個小型的跨平臺命令行程序,用于遞歸地以樹狀格式列出或顯示目錄的內(nèi)容。本文將通過Go語言實現(xiàn)類似tree命令的小程序,需要的可以參考一下
    2022-10-10
  • 利用Go語言實現(xiàn)Raft日志同步

    利用Go語言實現(xiàn)Raft日志同步

    這篇文章主要為大家詳細(xì)介紹了如何利用Go語言實現(xiàn)Raft日志同步,文中的示例代碼講解詳細(xì),對我們深入了解Go語言有一定的幫助,需要的可以參考一下
    2023-05-05
  • 淺析Golang開發(fā)中g(shù)oroutine的正確使用姿勢

    淺析Golang開發(fā)中g(shù)oroutine的正確使用姿勢

    很多初級的Gopher在學(xué)習(xí)了goroutine之后,在項目中其實使用率不高,所以這篇文章小編主要來帶大家深入了解一下goroutine的常見使用方法,希望對大家有所幫助
    2024-03-03
  • Mac OS系統(tǒng)安裝golang教程

    Mac OS系統(tǒng)安裝golang教程

    這篇文章主要介紹了Mac OS系統(tǒng)安裝golang教程,本文還同時介紹了Sublime Text開發(fā)工具的配置,需要的朋友可以參考下
    2015-01-01
  • Golang繼承模擬實例詳解

    Golang繼承模擬實例詳解

    這篇文章主要介紹了Golang繼承模擬方法,結(jié)合實例形式分析了Go語言實現(xiàn)繼承的原理與相關(guān)操作技巧,需要的朋友可以參考下
    2016-07-07
  • golang如何使用gomobile進行Android開發(fā)

    golang如何使用gomobile進行Android開發(fā)

    golang可以開發(fā)android,使用golang開發(fā)android需要下載安裝gomobile,下面這篇文章主要給大家介紹了關(guān)于golang如何使用gomobile進行Android開發(fā)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Golang實現(xiàn)將視頻按照時間維度剪切的工具

    Golang實現(xiàn)將視頻按照時間維度剪切的工具

    這篇文章主要為大家詳細(xì)介紹了如何利用Golang實現(xiàn)將視頻按照時間維度進行剪切,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12

最新評論