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:
parent
5872eeb5e8
commit
1518f64cd4
2 changed files with 111 additions and 0 deletions
53
bird/redis_cache.go
Normal file
53
bird/redis_cache.go
Normal 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
58
bird/redis_cache_test.go
Normal 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)
|
||||
}
|
Loading…
Add table
Reference in a new issue