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ù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第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)建項目

創(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,//在啟動階段創(chuàng)建指定數(shù)量的Idle連接,并長期維持idle狀態(tài)的連接數(shù)不少于指定數(shù)量;。

//超時

//DialTimeout:5*time.Second,//連接建立超時時間,默認5秒。

//ReadTimeout:3*time.Second,//讀超時,默認3秒,-1表示取消讀超時

//WriteTimeout:3*time.Second,//寫超時,默認等于讀超時

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

//基礎使用

funcTest_Base(t*testing.T){

//添加key

//0表示沒有過期時間

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

//獲取值

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

iferr!=nil{

fmt.Println("錯誤",err)

fmt.Println("值:",val)

//設置key過期時間成功true

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

//存在返回1

rdb.Exists(ctx,"testKey")

//key不存在時設置值

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

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

//刪除key可刪除多個

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

//字符串

funcTest_String(t*testing.T){

//設置值

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)

//過期時間

rdb.TTL(ctx,"strKey")

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

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

//strey:任意單個字符

//掃描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é)構體存入注意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é)構體序列化反序列化map你也可以用其他包進行轉(zhuǎn)化為map,但是注意轉(zhuǎn)化后的鍵名大小寫問題

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

buf,_:=json.Marshal(user1)

_=json.Unmarshal(buf,m)

//存入

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

//取出綁定到結(jié)構體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

//隨機移除

varvalstring

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

fmt.Println(val)

//.....

//管道

funcTest_Pipe(t*testing.T){

//官方描述

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

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

//理解為命令就像石頭,一次運送一個石頭

//使用管道等于用車裝石頭Exec時就運送過去

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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論