Redigo--Go连接Redis
本文来自:CSDN博客
感谢作者:wkyb608
查看原文:Redigo--Go连接Redis
本文主要介绍go Web开发中操作redis。
Redigo是go连接Redis的扩展包,用此包时需先执行:
1 | go get github.com/garyburd/redigo/redis |
安装完后,在文件中导入redigo即可。
连接redis
连接redis的样例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import ( "fmt" // 导入redigo扩展包 "github.com/garyburd/redigo/redis" ) // 从配置文件获取redis配置并连接 host := beego.AppConfig.String( "redis_host" ) db, _ := beego.AppConfig.Int( "redis_db" ) // tcp连接redis rs, err := redis.Dial( "tcp" , host) // 操作完后自动关闭 defer rs.Close() // 若连接出错,则打印错误信息,返回 if err != nil { fmt.Println(err) fmt.Println( "redis connect error" ) return } // 选择db rs.Do( "SELECT" , db) |
写入数据
往redis里存取数据的样例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | key := "aaa" value := "bbb" // 操作redis时调用Do方法,第一个参数传入操作名称(字符串),然后根据不同操作传入key、value、数字等 // 返回2个参数,第一个为操作标识,成功则为1,失败则为0;第二个为错误信息 n, err := rs.Do( "SETNX" , key, value) // 若操作失败则返回 if err != nil { fmt.Println(err) return } // 返回的n的类型是int64的,所以得将1或0转换成为int64类型的再比较 if n == int64(1) { // 设置过期时间为24小时 n, _ := rs.Do( "EXPIRE" , key, 24*3600) if n == int64(1) { fmt.Println( "success" ) } } else if n == int64(0) { fmt.Println( "the key has already existed" ) } |
读数据
从redis里取数据的样例如下:
1 2 3 4 5 6 7 8 | key := "aaa" // 调用Do后,还得调用相应的方法才能取得数据 // 由于之前存的value是string类型,所以用redis.String将数据转换成string类型 value, err := redis.String(rs.Do( "GET" , key)) if err != nil { fmt.Println( "fail" ) } fmt.Println(value) |
此时若不出错便会输出我们前面存的value:“bbb”
数据转换
若value的类型为int,则用redis.Int转换
若value的类型为string,则用redis.String转换
若value的类型为json,则用redis.Byte转换
redis里存取json数据的样例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import "encoding/json" import "fmt" // 存json数据 key := "aaa" imap := map [string]string{ "key1" : "111" , "key2" : "222" } // 将map转换成json数据 value, _ := json.Marshal(imap) // 存入redis n, err := rs.Do( "SETNX" , key, value) if err != nil { fmt.Println(err) } if n == int64(1) { fmt.Println( "success" ) } // 取json数据 // 先声明imap用来装数据 var imap map [string]string key := "aaa" // json数据在go中是[]byte类型,所以此处用redis.Bytes转换 value, err := redis.Bytes(rs.Do( "GET" , key)) if err != nil { fmt.Println(err) } // 将json解析成map类型 errShal := json.Unmarshal(value, &imap) if errShal != nil { fmt.Println(err) } fmt.Println(imap[ "key1" ]) fmt.Println(imap[ "key2" ]) |
此时若不出错便会输出我们前面存的“111” “222”
看了上面的例子,应该对操作redis有所了解了吧。
Redis设置密码,如何登陆
进入Dial函数,设置dialOptions字段,password为密码。
1 2 3 4 5 6 7 8 | func Dial(network, address string, options ...DialOption) (Conn, error) { do := dialOptions{ dialer: &net.Dialer{ KeepAlive: time.Minute * 5, }, password: "密码" , } } |
dialOptions结构体全部字段:
1 2 3 4 5 6 7 8 9 10 11 | type dialOptions struct { readTimeout time.Duration writeTimeout time.Duration dialer *net.Dialer dial func (network, addr string) (net.Conn, error) db int password string useTLS bool skipVerify bool tlsConfig *tls.Config } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?