Redigo--Go连接Redis

stevefang · · 3568 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

本文主要介绍go Web开发中操作redis。

Redigo是go连接Redis的扩展包,用此包时需先执行:

go get github.com/garyburd/redigo/redis
安装完后,在文件中导入redigo即可。

连接redis的样例如下:

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里存取数据的样例如下:

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里取数据的样例如下:

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数据的样例如下:

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有所了解了吧。

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:stevefang

查看原文:Redigo--Go连接Redis

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3568 次点击  
加入收藏 微博
1 回复  |  直到 2000-01-01 00:00:00
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传