golang 操作 redis(github.com/go-redis/redis 包使用)

go-redis/redis 使用

go-redis 是go用來鏈接redis數據庫的包。截止當前時間github上star 8.7k

環境:

go go-redis
go1.13.5 v6.15.7+incompatible

安裝:

使用go mod 進行安裝
在go.mod 中加入:

module github.com/luslin/tools
go 1.13
require (
	github.com/go-redis/redis v6.15.7+incompatible
)

然後執行go mod download 就可以可。 我的GOPROXY設置爲https://goproxy.cn,direct

使用:

示例:

a、創建連接池

func RedisClientPool(addr string, password string, db int) *redis.Client{
	redis_opt := redis.Options{
		Addr: addr,
		Password: password,
		DB: db,
	}
	// 創建連接池
	redisdb := redis.NewClient(&redis_opt)
	// 判斷是否能夠鏈接到數據庫
	pong, err := redisdb.Ping().Result()
	if err != nil {
		fmt.Println(pong, err)
	}
	return redisdb
}

redis.Options 默認池大小爲10×cpu核數

b、key命令

命令 描述
DEL key 用於在 key 存在時刪除 key
EXISTS key 檢查給定 key 是否存在
EXPIRE key seconds 爲給定 key 設置過期時間,以秒計
KEYS pattern 查找所有符合給定模式( pattern)的 key
TTL key 以秒爲單位,返回給定 key 的剩餘生存時間
TYPE key 返回 key 所儲存的值的類型
func TestKey(t *testing.T)  {
	writePool := RedisClientPool("***.**.***.**:6379","passwd@2020", 5)
	// 在 key 存在時刪除 key。
	intcmd :=  writePool.Del("set")
	fmt.Println(intcmd.Result()) // 0 <nil>  當鍵存在時 返回1 <nil>
	// 檢查給定 key 是否存在。
	intcmd = writePool.Exists("set1")
	fmt.Println(intcmd.Result())  // 1 <nil>
	// 爲給定 key 設置過期時間,以秒計。
	boolcmd := writePool.Expire("set1", time.Hour)
	fmt.Println(boolcmd.Result()) // true <nil>
	// 查找所有符合給定模式( pattern)的 key
	stringSliceCmd := writePool.Keys("s*")
	fmt.Println(stringSliceCmd.Result()) // [set2 set1 set3] <nil>
	// 以秒爲單位,返回給定 key 的剩餘生存時間(TTL, time to live)。
	durationCmd := writePool.TTL("set1")
	fmt.Println(durationCmd.Result()) // 1h0m0s <nil>
	// 返回 key 所儲存的值的類型。
	statusCmd := writePool.Type("set1")
	fmt.Println(statusCmd.Result()) // string <nil>
}

c、字符串命令

命令 描述
SET key value time.Duration 設置指定 key 的值及過期時間, 0爲永久
GET key 獲取指定 key 的值
GETRANGE key start end 返回 key 中字符串值的子字符
GETSET key value 給定 key 的值設爲 value ,並返回 key 的舊值(old value)
MGET key1 [key2…] 獲取所有(一個或多個)給定 key 的值
SETNX key value 只有在 key 不存在時設置 key 的值
STRLEN key 返回 key 所儲存的字符串值的長度
MSET key value [key value …] 同時設置一個或多個 key-value 對
MSETNX key value [key value …] 同時設置一個或多個 key-value 對,當且僅當所有給定 key 都不存在。
INCRBY key increment 將 key 所儲存的值加上給定的增量值(increment)
INCRBYFLOAT key increment 將 key 所儲存的值加上給定的浮點增量值(increment)
DECR key 將 key 中儲存的數字值減一
DECRBY key decrement key 所儲存的值減去給定的減量值(decrement)
APPEND key value 如果 key 已經存在並且是一個字符串, APPEND 命令將指定的 value 追加到該 key 原來值(value)的末尾
func TestString(t *testing.T) {
	statusCmd := writePool.Set("string1","ss",0)
	fmt.Println(statusCmd.Result()) // OK <nil>
	stringCmd := writePool.Get("string1")
	fmt.Println(stringCmd.Result()) // ss <nil>
	stringCmd = writePool.GetRange("string1",0,0)
	fmt.Println(stringCmd.Result()) // s <nil>
	stringCmd = writePool.GetSet("string1","ss2")
	fmt.Println(stringCmd.Result()) // ss <nil>
	slicecmd := writePool.MGet("string1","set1","set2","setn")
	fmt.Println(slicecmd.Result())  // [ss2 ss ss <nil>] <nil>
	boolcmd := writePool.SetNX("string1","ss3",0)
	fmt.Println(boolcmd.Result())  // false <nil>
	intcmd := writePool.StrLen("string1")
	fmt.Println(intcmd.Result())  // 3 <nil>
	statusCmd = writePool.MSet("string2","ss2","string3","ss3","string4","ss4")
	fmt.Println(statusCmd.Result()) // OK <nil>
	boolcmd = writePool.MSetNX("string2","ss2","string3","ss3","string4", "ss4")
	fmt.Println(boolcmd.Result()) // false <nil>
	writePool.Set("int1",0,0)
	intcmd = writePool.Incr("int1")
	fmt.Println(intcmd.Result())  // 1 <nil>
	intcmd = writePool.IncrBy("int1",10)
	fmt.Println(intcmd.Result())  // 11 <nil
	floatcmd := writePool.IncrByFloat("int1",12.2)
	fmt.Println(floatcmd.Result())  // 23.2 <nil>
	intcmd = writePool.Append("string2","adsfasdf")
	fmt.Println(intcmd.Result())  // 11 <nil>
}

d、其他命令

詳細數據結構及方法,見菜鳥教程:https://www.runoob.com/redis/redis-hashes.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章