golang操作redis主要有兩個庫,go-redis和redigo。兩者操作都比較簡單,區別上redigo更像一個client執行各種操作都是通過Do函數去做的,redis-go對函數的封裝更好,相比之下redigo操作redis顯得有些繁瑣。但是官方更推薦redigo,所以項目中我使用了redigo。
1.連接redis
package redisclient import ( "fmt" redigo "github.com/garyburd/redigo/redis" ) var pool *redigo.Pool func init() { redis_host := "127.0.0.1" redis_port := 6379 pool_size := 20 pool = redigo.NewPool(func() (redigo.Conn, error) { c, err := redigo.Dial("tcp", fmt.Sprintf("%s:%d", redis_host, redis_port)) if err != nil { return nil, err } return c, nil }, pool_size) } func Get() redigo.Conn { return pool.Get() }
之后我們調用redisclient包中的.Get()就可以生成一個redis連接池對象來操作redis
2.操作redis
package main import ( "fmt" "redisclient" "github.com/garyburd/redigo/redis" ) func main() { c := redisclient.Get() //記得銷毀本次鏈連接 defer c.Close() //寫入數據 _, err := c.Do("SET", "go_key", "redigo") if err != nil { fmt.Println("err while setting:", err) } //判斷key是否存在 is_key_exit, err := redis.Bool(c.Do("EXISTS", "go_key")) if err != nil { fmt.Println("err while checking keys:", err) } else { fmt.Println(is_key_exit) } //獲取value並轉成字符串 account_balance, err := redis.String(c.Do("GET", "go_key")) if err != nil { fmt.Println("err while getting:", err) } else { fmt.Println(account_balance) } //刪除key _, err = c.Do("DEL", "go_key") if err != nil { fmt.Println("err while deleting:", err) } //設置key過期時間 _, err = c.Do("SET", "mykey", "superWang", "EX", "5") if err != nil { fmt.Println("err while setting:", err) } //對已有key設置5s過期時間 n, err := c.Do("EXPIRE", "go_key", 5) if err != nil { fmt.Println("err while expiring:", err) } else if n != int64(1) { fmt.Println("failed") } }
希望對大家有所幫助~