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

Golang使用Redis與連接池方式

 更新時間:2024年06月01日 11:16:28   作者:T  
這篇文章主要介紹了Golang使用Redis與連接池方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Golang使用Redis與連接池

使用下載go的redis包go get github.com/gomodule/redigo/redis 如果網(wǎng)不好的話就很費勁了

package main

import (
	"fmt"
	"github.com/gomodule/redigo/redis" // 引入redis包
)

func main() {
	//連接數(shù)據(jù)源
	rediss, err := redis.Dial("tcp", "127.0.01:6379")

	if err != nil {
		fmt.Println("連接異常", err)
	}

	//插入string數(shù)據(jù)
	test, err := rediss.Do("set", "test", "hi")
	if err != nil {
		fmt.Println("插入數(shù)據(jù)失敗", err)
	}
	fmt.Println(test)

	//讀取string數(shù)據(jù)
	str, err := redis.String(rediss.Do("get", "test"))
	fmt.Println(str)

	//hash 類型
	do, _ := rediss.Do("hset", "hh", "name", "zhangsn")
	fmt.Println(do)
	hh, _ := redis.String(rediss.Do("hget", "hh", "name"))
	fmt.Println(hh)

	//設(shè)置key 過期時間
	rediss.Do("expire", "hh", 1)

	//關(guān)閉redis
	rediss.Close()
}

redis數(shù)據(jù)源連接池

package main

import (
    "fmt"
    "github.com/gomodule/redigo/redis" // 引入redis包
)

var pool *redis.Pool

func init() {
    pool = &redis.Pool{
        MaxIdle:     8,   //最大空閑連接數(shù)
        MaxActive:   0,   //表示和數(shù)據(jù)庫最大連接數(shù)。0表示沒有限制
        IdleTimeout: 100, //最大空閑時間
        Dial: func() (redis.Conn, error) { //初始化連接 redis 地址
            return redis.Dial("tcp", "127.0.01:6379")
        },
    }
}
func main() {

    //獲取連接
    conn := pool.Get()
    //插入數(shù)據(jù)
    do, err := conn.Do("set", "11", "11")
    if err != nil {
        fmt.Println("插入失敗", err)
    }

    fmt.Println(do)

    //關(guān)閉redis
    conn.Close()

}

Golang Redis連接池封裝

創(chuàng)建連接池方法文件

package dao
 
import (
	"fmt"
	"github.com/gomodule/redigo/redis"
	"gopkg.in/ini.v1"
	"os"
	"sync"
	"time"
)
 
var once sync.Once
 
// RedisClient Redis 服務(wù)
type RedisClient struct {
	Client *redis.Pool
}
 
//Redis 全局 Redis
var RedisPool *RedisClient
 
//ConnectRedis 連接 redis 數(shù)據(jù)庫,設(shè)置全局的 Redis 對象
func ConnectRedis() {
	config, err := ini.Load("./config/app.ini")
	if err != nil {
		//失敗
		fmt.Printf("Fail to read file: %v", err)
		os.Exit(1)
	}
	address := config.Section("redis").Key("address").String()
	password := config.Section("redis").Key("password").String()
	db, _ := config.Section("redis").Key("db").Int()
	once.Do(func() {
		RedisPool = NewClient(address, password, db)
	})
	con_err := RedisPool.Ping()
	if con_err != nil {
		panic(con_err)
	}
}
 
// NewClient 創(chuàng)建一個新的 redis 連接
func NewClient(address string, password string, db int) *RedisClient {
	// 初始化自定的 RedisClient 實例
	rds := &RedisClient{}
	// 使用 redis 庫里的 NewClient 初始化連接
	rds.Client = &redis.Pool{
		MaxIdle:     100,  //最大空閑
		MaxActive:   1000, //最大連接
		IdleTimeout: time.Duration(60) * time.Second,
		Wait:        true,
		Dial: func() (redis.Conn, error) {
			c, err := redis.Dial(
				"tcp",
				address,
				redis.DialPassword(password),
				redis.DialDatabase(int(db)),
				redis.DialConnectTimeout(time.Duration(60)*time.Second),
				redis.DialReadTimeout(time.Duration(60)*time.Second),
				redis.DialWriteTimeout(time.Duration(60)*time.Second),
			)
			if err != nil {
				return nil, err
			}
			return c, err
		},
	}
	return rds
}
 
// Ping 用以測試 redis 連接是否正常
func (rds *RedisClient) Ping() error {
	_, err := rds.Client.Get().Do("ping")
	return err
}
 
// Set 存儲 key 對應(yīng)的 value,且設(shè)置 expiration 過期時間(單位納秒)
func (rds *RedisClient) Setex(key string, expiration int, value interface{}) bool {
	conn := rds.Client.Get()
	defer conn.Close()
	if _, err := conn.Do("setex", key, expiration, value); err != nil {
		fmt.Println(err)
		return false
	}
	return true
}
 
