用go语言操作redis

用go语言操作redis

go语言使用redis需要去下载官方redis工具包

在go_path路径下执行: go get github.com/garyburd/redigo/redis
如果没安装git 你可以去后面那个链接下载一个zip包,然后解压到本地gopath路径下就可以了

gopath路径如果不知道就去看一下环境变量配置参数,一般都能看得到的

当然 也有关于redis的工具不止这一种,这里就不一一举例了,其实最重要的还是你对redis基础和命令的理解
**redis官方文档地址: http://redisdoc.com/string/index.html **

简单的例子

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func string() {
	//通过go向redis 写入数据和读取数据
	//1. 链接到go
	conn, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("reis connect err=", err)
		return
	}
	defer conn.Close()
	//2. 通过go向redis写入数据 string[key-val]
	_, err = conn.Do("Set", "name", "tom猫")
	if err != nil {
		fmt.Printf("Set err=%v \n", err)
	}

	//3. 从redis读取数据

	r, err := redis.String(conn.Do("Get", "name"))
	if err != nil {
		fmt.Println("get err=", err)
		return
	}

	//name, ok := r.(string)
	fmt.Println("name:", r)
}

func main() {
	//其实都是操作命令  熟练使用redis的命令基本上就会了
	//fixme redis 文档地址:  http://redisdoc.com/string/index.html
	//string()
	//hash()
	//list()
	subscribe()
}
func subscribe() {
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer c.Close()

	psc := redis.PubSubConn{c}
	psc.Subscribe("redChatRoom")
	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:
			fmt.Println(v)
			return
		}
	}
}

func list() {
	//1.连接到redis数据库
	conn,err :=redis.Dial("tcp","127.0.0.1:6379")
	if err != nil{
		fmt.Println("redis连接失败,错误信息:",err)
		return
	}
	defer conn.Close()
	fmt.Println("redis连接成功")

	//_, err = conn.Do("LPush", "heroList", "songjiang", 23, "long", 29)
	//if err != nil {
	//	fmt.Println(err)
	//	return
	//}
	//fmt.Println("LPush success")


	//values, _ := redis.Values(conn.Do("lrange", "heroList", "0", "100"))
	str, err := redis.String(conn.Do("RPop", "heroList"))
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(str)
	//for _, v := range values {
	//	fmt.Println(v)
	//}

	// 或者
	//var v1 string
	//redis.Scan(values, &v1)
	//fmt.Println(v1)
}

func hash() {
	////通过go向redis 写入数据和读取数据
	////1. 链接到go
	//conn, err := redis.Dial("tcp", "127.0.0.1:6379")
	//if err != nil {
	//	fmt.Println("reis connect err=", err)
	//	return
	//}
	//fmt.Println("-----------")
	//
	//defer conn.Close()
	//2. 通过go向redis写入数据 string[key-val]
	//_, err = conn.Do("HSet", "user", "name", "john")
	//if err != nil {
	//	fmt.Printf("Set err=%v \n", err)
	//}
	//_, err = conn.Do("HSet", "user", "age", 18)
	//if err != nil {
	//	fmt.Printf("Set err=%v \n", err)
	//}
	//_, err = conn.Do("HSet", "user", "gender", "boy")
	//if err != nil {
	//	fmt.Printf("Set err=%v \n", err)
	//}
	//
	////3. 从redis读取数据
	//
	//r, err := redis.String(conn.Do("HGet", "user", "name"))
	//if err != nil {
	//	fmt.Println("get err=", err)
	//	return
	//}
	//
	////name, ok := r.(string)
	//fmt.Println("name:", r)

	/*
	批量操作
	 */
	//1.连接到redis数据库
	con,err :=redis.Dial("tcp","127.0.0.1:6379")
	if err != nil{
		fmt.Println("redis连接失败,错误信息:",err)
		return
	}
	defer con.Close()
	fmt.Println("redis连接成功")

	//2.通过go向redis写入数据
	_,err = con.Do("HMSet","user2","name","Bob大米","age","19")
	if err != nil{
		fmt.Println("hmset出错,错误信息:",err)
		return
	}

	fmt.Println("hmset ok")

	//3.通过go向redis读取数据
	reply,err := redis.Strings(con.Do("HMGet","user2","name","age"))
	if err != nil{
		fmt.Println("hmget出错,错误信息:",err)
		return
	}
	fmt.Println("hmget ok")

	for i,v := range reply{
		fmt.Printf("[%d]=%s\t",i,v)
	}

}

redis连接池的创建

package main

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", "localhost:6379")
		},
	}
}

func main() {
	//先从pool 取出一个链接
	conn := pool.Get()
	defer conn.Close()

	//
	_, err := conn.Do("Set", "name", "hiram~")
	if err != nil {
		fmt.Println(err)
		return
	}

	r, err := redis.String(conn.Do("Get", "name"))
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(r)

}

posted @ 2019-07-21 13:27  hirampeng  阅读(233)  评论(0编辑  收藏  举报