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
		}
	}
}
``複製代碼
相關文章
相關標籤/搜索