1
0
Fork 0
mirror of https://github.com/alice-lg/birdwatcher.git synced 2025-03-09 00:00:05 +01:00

added redis cache helper

This commit is contained in:
Matthias Hannig 2019-01-24 17:15:17 +01:00
parent 5872eeb5e8
commit 1518f64cd4
2 changed files with 111 additions and 0 deletions

53
bird/redis_cache.go Normal file
View file

@ -0,0 +1,53 @@
package bird
import (
"encoding/json"
"github.com/go-redis/redis"
"time"
)
type RedisCache struct {
client *redis.Client
}
func NewRedisCache(config CacheConfig) (*RedisCache, error) {
client := redis.NewClient(&redis.Options{
Addr: config.RedisServer,
Password: config.RedisPassword,
DB: config.RedisDb,
})
_, err := client.Ping().Result()
if err != nil {
return nil, err
}
cache := &RedisCache{
client: client,
}
return cache, nil
}
func (self *RedisCache) Get(key string) (Parsed, error) {
data, err := self.client.Get(key).Result()
if err != nil {
return NilParse, err
}
parsed := Parsed{}
err = json.Unmarshal([]byte(data), &parsed)
return parsed, err
}
func (self *RedisCache) Set(key string, parsed Parsed) error {
payload, err := json.Marshal(parsed)
if err != nil {
return err
}
_, err = self.client.Set(key, payload, time.Minute*5).Result()
return err
}

58
bird/redis_cache_test.go Normal file
View file

@ -0,0 +1,58 @@
package bird
import (
"testing"
)
func Test_RedisCacheAccess(t *testing.T) {
cache, err := NewRedisCache(CacheConfig{
RedisServer: "localhost:6379",
})
if err != nil {
t.Log("Redis server not available:", err)
t.Log("Skipping redis tests.")
return
}
parsed := Parsed{
"foo": 23,
"bar": 42,
"baz": true,
}
t.Log("Setting redis cache...")
err = cache.Set("testkey", parsed)
if err != nil {
t.Error(err)
}
t.Log("Fetching from redis...")
parsed, err = cache.Get("testkey")
if err != nil {
t.Error(err)
}
t.Log(parsed)
}
func Test_RedisCacheAccessKeyMissing(t *testing.T) {
cache, err := NewRedisCache(CacheConfig{
RedisServer: "localhost:6379",
})
if err != nil {
t.Log("Redis server not available:", err)
t.Log("Skipping redis tests.")
return
}
parsed, err := cache.Get("test_missing_key")
if err == nil {
t.Error(err)
}
t.Log("Cache error:", err)
t.Log(parsed)
}