Я использую Redis для хранения сеансов для моего простого веб-приложения Go.
Для этого я хочу, чтобы только один сеанс одновременно имел доступ к соединению redis.
Я искал реализацию одноэлементных объектов в Go и следовал.
Это код, который я сейчас реализую:
Redis соединение:
package Datab
import (
"github.com/gomodule/redigo/redis"
)
type cache struct {
Conn redis.Conn
}
var singleCache *cache = nil
func GetSessionCache() *cache {
if singleCache == nil {
singleCache := &cache{}
singleCache.Conn, _ = redis.DialURL("redis://localhost")
// ^ SINGLECACHE IS NOT NIL HERE.
}
return singleCache
// ^ SAYS THIS IS NIL!
}
Redis Реализация:
package Handler
import (
Datab "videodoox/DB" // this file contains the redis connection implementation
)
connStru := *Datab.GetSessionCache()
cache := connStru.Conn
connStru2 := *Datab.GetSessionCache()
cache2: = connStru.Conn
// ^ THIS CONNECTION HERE IS A COMPLETELY NEW INSTANCE.
Каждый раз, когда я получаю соединение, файл соединения redis создает новый экземпляр соединения.
Как мне создать новое соединение один раз и просто возвращать это соединение каждый раз?
Спасибо!