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)
    
    }
    
    
  • 相关阅读:
    iOS开发-ScrollView图片缩放
    算法-随机不重复数列生成
    iOS开发-舒尔特表
    iOS开发-音乐播放
    iOS开发-简单的图片查看器
    iOS开发-Interface Builder的前世今生
    iOS开发-DatePicker控件
    iOS开发-UI基础Demo
    Objective-C-Category类别
    Objective-C面向对象之实现类
  • 原文地址:https://www.cnblogs.com/hirampeng/p/11220988.html
Copyright © 2011-2022 走看看