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