Go語言操作redis數(shù)據(jù)庫的方法_第1頁
Go語言操作redis數(shù)據(jù)庫的方法_第2頁
Go語言操作redis數(shù)據(jù)庫的方法_第3頁
Go語言操作redis數(shù)據(jù)庫的方法_第4頁
Go語言操作redis數(shù)據(jù)庫的方法_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Go語言操作redis數(shù)據(jù)庫的方法先上命令速查網(wǎng)站,菜鳥yyds

/redis/redis-strings.html

操作redis的包是go-redis/redis

官方文檔https://redis.uptrace.dev/guide/

github/go-redis/redis

創(chuàng)建項(xiàng)目

創(chuàng)建test文件夾

創(chuàng)建Redis_test.go文件

直接上代碼,代碼解釋全寫在注釋里

packagetest

import(

"context"

"encoding/json"

"fmt"

"/go-redis/redis/v8"

"testing"

"time"

varctx=context.Background()

varrdb*redis.Client

funcinit(){

rdb=redis.NewClient(redis.Options{

//端口需要改,這里是docker的端口

Addr:"localhost:49153",

Password:"redispw",//nopasswordset

DB:0,//usedefaultDB

PoolSize:15,

MinIdleConns:10,//在啟動(dòng)階段創(chuàng)建指定數(shù)量的Idle連接,并長期維持idle狀態(tài)的連接數(shù)不少于指定數(shù)量;。

//超時(shí)

//DialTimeout:5*time.Second,//連接建立超時(shí)時(shí)間,默認(rèn)5秒。

//ReadTimeout:3*time.Second,//讀超時(shí),默認(rèn)3秒,-1表示取消讀超時(shí)

//WriteTimeout:3*time.Second,//寫超時(shí),默認(rèn)等于讀超時(shí)

//PoolTimeout:4*time.Second,//當(dāng)所有連接都處在繁忙狀態(tài)時(shí),客戶端等待可用連接的最大等待時(shí)長,默認(rèn)為讀超時(shí)+1秒。

//基礎(chǔ)使用

funcTest_Base(t*testing.T){

//添加key

//0表示沒有過期時(shí)間

rdb.Set(ctx,"testKey","xxx",0)

//獲取值

val,err:=rdb.Get(ctx,"testKey").Result()

iferr!=nil{

fmt.Println("錯(cuò)誤",err)

fmt.Println("值:",val)

//設(shè)置key過期時(shí)間成功true

rdb.Expire(ctx,"testKey",time.Second*60)

//存在返回1

rdb.Exists(ctx,"testKey")

//key不存在時(shí)設(shè)置值

rdb.SetNX(ctx,"unkey","val",0)

rdb.Set(ctx,"testKey2","xxx",0)

//刪除key可刪除多個(gè)

rdb.Del(ctx,"testKey2","testKey")

//字符串

funcTest_String(t*testing.T){

//設(shè)置值

rdb.Set(ctx,"strKey",100,0)

rdb.Set(ctx,"straey",100,0)

//key自增1

rdb.Incr(ctx,"strKey")

//增加66

rdb.IncrBy(ctx,"straey",66)

//-1

rdb.Decr(ctx,"straey")

//-5

rdb.DecrBy(ctx,"straey",5)

//過期時(shí)間

rdb.TTL(ctx,"strKey")

//str*ey:*為任意字符串

//str[kKac]ey:匹配[]內(nèi)的單個(gè)字符strkey,strKey,straey,strcey

//strey:任意單個(gè)字符

//掃描key

iter:=rdb.Scan(ctx,0,"strey",0).Iterator()

foriter.Next(ctx){

fmt.Println("keys",iter.Val(),":val",rdb.Get(ctx,iter.Val()).Val())

iferr:=iter.Err();err!=nil{

panic(err)

//哈希

funcTest_Hash(t*testing.T){

rdb.HMSet(ctx,"hkey1","name","shushan","age",99,"b",true)

//以結(jié)構(gòu)體存入注意redistag

typeUserstruct{

Namestring`json:"name,omitempty"redis:"name"`

Ageint`json:"age,omitempty"redis:"age"`

Bbool`json:"b,omitempty"redis:"b"`

//...

user1:=User{

Name:"shushan2",

Age:55,

B:true,

//結(jié)構(gòu)體序列化反序列化map你也可以用其他包進(jìn)行轉(zhuǎn)化為map,但是注意轉(zhuǎn)化后的鍵名大小寫問題

m:=make(map[string]interface{})

buf,_:=json.Marshal(user1)

_=json.Unmarshal(buf,m)

//存入

rdb.HSet(ctx,"user4",m)

//取出綁定到結(jié)構(gòu)體map也行

varuserUser

rdb.HGetAll(ctx,"user4").Scan(user)

fmt.Printf("%#v\n",user)

//test.User{Name:"shushan2",Age:55,B:true}

//獲取key下的所有值*匹配方式與string的所有原理一樣

iter:=rdb.HScan(ctx,"user4",0,"*",0).Iterator()

foriter.Next(ctx){

fmt.Println("keys",iter.Val())

iferr:=iter.Err();err!=nil{

panic(err)

//列表

funcTest_List(t*testing.T){

//添加

rdb.LPush(ctx,"listKey1",111,222,333,444)

rdb.RPush(ctx,"listKey1",5555)

//不存在不添加

rdb.LPushX(ctx,"unlistKey",111)

varintf[]int

//根據(jù)索引獲取綁定到數(shù)組

rdb.LRange(ctx,"listKey1",0,10).ScanSlice(intf)

fmt.Println(intf)

variint

//彈出

rdb.LPop(ctx,"listKey1").Scan(i)

fmt.Println(i)

//....

//集合

funcTest_Set(t*testing.T){

//添加

rdb.SAdd(ctx,"setKey1","m1","onlyk1")

rdb.SAdd(ctx,"setKey2","m2","xca")

sl,_:=rdb.SDiff(ctx,"setKey1","setKey2").Result()

fmt.Println(sl)

//onlyk1,m1

//隨機(jī)移除

varvalstring

rdb.SPop(ctx,"setKey1").Scan(val)

fmt.Println(val)

//.....

//管道

funcTest_Pipe(t*testing.T){

//官方描述

//Redis管道允許客戶端命令服務(wù)器通過執(zhí)行任務(wù)而通過執(zhí)行任務(wù)來提高您的性能。

//在管道中,像命令命令一樣將編寫+使用命令來執(zhí)行任務(wù),并將其用于執(zhí)行任務(wù),執(zhí)行任務(wù)不是一個(gè)地執(zhí)行100個(gè)命令。

//理解為命令就像石頭,一次運(yùn)送一個(gè)石頭

//使用管道等于用車裝石頭Exec時(shí)就運(yùn)送過去

pipe:=rdb.Pipeline()

incr:=pipe.Set(ctx,"pip_test","bt",0)

pipe.Expire(ctx,"pip_test",time.Hour)

//提交

cmds,err:=pipe.Exec(ctx)

i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論