Skip to content

Commit 2a0b9c4

Browse files
committed
added configuration options for redis client instance
1 parent 07fb49c commit 2a0b9c4

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

redis.go

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"bytes"
99
"encoding/gob"
1010
"fmt"
11+
"runtime"
1112
"strings"
1213
"sync"
1314
"time"
@@ -40,14 +41,25 @@ func (p *Provider) Init(providerName string, appCfg *config.Config, logger log.L
4041
p.appCfg = appCfg
4142
p.logger = logger
4243

43-
if strings.ToLower(p.appCfg.StringDefault("cache."+p.name+".provider", "")) != "redis" {
44+
cfgPrefix := "cache." + p.name + "."
45+
if strings.ToLower(p.appCfg.StringDefault(cfgPrefix+"provider", "")) != "redis" {
4446
return fmt.Errorf("aah/cache: not a vaild provider name, expected 'redis'")
4547
}
4648

4749
p.clientOpts = &redis.Options{
48-
Addr: p.appCfg.StringDefault("cache."+p.name+".address", ":6379"),
49-
Password: p.appCfg.StringDefault("cache."+p.name+".password", ""),
50-
DB: p.appCfg.IntDefault("cache."+p.name+".db", 0),
50+
Network: p.appCfg.StringDefault(cfgPrefix+"network", "tcp"),
51+
Addr: p.appCfg.StringDefault(cfgPrefix+"address", ":6379"),
52+
Password: p.appCfg.StringDefault(cfgPrefix+"password", ""),
53+
DB: p.appCfg.IntDefault(cfgPrefix+"db", 0),
54+
PoolSize: p.appCfg.IntDefault(cfgPrefix+"pool_size", 10*runtime.NumCPU()),
55+
DialTimeout: parseDuration(p.appCfg.StringDefault(cfgPrefix+"timeout.connect", "5s"), "5s"),
56+
ReadTimeout: parseDuration(p.appCfg.StringDefault(cfgPrefix+"timeout.read", "3s"), "3s"),
57+
WriteTimeout: parseDuration(p.appCfg.StringDefault(cfgPrefix+"timeout.write", "3s"), "3s"),
58+
PoolTimeout: parseDuration(p.appCfg.StringDefault(cfgPrefix+"timeout.pool", "3s"), "3s"),
59+
IdleTimeout: parseDuration(p.appCfg.StringDefault(cfgPrefix+"timeout.idle", "5m"), "5m"),
60+
IdleCheckFrequency: parseDuration(p.appCfg.StringDefault(cfgPrefix+"idle_check_interval", "1m"), "1m"),
61+
MinRetryBackoff: parseDuration(p.appCfg.StringDefault(cfgPrefix+"retry_backoff.min", "8ms"), "8ms"),
62+
MaxRetryBackoff: parseDuration(p.appCfg.StringDefault(cfgPrefix+"retry_backoff.max", "512ms"), "512ms"),
5163
}
5264

5365
p.client = redis.NewClient(p.clientOpts)
@@ -71,6 +83,12 @@ func (p *Provider) Create(cfg *cache.Config) (cache.Cache, error) {
7183
return r, nil
7284
}
7385

86+
// Client method returns underlying redis client. So that aah user could perform
87+
// cache provider specific features.
88+
func (p *Provider) Client() *redis.Client {
89+
return p.client
90+
}
91+
7492
//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
7593
// redisCache struct implements `cache.Cache` interface.
7694
//______________________________________________________________________________
@@ -171,3 +189,11 @@ func releaseBuffer(b *bytes.Buffer) {
171189
bufPool.Put(b)
172190
}
173191
}
192+
193+
func parseDuration(v, f string) time.Duration {
194+
if d, err := time.ParseDuration(v); err == nil {
195+
return d
196+
}
197+
d, _ := time.ParseDuration(f)
198+
return d
199+
}

redis_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ func TestRedisMultipleCache(t *testing.T) {
148148
assert.Equal(t, i, v)
149149
}
150150
c.Flush()
151+
152+
p := mgr.Provider("redis1").(*Provider)
153+
assert.NotNil(t, p.Client())
151154
}
152155
}
153156

@@ -203,6 +206,11 @@ func TestRedisInvalidAddress(t *testing.T) {
203206
assert.Equal(t, errors.New("aah/cache: dial tcp: address 637967: invalid port"), err)
204207
}
205208

209+
func TestParseTimeDuration(t *testing.T) {
210+
d := parseDuration("", "1m")
211+
assert.Equal(t, float64(1), d.Minutes())
212+
}
213+
206214
func createCacheMgr(t *testing.T, name, appCfgStr string) *cache.Manager {
207215
mgr := cache.NewManager()
208216
mgr.AddProvider(name, new(Provider))

version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// aahframework.org/cache/redis source code and usage is governed by a MIT style
33
// license that can be found in the LICENSE file.
44

5-
// Package redis provides redis cache provider for aah framework. Redis cluster support upcoming.
5+
// Package redis provides redis cache provider for aah framework cache manager. Redis cluster support upcoming.
66
package redis
77

88
// Version number of library.

0 commit comments

Comments
 (0)