連接redis
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
fmt.Println("redis conn success")
defer c.Close()
}
執(zhí)行redis語句
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
defer c.Close()
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
r, _ := c.Do("set", "name", "mac") //這里寫redis語句
fmt.Println(r)
res, _ := redis.String(c.Do("get", "name"))
fmt.Println(res)
}
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
defer c.Close()
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
c.Send("set", "name", "mac")
c.Send("set", "age", 18)
c.Send("get", "name")
c.Send("get", "age")
c.Flush()
res, _ := redis.String(c.Receive())
fmt.Println(res)
res, _ = redis.String(c.Receive())
fmt.Println(res)
res, _ = redis.String(c.Receive())
fmt.Println(res)
res, _ = redis.String(c.Receive())
fmt.Println(res)
}
publish&subscribe
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
"time"
)
func publish() {
c2, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
}
for {
var t string = "現(xiàn)在時間為: "
t += time.Now().String()
c2.Do("publish", "bbc", t)
time.Sleep(time.Second)
}
}
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
defer c.Close()
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
psc := redis.PubSubConn{
Conn: c,
}
psc.Subscribe("bbc")
go publish()
for {
switch v := psc.Receive().(type) {
case redis.Message:
fmt.Printf("%s: message: %s\n", v.Channel, v.Data)
case redis.Subscription:
fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
case error:
return
}
}
}
scan用法
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
defer c.Close()
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
c.Do("mset", "name", "mac", "age", 18)
reply, _ := redis.Values(c.Do("mget", "name", "age"))
var age int
var name string
redis.Scan(reply, &name, &age)
fmt.Println(name, age)
}
連接池
package main
import(
"fmt"
"github.com/garyburd/redigo/redis"
)
var pool *redis.Pool //創(chuàng)建redis連接池
func init(){
pool = &redis.Pool{ //實例化一個連接池
MaxIdle:16, //最初的連接數(shù)量
// MaxActive:1000000, //最大連接數(shù)量
MaxActive:0, //連接池最大連接數(shù)量,不確定可以用0(0表示自動定義),按需分配
IdleTimeout:300, //連接關(guān)閉時間 300秒 (300秒不使用自動關(guān)閉)
Dial: func() (redis.Conn ,error){ //要連接的redis數(shù)據(jù)庫
return redis.Dial("tcp","localhost:6379")
},
}
}
func main(){
c := pool.Get() //從連接池,取一個鏈接
defer c.Close() //函數(shù)運行結(jié)束 ,把連接放回連接池
_,err := c.Do("Set","abc",200)
if err != nil {
fmt.Println(err)
return
}
r,err := redis.Int(c.Do("Get","abc"))
if err != nil {
fmt.Println("get abc faild :",err)
return
}
fmt.Println(r)
pool.Close() //關(guān)閉連接池
}