前言
关于Redis的介绍我这里不多介绍了,本文主要介绍Go如何操作Redis的。
安装第三方库
这里可以使用"github.com/garyburd/redigo/redis"或者"gopkg.in/redis.v4" 本文使用的是"github.com/garyburd/redigo/redis"来操作,二者的区别就是前者使用Do发送redis命令,后者就是帮我们封装成命令方法!
安装第三方库
go get github.com/garyburd/redigo/redis
代码编写
setStr
func setStr(conn redis.Conn) (res string){
res, err := redis.String(conn.Do("Set", "go-redis-key", "go-redis-value"))
if err != nil {
fmt.Println("setStr err===>", err)
return
}
fmt.Println("操作成功!!!")
return res
}
getStr
func getStr(conn redis.Conn) (res string){
res, err := redis.String(conn.Do("Get", "go-redis-key"))
if err != nil {
fmt.Println("getStr err===>", err)
return
}
return res
}
setHSet
func setHSet(conn redis.Conn) {
_, err := conn.Do("HSet", "user1", "name", "tao")
if err != nil {
fmt.Println("setHSet name err===>", err)
return
}
_, err = conn.Do("HSet", "user1", "age", 18)
if err != nil {
fmt.Println("setHSet age err===>", err)
return
}
fmt.Println("setHSet 操作成功")
}
getHSet
func getHSet(conn redis.Conn) (res1 string,res2 int) {
res1, err := redis.String(conn.Do("HGet", "user1","name"))
if err != nil {
fmt.Println("getHSet name err===>", err)
return
}
res2, err1 := redis.Int(conn.Do("HGet", "user1", "age"))
if err1 != nil {
fmt.Println("getHSet age err===>", err1)
return
}
return res1, res2
}
setHMSet
func setHMSet(conn redis.Conn) {
_, err := conn.Do("HMSet", "user2", "name", "yyy","age",19)
if err != nil {
fmt.Println("setHMSet name err===>", err)
return
}
fmt.Println("setHMSet 操作成功")
}
getHMGet
func getHMGet(conn redis.Conn) (res []string) {
res, err := redis.Strings(conn.Do("HMGet", "user2","name","age"))
if err != nil {
fmt.Println("getHSet age err===>", err)
return
}
return res
}
mSet
func mSet(conn redis.Conn) {
_, err := conn.Do("MSet", "name", "yyy", "addr", "深圳")
if err != nil {
fmt.Println("MSet age err===>", err)
return
}
fmt.Println("mSet 操作成功")
}
mGet
func mGet(conn redis.Conn) (res []string) {
res, err := redis.Strings(conn.Do("MGet", "name", "addr"))
if err != nil {
fmt.Println("MGet age err===>", err)
return
}
return res
}
测试main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
conn, err := redis.Dial(
"tcp",
"xxx.xxx.xxx.x:6379",
redis.DialPassword("xxxxxxx"),
redis.DialDatabase(int(0)))
defer conn.Close()
if err != nil {
fmt.Print("redis err===>", err)
return
}
fmt.Println("redis连接成功===>", conn)
fmt.Println("<-----------setStr-start----------->")
setStrRes := setStr(conn)
fmt.Println("返回值:", setStrRes)
fmt.Println("<-----------setStr-end----------->")
ln()
fmt.Println("<-----------setHSet-start----------->")
setHSet(conn)
fmt.Println("<-----------setHSet-end----------->")
ln()
fmt.Println("<-----------getHSet-start----------->")
name, age := getHSet(conn)
fmt.Println("name==>",name)
fmt.Println("age===>",age)
fmt.Println("<-----------getHSet-end----------->")
ln()
fmt.Println("<-----------setHMSet-start----------->")
setHMSet(conn)
fmt.Println("<-----------setHMSet-end----------->")
ln()
fmt.Println("<-----------getHMGet-start----------->")
hmGetRes := getHMGet(conn)
for _,v:=range hmGetRes{
fmt.Println(v)
}
fmt.Println("<-----------getHMGet-end----------->")
ln()
fmt.Println("<-----------MSet-start----------->")
mSet(conn)
fmt.Println("<-----------MSet-end----------->")
ln()
fmt.Println("<-----------MGet-start----------->")
mGetRes := mGet(conn)
for _,v:=range mGetRes {
fmt.Println(v)
}
fmt.Println("<-----------MGet-end----------->")
ln()
}
测试结果
Go-Redis连接池
连接池这玩意我也不多介绍了,做过服务端其他技术栈的多少了解,废话不多说
声明连接池
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
var pool *redis.Pool
初始化连接池
func init() {
pool=&redis.Pool{
MaxIdle: 8,
MaxActive: 0,
IdleTimeout: 100,
Dial: func() (redis.Conn, error) {
return redis.Dial("tcp",
"xxx.xxx.xxx.x:6379",
redis.DialPassword("xxxxxxx"),
redis.DialDatabase(int(0)))
},
}
}
测试
func main() {
conn:=pool.Get()
defer conn.Close()
resStr := getStr(conn)
fmt.Println(resStr)
}
|