當你需要快取,或是只需要簡單的key-value儲存資料時,redis會是你的好選擇,
而要在go內使用redis,可以透過redigo套件。
pool := &redis.Pool{
// Other pool configuration not shown in this example.
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
log.Println(err)
return nil, err
}
_, err = c.Do("SELECT", "0")
if err != nil {
errClose := c.Close()
if errClose != nil {
log.Println(err)
return nil, errClose
}
log.Println(err)
return nil, err
}
return c, nil
},
}
單純建立連線池的話這樣就可以了,不過對於連線池,通常會設定最大連線數,跟timeout,
避免連線被一直佔著。
pool.MaxActive = config.RedisMaxActive
pool.IdleTimeout = 10 * time.Minute
而要下任何指令前,必須要從連線池內取出連線,並且設個defer把連線給關閉。
c := coeusRpool.Get()
defer c.Close()
要將資料存入redis內,要使用SET指令
_, err = c.Do("set", "user-name", "jim")
if err != nil {
return
}
第一個參數是key,第二個是值,基本上是儲存string進去,不過也有其他的值,不過這邊不多作介紹
要從redis內取出指定key的資料,則是要使用GET指令
value, err := redis.String(c.Do("GET", "user-name"))
if err != nil {
return
}
針對被取出來的資料,如果知道型別,可以指定別的型別:
value, err := redis.Int(c.Do("GET", "user-name"))
if err != nil {
return
}
當你不需要資料,或是定期需要清除資料,則需要用DEL指令
_, err = c.Do("DEL", "user-name")
if err != nil {
return
}
就可以把當初寫入的值刪除了。