- 安裝redis數據庫 默認安裝位置 /usr/local/etc
brew install redis //( mac使用brew安裝redis)
複製代碼
- 啓動redis
// 進入安裝目錄文件 cd /usr/local/etc
redis-serve
複製代碼
- 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()
}
複製代碼
- 企業級項目使用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
}
}
}
``複製代碼