




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 閩教版小學(xué)英語四年級(jí)上冊(cè)教學(xué)工作總結(jié)模版
- 算力新質(zhì)生產(chǎn)力
- 老教師傳幫帶工作總結(jié)模版
- 代運(yùn)營協(xié)議合同標(biāo)準(zhǔn)文本
- 企業(yè)培訓(xùn)的新焦點(diǎn)提高醫(yī)護(hù)團(tuán)隊(duì)溝通能力
- 醫(yī)療大數(shù)據(jù)助力商業(yè)保險(xiǎn)精準(zhǔn)營銷
- 企業(yè)保險(xiǎn)銷售合同范例
- 新質(zhì)生產(chǎn)力包括什么
- 代招加盟合同范例
- 醫(yī)療人才教育與培訓(xùn)的未來趨勢(shì)與挑戰(zhàn)
- 學(xué)生常見病預(yù)防
- 《路基養(yǎng)護(hù)》課件
- 2025年上海二手房買賣合同參考范文(2篇)
- 2025年全國大學(xué)生百科知識(shí)競(jìng)賽題庫及答案(共740道題)
- 2025年全球及中國智能無人叉車行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 《基于EVA的科大訊飛企業(yè)價(jià)值評(píng)估的計(jì)算過程及結(jié)果探析案例報(bào)告》10000字(論文)
- 2025蘇州中考數(shù)學(xué)二輪專題復(fù)習(xí)-圓的綜合應(yīng)用-專項(xiàng)訓(xùn)練【含答案】
- 空氣輸送斜槽選型手冊(cè)
- 服裝IE(浙江紡織服裝職業(yè)技術(shù)學(xué)院)知到智慧樹答案
- 糖尿病足疼痛
- 培訓(xùn)機(jī)構(gòu)教務(wù)管理崗位職責(zé)
評(píng)論
0/150
提交評(píng)論