Go语言操作redis数据库的方法_第1页
Go语言操作redis数据库的方法_第2页
Go语言操作redis数据库的方法_第3页
Go语言操作redis数据库的方法_第4页
Go语言操作redis数据库的方法_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Go语言操作redis数据库的方法先上命令速查网站,菜鸟yyds

/redis/redis-strings.html

操作redis的包是go-redis/redis

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

github/go-redis/redis

创建项目

创建test文件夹

创建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,//在启动阶段创建指定数量的Idle连接,并长期维持idle状态的连接数不少于指定数量;。

//超时

//DialTimeout:5*time.Second,//连接建立超时时间,默认5秒。

//ReadTimeout:3*time.Second,//读超时,默认3秒,-1表示取消读超时

//WriteTimeout:3*time.Second,//写超时,默认等于读超时

//PoolTimeout:4*time.Second,//当所有连接都处在繁忙状态时,客户端等待可用连接的最大等待时长,默认为读超时+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:匹配[]内的单个字符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)

//以结构体存入注意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,

//结构体序列化反序列化map你也可以用其他包进行转化为map,但是注意转化后的键名大小写问题

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

buf,_:=json.Marshal(user1)

_=json.Unmarshal(buf,m)

//存入

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

//取出绑定到结构体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

//根据索引获取绑定到数组

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管道允许客户端命令服务器通过执行任务而通过执行任务来提高您的性能。

//在管道中,像命令命令一样将编写+使用命令来执行任务,并将其用于执行任务,执行任务不是一个地执行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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论