Go Redis 開發

redigo庫來實現redis的操做:https://github.com/gomodule/redigogit

 

Redis經常使用操做 

示例代碼:github

package main import ( "github.com/gomodule/redigo/redis"
    "fmt"
    "time" ) func initRedis() (dial redis.Conn, err error) { dial, err = redis.Dial("tcp", "172.16.65.183:30001") if err != nil { panic(err) } return dial, nil } func testSetGet(dial redis.Conn) { // 設置一個Key和value
    dial.Do("set", "abc", "this is a test") // 設置過時時間
    dial.Do("expire", "abc", 2) // 讀取指定key的value
    reply, err := dial.Do("get", "abc") str, err := redis.String(reply, err) if err != nil { panic(err) } fmt.Println(str) } func testHSetGet(dial redis.Conn) { key := "abc" value := "this is a book test"

    // 設置一個hash表來存儲
    reply, err := dial.Do("hset", "books", key, value) if err != nil { panic(err) } fmt.Println(reply) reply2, err := dial.Do("hget", "books", key) str, err := redis.String(reply2, err) if err != nil { panic(err) } fmt.Println(str) } func testMSetGet(dial redis.Conn) { key := "abc" value := "this is a test book" key2 := "golang" value2 := "this is a golang book"
    
    // 一次設置多個key
    dial.Do("mset", "books", key, value, key2, value2) str, err := redis.Strings(dial.Do("mget", "books",key, key2)) if err != nil { panic(err) } fmt.Println(str) } func main() { dial, _ := initRedis() testSetGet(dial) testHSetGet(dial) testMSetGet(dial) time.Sleep(4 * time.Second) reply, err := dial.Do("get", "abc") str, err := redis.String(reply, err) if err != nil { panic(err) } fmt.Println("get abc", str) defer dial.Close() }
View Code

 

Redis鏈接池

鏈接池使用場景

對於一些大對象,或者初始化過程較長的可複用的對象,咱們若是每次都new對象出來,那麼意味着會耗費大量的時間。golang

咱們能夠將這些對象緩存起來,當接口調用完畢後,不是銷燬對象,當下次使用的時候,直接從對象池中拿出來便可。redis

示例代碼:緩存

package main import ( "github.com/gomodule/redigo/redis"
    "time"
    "fmt" ) func initRedisPool(serverAddr string, passwd string) (pool *redis.Pool) { pool = &redis.Pool{ MaxIdle: 16, MaxActive: 1024, IdleTimeout: 240 * time.Second, Dial: func() (redis.Conn, error) { conn, err := redis.Dial("tcp", serverAddr) if err != nil { return nil, err } if len(passwd) >0 { _, err := conn.Do("auth", passwd) if err != nil { return nil, err } } return conn, nil }, TestOnBorrow: func(c redis.Conn, t time.Time) error { if time.Since(t) < time.Minute { return nil } _, err := c.Do("ping") return err }, } return pool } func testRedisPool() { redisPool := initRedisPool("172.16.65.181:30001", "") // 獲取一個redis鏈接
    conn := redisPool.Get() key := "name" value := "golang" conn.Do("hset", "books", key, value) val, err := redis.String(conn.Do("hget", "books", key)) if err != nil { panic(err) } conn.Close() fmt.Println(val) } func main() { testRedisPool() }
View Code
相關文章
相關標籤/搜索