go语言使用redis —— redigo

wolfred7464 · 2015-07-24 03:00:00 · 16602 次点击 · 预计阅读时间 2 分钟 · 2分钟之前 开始浏览

这是一个创建于 2015-07-24 03:00:00 的文章,其中的信息可能已经有所发展或是发生改变。

redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo。选择哪一个好呢?确实很纠结,后来掷硬币决定选择redigo了。

redis、go、redigo的安装就不需要提了,不能强行增加篇幅。

redigo使用起来很人性化,api设计的符合直觉,我对redis了解较少,使用过程中基本没有遇到障碍。

redigo的使用入门可以去查godoc:http://godoc.org/github.com/garyburd/redigo/redis

接下来就是毫无技术含量的贴代码了:

连接redis我一般是这样写的:

1 c, err := redis.Dial("tcp", "127.0.0.1:6379")
2 if err != nil {
3     fmt.Println(err)
4     return
5 }
6 defer c.Close()

执行命令使用Do函数,跟在redis-cli敲命令的感觉差不多的:

 1 v, err := c.Do("SET", "name", "red")
 2 if err != nil {
 3     fmt.Println(err)
 4     return
 5 }
 6 fmt.Println(v)
 7 v, err = redis.String(c.Do("GET", "name"))
 8 if err != nil {
 9     fmt.Println(err)
10     return
11 }
12 fmt.Println(v)

列表也是一样:

1 c.Do("lpush", "redlist", "qqq")
2 c.Do("lpush", "redlist", "www")
3 c.Do("lpush", "redlist", "eee")

读取列表可以for循环遍历,也可以使用redis.Scan函数:

 1 values, _ := redis.Values(c.Do("lrange", "redlist", "0", "100"))
 2
 3 for _, v := range values {
 4     fmt.Println(string(v.([]byte)))
 5 }
 6
 7 // 或者
 8 var v1 string
 9 redis.Scan(values, &v1)
10 fmt.Println(v1)

管道:

1 c.Send("SET", "name", "red")
2 c.Send("GET", "name")
3 c.Flush()
4 c.Receive()
5 c.Receive()

发布订阅:

 1 func subscribe() {
 2     c, err := redis.Dial("tcp", "127.0.0.1:6379")
 3     if err != nil {
 4         fmt.Println(err)
 5         return
 6     }
 7     defer c.Close()
 8
 9     psc := redis.PubSubConn{c}
10     psc.Subscribe("redChatRoom")
11     for {
12         switch v := psc.Receive().(type) {
13         case redis.Message:
14             fmt.Printf("%s: message: %s\n", v.Channel, v.Data)
15         case redis.Subscription:
16             fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
17         case error:
18             fmt.Println(v)
19             return
20         }
21     }
22 }

 1 go subscribe()
 2 go subscribe()
 3 go subscribe()
 4 go subscribe()
 5 go subscribe()
 6
 7 c, err := redis.Dial("tcp", "127.0.0.1:6379")
 8 if err != nil {
 9     fmt.Println(err)
10     return
11 }
12 defer c.Close()
13
14 for {
15     var s string
16     fmt.Scanln(&s)
17     _, err := c.Do("PUBLISH", "redChatRoom", s)
18     if err != nil {
19         fmt.Println("pub err: ", err)
20         return
21     }
22 }

差不多就是这样了,确实也没什么可以解释的。。。

