Go操作redis与redigo的方法
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要介绍了Go操作redis与redigo的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go操作redis与redigo的方法文章都会有所收获,下面我们一起
千家信息网最后更新 2025年11月14日Go操作redis与redigo的方法
这篇文章主要介绍了Go操作redis与redigo的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go操作redis与redigo的方法文章都会有所收获,下面我们一起来看看吧。
Go-操作redis
安装
golang操作redis的客户端包有多个比如redigo、go-redis,github上Star最多的莫属redigo。
go get github.com/garyburd/redigo/redisimport "github.com/garyburd/redigo/redis"
连接
Conn接口是与Redis协作的主要接口,可以使用Dial,DialWithTimeout或者NewConn函数来创建连接,当任务完成时,应用程序必须调用Close函数来完成操作。
package mainimport ("github.com/garyburd/redigo/redis""fmt")func main() { conn,err := redis.Dial("tcp","10.1.210.69:6379") if err != nil { fmt.Println("connect redis error :",err) return } defer conn.Close()}使用
package mainimport ("github.com/garyburd/redigo/redis""fmt")func main() { conn,err := redis.Dial("tcp","10.1.210.69:6379") if err != nil { fmt.Println("connect redis error :",err) return } defer conn.Close() _, err = conn.Do("SET", "name", "wd") if err != nil { fmt.Println("redis set error:", err) } name, err := redis.String(conn.Do("GET", "name")) if err != nil { fmt.Println("redis get error:", err) } else { fmt.Printf("Got name: %s \n", name) }}设置key过期时间
_, err = conn.Do("expire", "name", 10) //10秒过期 if err != nil { fmt.Println("set expire error: ", err) return }批量获取mget、批量设置mset
_, err = conn.Do("MSET", "name", "wd","age",22) if err != nil { fmt.Println("redis mset error:", err) } res, err := redis.Strings(conn.Do("MGET", "name","age")) if err != nil { fmt.Println("redis get error:", err) } else { res_type := reflect.TypeOf(res) fmt.Printf("res type : %s \n", res_type) fmt.Printf("MGET name: %s \n", res) fmt.Println(len(res)) }//结果://res type : []string //MGET name: [wd 22] //2列表操作
package mainimport ("github.com/garyburd/redigo/redis""fmt" "reflect")func main() { conn,err := redis.Dial("tcp","10.1.210.69:6379") if err != nil { fmt.Println("connect redis error :",err) return } defer conn.Close() _, err = conn.Do("LPUSH", "list1", "ele1","ele2","ele3") if err != nil { fmt.Println("redis mset error:", err) } res, err := redis.String(conn.Do("LPOP", "list1")) if err != nil { fmt.Println("redis POP error:", err) } else { res_type := reflect.TypeOf(res) fmt.Printf("res type : %s \n", res_type) fmt.Printf("res : %s \n", res) }}//res type : string //res : ele3hash操作
package mainimport ("github.com/garyburd/redigo/redis""fmt" "reflect")func main() { conn,err := redis.Dial("tcp","10.1.210.69:6379") if err != nil { fmt.Println("connect redis error :",err) return } defer conn.Close() _, err = conn.Do("HSET", "student","name", "wd","age",22) if err != nil { fmt.Println("redis mset error:", err) } res, err := redis.Int64(conn.Do("HGET", "student","age")) if err != nil { fmt.Println("redis HGET error:", err) } else { res_type := reflect.TypeOf(res) fmt.Printf("res type : %s \n", res_type) fmt.Printf("res : %d \n", res) }}//res type : int64 //res : 22Pipelining(管道)
管道操作可以理解为并发操作,并通过Send(),Flush(),Receive()三个方法实现。客户端可以使用send()方法一次性向服务器发送一个或多个命令,命令发送完毕时,使用flush()方法将缓冲区的命令输入一次性发送到服务器,客户端再使用Receive()方法依次按照先进先出的顺序读取所有命令操作结果。
Send(commandName string, args ...interface{}) errorFlush() errorReceive() (reply interface{}, err error)Send:发送命令至缓冲区
Flush:清空缓冲区,将命令一次性发送至服务器
Recevie:依次读取服务器响应结果,当读取的命令未响应时,该操作会阻塞。
package mainimport ("github.com/garyburd/redigo/redis""fmt")func main() { conn,err := redis.Dial("tcp","10.1.210.69:6379") if err != nil { fmt.Println("connect redis error :",err) return } defer conn.Close() conn.Send("HSET", "student","name", "wd","age","22") conn.Send("HSET", "student","Score","100") conn.Send("HGET", "student","age") conn.Flush() res1, err := conn.Receive() fmt.Printf("Receive res1:%v \n", res1) res2, err := conn.Receive() fmt.Printf("Receive res2:%v\n",res2) res3, err := conn.Receive() fmt.Printf("Receive res3:%s\n",res3)}//Receive res1:0 //Receive res2:0//Receive res3:22redis发布会订阅模式
package mainimport ( "github.com/garyburd/redigo/redis" "fmt" "time")func Subs() { //订阅者 conn, err := redis.Dial("tcp", "10.1.210.69:6379") if err != nil { fmt.Println("connect redis error :", err) return } defer conn.Close() psc := redis.PubSubConn{conn} psc.Subscribe("channel1") //订阅channel1频道 for { switch v := psc.Receive().(type) { case redis.Message: fmt.Printf("%s: message: %s\n", v.Channel, v.Data) case redis.Subscription: fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count) case error: fmt.Println(v) return } }}func Push(message string) { //发布者 conn, _ := redis.Dial("tcp", "10.1.210.69:6379") _,err1 := conn.Do("PUBLISH", "channel1", message) if err1 != nil { fmt.Println("pub err: ", err1) return }}func main() { go Subs() go Push("this is wd") time.Sleep(time.Second*3)}//channel1: subscribe 1//channel1: message: this is wd事务操作
MULTI, EXEC,DISCARD和WATCH是构成Redis事务的基础,当然我们使用go语言对redis进行事务操作的时候本质也是使用这些命令。
MULTI:开启事务
EXEC:执行事务
DISCARD:取消事务
WATCH:监视事务中的键变化,一旦有改变则取消事务。
示例:
package mainimport ("github.com/garyburd/redigo/redis""fmt")func main() { conn,err := redis.Dial("tcp","10.1.210.69:6379") if err != nil { fmt.Println("connect redis error :",err) return } defer conn.Close() conn.Send("MULTI") conn.Send("INCR", "foo") conn.Send("INCR", "bar") r, err := conn.Do("EXEC") fmt.Println(r)}//[1, 1]万能操作
连接redis
conn,err := redis.Dial( "tcp", "10.0.3.100:6379", redis.DialPassword("EfcHGSzKqg6cfzWq"), redis.DialDatabase(8))if err != nil { fmt.Println("connect redis error :",err) return}defer conn.Close()写入
//写入//_, err = conn.Do("LPUSH", "list1", "ele1","ele2","ele3")_, err = conn.Do("reids写入方法", "key名字", "内容1","内容2","内容3")if err != nil { fmt.Println("redis set error:", err)}读取
//读取redis.Strings:返回多个redis.String:返回一个redis.int:返回统计的数字//获取集合所有成员//name, err := redis.Strings(conn.Do("smembers", "beautiful_user"))// 返回集合成员数//name, err := redis.Int(conn.Do("scard", "beautiful_user"))name, err := redis.方法名(conn.Do("redis读取方法", "key名字"))if err != nil { fmt.Println("redis get error:", err)} else { fmt.Printf("Got name: %s \n", name)}全部代码
package mainimport ( "fmt" "github.com/garyburd/redigo/redis")func main() { conn,err := redis.Dial("tcp","10.0.3.100:6379",redis.DialPassword("EfcHGSzKqg6cfzWq"),redis.DialDatabase(8)) if err != nil { fmt.Println("connect redis error :",err) return } defer conn.Close() //写入 _, err = conn.Do("LPUSH", "list1", "ele1","ele2","ele3") if err != nil { fmt.Println("redis set error:", err) } //读取 name, err := redis.Strings(conn.Do("smembers", "beautiful_user")) if err != nil { fmt.Println("redis get error:", err) } else { fmt.Printf("Got name: %s \n", name) }}关于"Go操作redis与redigo的方法"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Go操作redis与redigo的方法"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
方法
事务
命令
内容
服务器
服务
一次性
多个
客户
客户端
知识
结果
缓冲区
缓冲
订阅
函数
名字
成员
接口
管道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发必备证书
网络安全的守护者图片
请求服务器数据错误
原神国际服选什么服务器比较好
手机简单安卓软件开发
vfp的数据库系统主要特点
政法委网络安全建设
腾讯云的网络技术有哪些
oem 华为 服务器品牌
海康威视杭州软件开发工资
上海软件开发园区
数据库安全性的保护功能
长虹网络技术中心的章
h3c服务器如何查看硬盘
服务器一直没网
数据库怎么看是不是无损分解
元宇宙的背后是服务器
我会保护网络安全的技术
怎么去收集电商销售数据库
专业的服务器安全测试工具
a6企业管理无法连接服务器
水土保持网络安全
建立新闻共享数据库的通知
常州营销软件开发系统
宁晋天纯网络技术服务
数据库显示服务器异常
昆明创新软件开发市场价
musql数据库分区
网络安全宣传周的新闻稿
我要观看网络安全知识宣传手抄报