golang操作Redis(redigo基础篇)

现在的redis大红大紫,而且很多应用场景都适合使用Reids来做缓存或者直接做存储,典型的如mysql前端缓存、手游里面的排行榜等。那么我们怎样用golang来操作redis呢?

熟悉redis的同学,肯定第一反应就是按照redis的协议,实现一个客户端与redis服务进行通信即可。不熟悉redis的同学,可能会说用cgo封装下官方的c客户端,妥妥的。是的,这两种方法都可以。既然redis这么火,那么这些工作有没有人做呢?答案是肯定的。在redis的官方网站的客户端列表里就有众多golang的客户端。这个时候,可能你又要犯难了,我该用哪一个呢?

熟悉reids的同学都知道,官网加星星的客户端都是好客户端,就像棒子天上的星星一样神奇。可是坑爹的时,golang不同于python有两个都是加星星的,这孰真孰假呢?

具体我也了解,不过大概浏览了下源码,二者都是用golang实现了redis得协议,不过radix的源码感觉不是那么清晰,相对来说redigo的源码可以和命令对上,比较清晰,且redigo说其支持所有的redis命令。然后又网上搜了几篇文章1/文章2,最终还是选择了redigo来尝试。

1、建立连接

conn , err := redis.DialTimeout("tcp", ":6379", 0, 1*time.Second, 1*time.Second)

参数的意义分别是网络类型“tcp”、地址和端口、连接超时、读超时和写超时时间。有了连接后。我们就可以进行其他操作了。先看下db的大小

size ,err := conn.Do("DBSIZE")
fmt.Printf("size is %d \n",size)

//输出:
size is 8

在使用完后,通过调用 conn.Close() 关闭连接。

2、基本命令执行

对于最基本的命令使用,我们统一调用:

Do(commandName string, args ...interface{}) (reply interface{}, err error)

这个接口,整个过程就和我们使用redis命令一样。

我们知道在redis的协议中,都是按照字符流的,那么Do函数是如何进行序列化的呢?下面是其转换规则:

Go Type                 Conversion

[]byte                  Sent as is
string                  Sent as is
int, int64              strconv.FormatInt(v)
float64                 strconv.FormatFloat(v, ‘g‘, -1, 64)
bool                    true -> "1", false -> "0"
nil                     ""
all other types         fmt.Print(v)

其实就是byte数组和字符串不变,整形和浮点数转换成对应的字符串,bool用1或者0表示,nil为空字符串。

下面再看下执行后得到的结果返回值的类型:

Redis type              Go type

error                   redis.Error
integer                 int64
simple string           string
bulk string             []byte or nil if value not present.
array                   []interface{} or nil if value not present.

如上表,redis中得类型会对应的转换成左边go中得类型,无需多解释。我们来看几个例子:

conn , err := redis.DialTimeout("tcp", ":6379", 0, 1*time.Second, 1*time.Second)
if err != nil {
    panic(err)
}
size ,err:= conn.Do("DBSIZE")
fmt.Printf("size is %d \n",size)

_,err = conn.Do("SET","user:user0",123)
_,err = conn.Do("SET","user:user1",456)
_,err = conn.Do("APPEND","user:user0",87)

user0,err := redis.Int(conn.Do("GET","user:user0"))
user1,err := redis.Int(conn.Do("GET","user:user1"))

fmt.Printf("user0 is %d , user1 is %d \n",user0,user1)

conn.Close()

从redis传回来得普通对象(整形、字符串、浮点数)。redis提供了类型转换函数供转换:

func Bool(reply interface{}, err error) (bool, error)
func Bytes(reply interface{}, err error) ([]byte, error)
func Float64(reply interface{}, err error) (float64, error)
func Int(reply interface{}, err error) (int, error)
func Int64(reply interface{}, err error) (int64, error)
func String(reply interface{}, err error) (string, error)
func Strings(reply interface{}, err error) ([]string, error)
func Uint64(reply interface{}, err error) (uint64, error)

