分享
  1. 首页
  2. 文章

golang使用redis(一)

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

使用redigo库操作redis

安装
go get github.com/gomodule/redigo/redis
连接
 c, err := redis.Dial("tcp",
 "172.17.84.205:6379",
 redis.DialKeepAlive(1*time.Second),
 redis.DialPassword("123456"),
 redis.DialConnectTimeout(5*time.Second),
 redis.DialReadTimeout(1*time.Second),
 redis.DialWriteTimeout(1*time.Second))
 if err != nil {
 fmt.Println("error:", err)
 return
 }
 defer c.Close()
set/get key-value
_, err = c.Do("set", "testkey1", "Hello from redis")
r, err := redis.String(c.Do("get", "testkey1"))

如果要设置过期时间

_, err = c.Do("set", "testkey1", "Hello from redis", "EX", "5")

其中"EX", "5"是设置的过期时间5秒

mset/mget 设置获取多个键值
_, err = c.Do("mset", "name", "Michael", "sex", "M", "age", 23, "postcode", 2343253)
stringValues, err := redis.Strings(c.Do("mget", "name", "sex"))
intValues, err := redis.Ints(c.Do("mget", "age", "postcode"))
for _, v := range stringValues {
 fmt.Println(v)
}
for _, i := range intValues {
 fmt.Println(i)
}
HSET key field value

将哈希表 key 中的域 field 的值设为 value

_, err = c.Do("hset", "books", "name", "golang", "author", "Moon", "pages", "4000")
if err != nil {
 fmt.Println("err:", err)
}
v, err := redis.String(c.Do("hget", "books", "name"))
v, err := redis.String(c.Do("hget", "books", "author"))
HMSET/HGETALL,HMGET

在使用前先说明几个函数

  • type Args []interface{}

    从结构化的值构造命令参数

  • func (args Args) Add(value ...interface{}) Args

    添加值到Args

  • func (args Args) AddFlat(v interface{}) Args

    添加Map, Slice, struct等的值到Args

  • func ScanStruct(src []interface{}, dest interface{}) error

    将name和value从src转变成dest

示例代码如下

package main
import (
 "fmt"
 "os"
 "time"
 redis "github.com/gomodule/redigo/redis"
)
type Book struct {
 BookName string
 Author string
 PageCount string
 Press string
}
func main() {
 c, err := redis.Dial("tcp",
 "172.17.84.205:6379",
 redis.DialKeepAlive(1*time.Second),
 redis.DialPassword("123456"),
 redis.DialConnectTimeout(5*time.Second),
 redis.DialReadTimeout(1*time.Second),
 redis.DialWriteTimeout(1*time.Second))
 errCheck(err)
 defer c.Close()
 //Struct
 top1 := Book{
 BookName: "Crazy golang",
 Author: "Moon",
 PageCount: "600",
 Press: "GoodBook",
 }
 if _, err = c.Do("HMSET", redis.Args{}.Add("Top1").AddFlat(&top1)...); err != nil {
 fmt.Println(err)
 return
 }
 //Map
 top2 := map[string]string{
 "BookName": "Mast C++",
 "Author": "Diablo",
 "PageCount": "2000",
 "Press": "BLZ",
 }
 if _, err = c.Do("HMSET", redis.Args{}.Add("Top2").AddFlat(top2)...); err != nil {
 fmt.Println(err)
 return
 }
 top3 := []string{"BookName", "Deep learning",
 "Author", "Barl",
 "PageCount", "2600",
 "Publish House", "BLZ"}
 _, err = c.Do("HMSET", redis.Args{}.Add("Top3").AddFlat(top3)...)
 errCheck(err)
 topx := Book{}
 for _, item := range []string{"Top1", "Top2", "Top3"} {
 value, err := redis.Values(c.Do("HGETALL", item))
 errCheck(err)
 err = redis.ScanStruct(value, &topx)
 errCheck(err)
 fmt.Printf("%s[%+v]\n", item, topx)
 }
 stringsValue, err := redis.Strings(c.Do("HMGET", "Top1", "BookName", "Author"))
 errCheck(err)
 fmt.Printf("hmget:%+v\n", stringsValue)
}
func errCheck(err error) {
 if err != nil {
 fmt.Println(err)
 os.Exit(-1)
 }
}

详细代码:
https://github.com/BinWang-sh...


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

本文来自:Segmentfault

感谢作者:麦穗儿

查看原文:golang使用redis(一)

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