go redis的使用

  1. 安装redis数据库 默认安装位置 /usr/local/etc
brew install redis  //( mac使用brew安装redis)
复制代码
  1. 启动redis
// 进入安装目录文件    cd /usr/local/etc
redis-serve
复制代码
  1. redis简单使用
package main

import (
	"fmt"
	"github.com/garyburd/redigo/redis"
	_ "github.com/lib/pq"
)

func main(){
	// 连接redis数据库
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("Connect 1 to redis error", err)
		return
	}

	_, err = c.Do("SET", "task:task_id", "张", "EX", "5")


// ------------------------------
	// 写入单个key 值(mykey) 过时时间5秒
	_, err = c.Do("SET", "mykey", "张", "EX", "5")
	if err != nil {
		fmt.Println("redis 2 set failed:", err)
		return
	}

	// 获取单个key值 (mykey)
	username, err := redis.String(c.Do("GET", "mykey"))
	if err != nil {
		fmt.Println("redis 3 get failed:", err)
		return
	}
	fmt.Printf("Get 4 mykey: %v \n", username)
	// 等待时间设置
	time.Sleep(8 * time.Second)

	// 第二次获取key值(过时后的)
	username, err = redis.String(c.Do("GET", "mykey"))
	if err != nil {
		fmt.Println("redis 5 get failed:", err)
	} else {
		fmt.Printf("Get过时 6 mykey: %v \n", username)
	}

	// ---------------批量操做
	// 批量添加
	_, err = c.Do("MSET","abc",10,"egf",90)
	if err != nil {
		fmt.Println("redis 7 Mset failed:", err)
		return
	}

	//time.Sleep(5 * time.Second)
	// 批量获取a
	r, err := redis.Strings(c.Do("MGET", "abc", "efg"))
	if err != nil {
		fmt.Println("MGet 8 abc failed,", err)
	}

	for k, v := range r {
		fmt.Println(k, v)
	}




	// -------------------- 写入json数据

	// 写入数据
	imap := map[string]string{"name":"zhang","sex": "男"}
	// 序列化json数据
	value, _ := json.Marshal(imap)
	_, err = c.Do("SETNX", "jsonkey", value)
	if err != nil {
		fmt.Println("redis 8 SETNX jsonkey failed:", err)
	}
	// 读取数据
	var imapGet map[string]string
	valueGet, err := redis.Bytes(c.Do("GET", "jsonkey"))
	if err != nil {
		fmt.Println(err)
	}

	errShal := json.Unmarshal(valueGet, &imapGet)
	if errShal != nil {
		fmt.Println(err)
	}

	fmt.Println("imapGet", imapGet)
	fmt.Println("imapGet", imapGet["name"])
	fmt.Println("imapGet", imapGet["sex"])

// -------------------------列数据 处理
	// 存入列数据
	_, err = c.Do("lpush", "runoobkey", "redis")
	if err != nil {
		fmt.Println("redis set failed:", err)
	}

	_, err = c.Do("lpush", "runoobkey", "mongodb")
	if err != nil {
		fmt.Println("redis set failed:", err)
	}
	_, err = c.Do("lpush", "runoobkey", "mysql")
	if err != nil {
		fmt.Println("redis set failed:", err)
	}

	values, _ := redis.Values(c.Do("lrange", "runoobkey", "0", "100"))

	for _, v := range values {
		fmt.Println(string(v.([]byte)))
	}


	// ------------------ 判断key 是否存在
	is_key_exit, err := redis.Bool(c.Do("EXISTS", "runoobkey"))
	if err != nil {
		fmt.Println("error:", err)
	} else {
		fmt.Printf("exists or not: %v \n", is_key_exit)
	}

	// ----------------   删除key
	// 增长key
	_, err = c.Do("SET", "delkey", "张")
	if err != nil {
		fmt.Println("增长key:", err)
	}
	// 获取key
	delkey, err := redis.String(c.Do("GET", "delkey"))
	if err != nil {
		fmt.Println("获取key error:", err)
	} else {
		fmt.Printf(" 获取key delkey 存在: %v \n", delkey)
	}

	// 删除key
	_, err = c.Do("DEL", "delkey")
	if err != nil {
		fmt.Println("删除key failed:", err)
	}

	j, err := redis.Bool(c.Do("EXISTS", "delkey"))
	if err != nil {
		fmt.Println("查询是否存在 error:", err)
	} else {
		fmt.Printf("查询是否存在 不存在: %v \n", j)
	}
	// hset key value    redis 表数据     hget  获取表数据     数据格式 以索引的形式存储数据
	//1 
	//value1
	//2 
	//value2
	//3 
	//value3
// 	。。。。。。
	defer c.Close()
}
复制代码
  1. 企业级项目使用redis 通常采用中间件的形式模块化引用redis配置
var redisservers = map[string]{
	Addr : "127.0.0.1:6379",
    Password : "",
    DB: 0
}
func main() {
		router := gin.New()
		// 使用连接数据库
		pool := Redis(redisservers)
}


// Redis 数据库连接    //  此函数可用在以后须要使用redis 地方进行单独引用   只须要传入 redis配置便可
func Redis(redisservers map[string]string) gin.HandlerFunc {
	// 连接数据库
	return pool := thisPool(redisservers.Addr, redisservers.Password, redisservers.DB)
}
// 配置redis连接
func thisPool(server, password string, db int) *redis.Pool {
	return &redis.Pool{
		MaxIdle:     3,     // 设置连接数
		IdleTimeout: 120 * time.Second,   // 设置超时
		Dial: func() (redis.Conn, error) {
		c, err := redis.Dial("tcp", server, redis.DialDatabase(db))
		if err != nil {
			return err
		}
	}
}
``复制代码
相关文章
相关标签/搜索