这里只是举了set和get命令。其他的例子可以参见redigo的conn_test.go

golang操作Redis(redigo基础篇),布布扣,bubuko.com

时间: 2024-10-14 02:07:39

golang操作Redis(redigo基础篇)的相关文章

golang 操作 Redis & Mysql & RabbitMQ

golang 操作 Redis & Mysql & RabbitMQ Reids 安装导入 go get github.com/garyburd/redigo/redis import "github.com/garyburd/redigo/redis" 链接 github:https://github.com/antirez/redis Doc:http://godoc.org/github.com/garyburd/redigo/redis Redis全套使用:ht

golang操作redis

go get github.com/garyburd/redigo/redis import "github.com/garyburd/redigo/redis" 连接 Conn接口是与Redis协作的主要接口,可以使用Dial,DialWithTimeout或者NewConn函数来创建连接,当任务完成时,应用程序必须调用Close函数来完成操作. package main import ( "github.com/garyburd/redigo/redis" &q

Go语言学习笔记(八)golang 操作 Redis & Mysql & RabbitMQ

加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 Reids 安装导入 go get github.com/garyburd/redigo/redis import "github.com/garyburd/redigo/redis" 链接 github:https://github.com/antirez/redis Doc:http://godoc.org/github.com/garyburd/redigo/redis Redis全套使用:ht

关于Redis数据库 ---- 基础篇

Redis数据库也被称为数据结构数据库,因为存储基于key-value模式. 其中,value值可以为字符串(string),哈希(map),列表(list),集合(set)和有序集合(zset). 在redis的安装目录下,有一个文件redis.conf,在该文件下存储了redis的基本配置信息. 通过修改这个文件,再次通过以下命令启动时: redis-server redis.conf-path 会应用配置信息 使用命令: redis-cli 会打开redis客户端 在该客户端中,通过如下命

老王python基础篇--python, 视频, 教程, 视频教程, 基础

老王python基础篇 基础篇11-python基本数据结构-元组和集合.rar 基础篇19-python语句与数据结构应用.rar 基础篇21-文本操作应用.rar 基础篇3-虚拟机安装xubuntu开发环境.rar 基础篇17-python语句1.2.rar 基础篇10-python基本数据结构-列表应用.rar 基础篇9-python基本数据结构-列表.rar 基础篇5-python基本数据类型讲解1.1.rar 基础篇18-基础篇综合习题.rar 基础篇8-python基本数据类型习题解

Git操作(基础篇)

Git操作(基础篇) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/g?t/.Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以"克隆"这个原始版

puppet基础篇(练习篇)

puppet基础篇(练习篇) 本文分为两部分:一.安装配置及命令用法:二.puppet资源基础练习 1.安装配置及命令用法 #在epel仓库安装 yum install ./facter-2.4.6-1.el7.x86_64.rpm  ./puppet-3.8.7-1.el7.noarch.rpm  [[email protected] puppet]# puppet helpUsage: puppet <subcommand> [options] <action> [option

python3操作redis

redis也被称为缓存 1.redis是一个key-value存储系统,没有ForeignKey和ManyToMany的字段. 2.在redis中创建的数据彼此之间是没有关系的,所以也被称为是非关系型数据库 3.它支持存储包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型)等数据类型. 4.redis支持的数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.

【思库教育】2017PHP项目实战基础+进阶+项目之基础篇

下载链接: [思库教育]2017PHP项目实战基础+进阶+项目之基础篇 小白变大牛,您的专属资源库! 小白变大牛,您的专属资源库! 内容非常充实,可以看目录,设计的面多,项目多,技能多,如果掌握好,找一份PHP的工作,易如反掌!学完后可以到PHP小白变大牛精华区查找更加符合你的资源或者项目! [思库教育]2017PHP项目实战基础+进阶+项目之基础篇[思库教育]2017PHP项目实战基础+进阶+项目之进阶篇[思库教育]2017PHP项目实战基础+进阶+项目之项目篇小白变大牛!Python小白,J