GoFrame NoSQL Redis-配置管理

2022-04-07 09:35 更新

?gredis?組件支持兩種方式來管理?redis?配置和獲取?redis?對象,一種是通過配置組件+單例對象的方式;一種是模塊化通過配置管理方法及對象創(chuàng)建方法。

配置文件(推薦)

絕大部分情況下推薦使用g.Redis單例方式來操作redis。因此同樣推薦使用配置文件來管理Redis配置,在config.yaml中的配置示例如下:

單實(shí)例配置

# Redis 配置示例
redis:
  # 單實(shí)例配置示例1
  default:
    address: 127.0.0.1:6379
    db:      1

  # 單實(shí)例配置示例2
  cache:
    address:     127.0.0.1:6379
    db:          1
    pass:        123456
    idleTimeout: 600

集群化配置

# Redis 配置示例
redis:
   # 集群模式配置方法
  group:	
    address: 127.0.0.1:6379,127.0.0.1:6370
    db:      1

配置項(xiàng)說明

 配置項(xiàng)名稱  是否必須  默認(rèn)值  說明
 ?address?  是  ?-?  格式:?地址:端口? 支持Redis單實(shí)例模式和集群模式配置,使用,分隔多個(gè)地址。例如: ?192.168.1.1:6379,192.168.1.2:6379 ?
 ?db?  否  ?0?  數(shù)據(jù)庫索引
 ?pass?  否  ?-?  訪問授權(quán)密碼
 ?minIdle?  否  ?0?  允許閑置的最小連接數(shù)
 ?maxIdle?  否  ?10?  允許閑置的最大連接數(shù)(0表示不限制)
 ?maxActive?  否  ?100?  最大連接數(shù)量閑置(0表示不限制)
 ?idleTimeout?  否  ?10?  連接最大空閑時(shí)間,使用時(shí)間字符串例如?30s/1m/1d?
 ?maxConnLifetime?  否  ?30?  連接最長存活時(shí)間,使用時(shí)間字符串例如?30s/1m/1d?
 ?waitTimeout?  否  ?0?  等待連接池連接的超時(shí)時(shí)間,使用時(shí)間字符串例如?30s/1m/1d?
 ?dialTimeout?  否  ?0?  ?TCP?連接的超時(shí)時(shí)間,使用時(shí)間字符串例如?30s/1m/1d?
 ?readTimeout?  否  ?0?  ?TCP?的?Read?操作超時(shí)時(shí)間,使用時(shí)間字符串例如?30s/1m/1d?
 ?writeTimeout?  否  ?0?  ?TCP?的?Write?操作超時(shí)時(shí)間,使用時(shí)間字符串例如?30s/1m/1d?
 ?masterName?  否  ?-?  哨兵模式下使用,設(shè)置?MasterName?
 ?tls?  否  ?false?  是否使用?TLS?認(rèn)證
 ?tlsSkipVerify?  否  ?false?  通過?TLS?連接時(shí),是否禁用服務(wù)器名稱驗(yàn)證

使用示例:

func main() {
	var (
		ctx = context.Background()
	)
	conn, _ := g.Redis().Conn(ctx)
	conn.Do(ctx, "SET", "Key", "Value")
	v, _ := conn.Do(ctx, "GET", "Key")
	fmt.Println(v.String())
}

其中的default和?cache?分別表示配置分組名稱,我們在程序中可以通過該名稱獲取對應(yīng)配置的?redis?單例對象。不傳遞分組名稱時(shí),默認(rèn)使用?redis.default?配置分組項(xiàng)來獲取對應(yīng)配置的?redis?客戶端單例對象。 執(zhí)行后,輸出結(jié)果為:

Value

配置方法(高級)

由于?GoFrame?是模塊化的框架,除了可以通過耦合且便捷的g模塊來自動(dòng)解析配置文件并獲得單例對象之外,也支持有能力的開發(fā)者模塊化使用?gredis?包。

?gredis?提供了全局的分組配置功能,相關(guān)配置管理方法如下:

func SetConfig(config Config, name ...string)
func SetConfigByMap(m map[string]interface{}, name ...string) error
func GetConfig(name ...string) (config Config, ok bool)
func RemoveConfig(name ...string)
func ClearConfig()

其中?name?參數(shù)為分組名稱,即為通過分組來對配置對象進(jìn)行管理,我們可以為不同的配置對象設(shè)置不同的分組名稱,隨后我們可以通過?Instance?單例方法獲取?redis?客戶端操作對象單例。

func Instance(name ...string) *Redis

使用示例:

package main

import (
	"context"
	"fmt"
	"github.com/gogf/gf/v2/database/gredis"
	"github.com/gogf/gf/v2/util/gconv"
)

var (
	config = gredis.Config{
		Address: "192.168.1.2:6379, 192.168.1.3:6379",
		Db   : 1,
	}
	ctx = context.Background()
)

func main() {
	group := "test"
	gredis.SetConfig(&config, group)

	redis := gredis.Instance(group)
	defer redis.Close(ctx)

	_, err := redis.Do(ctx, "SET", "k", "v")
	if err != nil {
		panic(err)
	}

	r, err := redis.Do(ctx, "GET", "k")
	if err != nil {
		panic(err)
	}
	fmt.Println(gconv.String(r))
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號