golang 调用redis
2016-09-14 16:46
561 查看
用的是github.com/garyburd/redigo/redis这个库
Connection
可以用三种方法创建连接:Dial 、 DialWithTimeout 和 NewConn
比如:
c, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil{
fmt.Println(err)
return
}
fmt.Println("Success to Connect redis!")
defer c.Close()
打开了连接要在程序完成后调用Close关闭掉
Connection interface拥有Do方法执行redis命令:
比如:
Pipelining
可以利用以下方法进行Pipelining:
比如:
c.Send("set","wwk1",12)
c.Send("set","wwk2","oop")
c.Send("set","wwk3","fuck")
c.Send("get","xu")
c.Flush()
c.Receive()
//reply from set
c.Receive() //reply from set
c.Receive() //reply from set
v,err := redis.String(c.Receive()) //reply from get
println(v)
Do方法结合了Send、Flush和Receive,如果Do发送的命令为空,则会冲洗connection的output缓冲区,并接收reply
Publish and Subscribe
利用Send 、Flush和Receive实现的 Pub/Sub subscribers
还可以利用PubSubConn,它封装了一些方便的方法去实现subscribers
Publish的例子:
go subscribe()
for{
var s string
fmt.Scanln(&s)
_,err := c.Do("publish","redischat",s)
if err != nil{
fmt.Println("pub err")
return
}
}
获取一个字符串:
d, err := redis.String(c.Do("get","xu"))
if err != nil{
fmt.Println(err)
return
}
获取一个循环:
c.Do("lpush","redlist","qqq")
c.Do("lpush","redlist","fff")
c.Do("rpush","redlist","kkk")
values, _ := redis.Values(c.Do("lrange","redlist","0","100"))
for _,v := range values{
fmt.Println(string(v.([]byte)))
}
Connection
可以用三种方法创建连接:Dial 、 DialWithTimeout 和 NewConn
比如:
c, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil{
fmt.Println(err)
return
}
fmt.Println("Success to Connect redis!")
defer c.Close()
打开了连接要在程序完成后调用Close关闭掉
Connection interface拥有Do方法执行redis命令:
Do(commandName string, args ...interface{}) (reply interface{}, err error)
比如:
n, err := conn.Do("APPEND", "key", "value")
Pipelining
可以利用以下方法进行Pipelining:
Send(commandName string, args ...interface{}) error 发送命令 Flush() error 冲洗Connection的output缓冲区到server Receive() (reply interface{}, err error) 从服务器读一个reply
比如:
c.Send("set","wwk1",12)
c.Send("set","wwk2","oop")
c.Send("set","wwk3","fuck")
c.Send("get","xu")
c.Flush()
c.Receive()
//reply from set
c.Receive() //reply from set
c.Receive() //reply from set
v,err := redis.String(c.Receive()) //reply from get
println(v)
Do方法结合了Send、Flush和Receive,如果Do发送的命令为空,则会冲洗connection的output缓冲区,并接收reply
Publish and Subscribe
利用Send 、Flush和Receive实现的 Pub/Sub subscribers
c.Send("SUBSCRIBE", "example") c.Flush() for { reply, err := c.Receive() if err != nil { return err } // process pushed message }
还可以利用PubSubConn,它封装了一些方便的方法去实现subscribers
psc := redis.PubSubConn{c} psc.Subscribe("redischat") for { switch v := psc.Receive().(type) { case redis.Message: //有消息Publish到指定Channel时 fmt.Printf("%s: message: %s\n", v.Channel, v.Data) case redis.Subscription: //Subscribe一个Channel时 fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count) case error: return v } }
Publish的例子:
go subscribe()
for{
var s string
fmt.Scanln(&s)
_,err := c.Do("publish","redischat",s)
if err != nil{
fmt.Println("pub err")
return
}
}
获取一个字符串:
d, err := redis.String(c.Do("get","xu"))
if err != nil{
fmt.Println(err)
return
}
获取一个循环:
c.Do("lpush","redlist","qqq")
c.Do("lpush","redlist","fff")
c.Do("rpush","redlist","kkk")
values, _ := redis.Values(c.Do("lrange","redlist","0","100"))
for _,v := range values{
fmt.Println(string(v.([]byte)))
}
相关文章推荐
- Redis java调用API
- golang操作redis连接池
- php 远程调用redis
- java调用redis的方式
- golang rpc的两种调用方法
- Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
- nginx lua调用redis和mongo
- golang windows下 调用外部程序隐藏cmd窗口
- Golang访问Redis初体验
- Redis学习笔记3-本机java程序调用虚拟机redis
- Golang中方法的接受类型与调用类型
- redis 客户端两种调用方式实例
- golang通过反射调用方法
- 使用java客户端调用redis
- golang cgi调用golang 程序
- 【数据库开发】windows下使用c++调用redis
- golang调用ping命令出现too many open files
- golang的cgo支持调用C++的方法
- jedis调用redis之事物
- golang调用动态库