zoukankan      html  css  js  c++  java
  • 用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 
    ", 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
    ", v.Channel, v.Data)
    		case redis.Subscription:
    			fmt.Printf("%s: %s %d
    ", 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 
    ", err)
    	//}
    	//_, err = conn.Do("HSet", "user", "age", 18)
    	//if err != nil {
    	//	fmt.Printf("Set err=%v 
    ", err)
    	//}
    	//_, err = conn.Do("HSet", "user", "gender", "boy")
    	//if err != nil {
    	//	fmt.Printf("Set err=%v 
    ", 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	",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)
    
    }
    
    
  • 相关阅读:
    浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)
    浙大数据结构课后习题 练习二 7-2 一元多项式的乘法与加法运算 (20 分)
    浙大数据结构课后习题 练习一 7-1 Maximum Subsequence Sum (25 分)
    浙大数据结构课后习题 练习一 7-1 最大子列和问题 (20 分)
    PAT Basic 1019 数字黑洞 (20 分)
    PAT Basic 1017 A除以B (20 分)
    PAT Basic 1013 数素数 (20 分)
    PAT Basic 1007 素数对猜想 (20 分)
    PAT Basic 1003 我要通过! (20 分)
    自动化运维——HelloWorld(一)
  • 原文地址:https://www.cnblogs.com/hirampeng/p/11220988.html
Copyright © 2011-2022 走看看