Go操作redis与redigo的方法
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章主要介绍了Go操作redis与redigo的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go操作redis与redigo的方法文章都会有所收获,下面我们一起
千家信息网最后更新 2025年01月27日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 : ele3
hash操作
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 : 22
Pipelining(管道)
管道操作可以理解为并发操作,并通过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:22
redis发布会订阅模式
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安全错误
数据库的锁怎样保障安全
苏州云雀网络技术
魔兽怀旧服副本服务器人口
一言服务器异常什么时候好
南京云柜网络技术电话
软件开发服务费个人所得税
光纤网络技术基础
quartus软件开发流程
手机服务器异常怎么办
计算机网络技术出来工资如何
dota2 世界服务器
网络安全宣传周获奖作品
数据库余度有多高
删除全部数据库数据sql命令
国际网络安全事件讲解
订单下单软件有数据库吗
终端服务器许可证服务器
云南服务器
网络技术教学理念有哪些
服务器安装多个数据库
sql数据库报错的日志在哪儿看
delphi数据库操作
数据库备份操作
网络安全短信
软件开发人员年龄大了还的
苹果app如何修改软件开发
数据库分区怎么分
需要紧急连接网络访问公司服务器
成都阿里云服务器租赁
计算机网络技术毕业论文背景
郧西互联网软件开发服务保障