go语言使用redis —— redigo相关推荐

  1. c语言操作redis数据库

    前言 redis(Remote Dictionary Server)是一个使用ANSI C编写的开源.支持网络.基于内存.可选持久性的键值对存储数据库–来自维基百科.由于其读写性能高.数据结构丰富.支 ...

  2. Go实战--golang中使用redis(redigo和go-redis/redis这个已测试)

    自己做测试了没有问题,虚拟机连不上可以把包下载到本地. 版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/wangshubo1989/article/de ...

  3. go语言连接redis(已测试)

    自己做测试了没有问题,虚拟机连不上可以把包下载到本地. 下面使用的是groe库连接redis简单展示如何操作. 先下载gore,命令行输入 go get github.com/keimoon/gore ...

  4. go bson转换成json_你会不会用Go语言实现redis的延时消息队列

    在学习过程中发现redis的zset还可以用来实现轻量级的延时消息队列功能,虽然可靠性还有待提高,但是对于一些对数据可靠性要求不那么高的功能要求完全可以实现.本次主要采用了redis中zset中的za ...

  5. golang使用redis——redigo安装

    点此跳转Redigo工具包Github链接 1. 方法1 控制台输入下面命令,加载完即可使用. go get github.com/gomodule/redigo/redis 2. 方法2 文件中引入 ...

  6. 通过go 语言访问redis

    主要记录的功能点 配置解析 连接redis 单侧 配置模块 定义配置结构体 package config type Configuration struct {// +++++++++++++++日志 ...

  7. Go实战--golang中使用redis(redigo和go-redis/redis)

    生命不止,继续 go go go !!! 以前介绍过golang中如何使用sqlite3: <Go实战–go语言操作sqlite数据库(The way to go)> 今天跟大家分享的是如 ...

  8. windows c语言 redis,windows上使用VS2012 C++语言调用Redis的解决方案

    最近我在VS2012上进行Redis开发遇到一些困扰. 编译Redis的lib库没问题.但是使用这些lib库就不太顺利了. 在网上查来查去也没解决.不过其实Redis的客户端项目RedisCli.vc ...

  9. go使用redis——redigo使用HMSET存储结构体

    话不多说,先放方法,再举例子. rc.Do("HMSET", redis.Args{key}.AddFlat(val)...) rc是什么?是一个连接,创建方式如下: var (r ...

最新文章

  1. 基于OpenCV修复表格缺失的轮廓--如何识别和修复表格识别中的虚线
  2. springboot学习笔记(一)
  3. Undefined function or method ' ' for input arguments of type 'double' ---错误解决办法
  4. QT的QPair类的使用
  5. python 操作mysql数据库
  6. 数据结构之二叉树:二叉查找树的先序、中序、后序、层序遍历,Python代码实现——10(续)
  7. 【Unity】UGUI无法修改字体大小
  8. 在centos7安装nodejs并升级nodejs到最新版本
  9. 微软邀请IT管理人员及开发人员参加用户体验在线调研
  10. LayaAir graphics 矢量绘图之直线、折线、曲线
  11. 在静态页面html中跳转传值
  12. 用python调用ICTCLAS50进行中文分词
  13. 计算机动漫与游戏制作电脑配置,动漫与游戏设计该如何选电脑配置?
  14. JDK7官方下载地址
  15. 《The Selfish Giant》
  16. 2021年7月20日我国暴雨趋势遥感监测与评估
  17. 【django】如何获取字段最大值,最新的记录
  18. Xming(windows下的X Server)的使用,在windows下运行你的终端和所有基于XWindow的程序
  19. 设置Adobe Reader为default的PDF阅读工具
  20. 一些通用 编程变量 单词(常用变量名;持续更新...)

热门文章

  1. MATLAB作二维傅里叶变换所需要注意和知道的东西(im2double、fft2、abs、imshow、二维傅里叶变换的物理意义)
  2. android rebound平移,Android 仿 IOS 拖拽回弹之进阶 ReboundFrameLayout
  3. KVM virtio_net之NAPI机制(十七)
  4. leetcode算法题--统计全为 1 的正方形子矩阵
  5. leetcode算法题--K站中转内最便宜的航班★
  6. python图片转字符画
  7. php 文件迭代对象,通过PHP中的stdClass对象进行迭代
  8. 线程池模式比较-------ICE线程池模型------L/F领导者跟随者模式
  9. ant design pro(一)安装、目录结构、项目加载启动【原始、以及idea开发】
  10. 整理下java六种单例模式