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
}

  

 

posted @   -零  阅读(2054)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示