//
//Get 獲取 key 對應(yīng)的 value
func (rds *RedisClient) Get(key string) string {
	conn := rds.Client.Get()
	defer conn.Close()
	result, err := redis.String(conn.Do("Get", key))
	if err != nil {
		return ""
	}
	return result
}
 
//Get 獲取 key 對應(yīng)的 value
func (rds *RedisClient) Rpop(key string) (string, error) {
	conn := rds.Client.Get()
	defer conn.Close()
	result, err := redis.String(conn.Do("Rpop", key))
	if err != nil {
		return "", err
	}
	return result, nil
}

配置文件

app_name   = go-gin
 
 
[mysql]
ip       = 127.0.0.1
port     = 3306
user     = root
password = root
database = test
prefix   = tt_
#最大連接數(shù)
MaxIdleConns = 500
#最大空閑
MaxOpenConns = 50
 
[redis]
address   = 127.0.0.1:6379
password = 123456
db = 7

調(diào)用方法

func main() {
	dao.ConnectRedis()                 //初始化連接redis
	defer dao.RedisPool.Client.Close() //退出前執(zhí)行關(guān)閉
	res, err := dao.RedisPool.Rpop("aaa")
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(res)
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • go集成gorm數(shù)據(jù)庫的操作代碼

    go集成gorm數(shù)據(jù)庫的操作代碼

    GORM 是一個用于 Go 語言的 ORM(對象關(guān)系映射)庫,它提供了一種簡單而強大的方式來與數(shù)據(jù)庫進行交互,GORM 支持多種數(shù)據(jù)庫,并且提供了豐富的功能,如自動遷移、預(yù)加載、事務(wù)管理等,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-11-11
  • Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)實例

    Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)實例

    golang語言本身就是c的工具集,開發(fā)c的程序用到的大部分結(jié)構(gòu)體,內(nèi)存管理,攜程等,golang基本都有,下面這篇文章主要給大家介紹了關(guān)于Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Golang基于內(nèi)存的鍵值存儲緩存庫go-cache

    Golang基于內(nèi)存的鍵值存儲緩存庫go-cache

    go-cache是一個內(nèi)存中的key:value store/cache庫,適用于單機應(yīng)用程序,本文主要介紹了Golang基于內(nèi)存的鍵值存儲緩存庫go-cache,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • 詳解Go語言中的數(shù)據(jù)類型及類型轉(zhuǎn)換

    詳解Go語言中的數(shù)據(jù)類型及類型轉(zhuǎn)換

    這篇文章主要為大家介紹了Go語言中常見的幾種數(shù)據(jù)類型,以及他們之間的轉(zhuǎn)換方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-04-04
  • go語言使用jwt認證的實現(xiàn)

    go語言使用jwt認證的實現(xiàn)

    本文主要介紹了go語言使用jwt認證的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 如何使用Go語言獲取當天、昨天、明天、某天0點時間戳以及格式化時間

    如何使用Go語言獲取當天、昨天、明天、某天0點時間戳以及格式化時間

    這篇文章主要給大家介紹了關(guān)于如何使用Go語言獲取當天、昨天、明天、某天0點時間戳以及格式化時間的相關(guān)資料,格式化時間戳是將時間戳轉(zhuǎn)換為特定的日期和時間格式,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • Go語言實現(xiàn)Base64、Base58編碼與解碼

    Go語言實現(xiàn)Base64、Base58編碼與解碼

    本文主要介紹了Base64、Base58編碼與解碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 一文帶你掌握Go語言中的時間處理操作

    一文帶你掌握Go語言中的時間處理操作

    這篇文章主要為大家詳細介紹了Go語言中的時間處理操作的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2026-04-04
  • Golang實現(xiàn)IO操作

    Golang實現(xiàn)IO操作

    本文主要介紹了Golang實現(xiàn)IO操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • 解決go 生成的exe不在bin文件夾里的問題

    解決go 生成的exe不在bin文件夾里的問題

    這篇文章主要介紹了解決go 生成的exe不在bin文件夾里的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

商河县| 新乡市| 东兰县| 榆社县| 同江市| 东海县| 西城区| 龙海市| 汶川县| 定兴县| 盱眙县| 寻乌县| 贵德县| 蒲城县| 方山县| 高碑店市| 鄂州市| 绥滨县| 壶关县| 连云港市| 治县。| 冷水江市| 天峻县| 阿瓦提县| 弋阳县| 济阳县| 商水县| 郧西县| 桂阳县| 黄浦区| 广安市| 金塔县| 菏泽市| 外汇| 广饶县| 娱乐| 徐闻县| 嘉义县| 阳信县| 彭州市| 乐清市|