@@ -18,33 +18,47 @@ var (
1818)
1919
2020// NewRedisStore create an instance of a redis store
21- func NewRedisStore (opts * Options ) session.ManagerStore {
21+ func NewRedisStore (opts * Options , prefix ... string ) session.ManagerStore {
2222 if opts == nil {
2323 panic ("options cannot be nil" )
2424 }
25- return NewRedisStoreWithCli (redis .NewClient (opts .redisOptions ()))
25+ return NewRedisStoreWithCli (
26+ redis .NewClient (opts .redisOptions ()),
27+ prefix ... ,
28+ )
2629}
2730
2831// NewRedisStoreWithCli create an instance of a redis store
29- func NewRedisStoreWithCli (cli * redis.Client ) session.ManagerStore {
30- return & managerStore {
32+ func NewRedisStoreWithCli (cli * redis.Client , prefix ... string ) session.ManagerStore {
33+ store := & managerStore {
3134 cli : cli ,
3235 }
36+ if len (prefix ) > 0 {
37+ store .prefix = prefix [0 ]
38+ }
39+ return store
3340}
3441
3542// NewRedisClusterStore create an instance of a redis cluster store
36- func NewRedisClusterStore (opts * ClusterOptions ) session.ManagerStore {
43+ func NewRedisClusterStore (opts * ClusterOptions , prefix ... string ) session.ManagerStore {
3744 if opts == nil {
3845 panic ("options cannot be nil" )
3946 }
40- return NewRedisClusterStoreWithCli (redis .NewClusterClient (opts .redisClusterOptions ()))
47+ return NewRedisClusterStoreWithCli (
48+ redis .NewClusterClient (opts .redisClusterOptions ()),
49+ prefix ... ,
50+ )
4151}
4252
4353// NewRedisClusterStoreWithCli create an instance of a redis cluster store
44- func NewRedisClusterStoreWithCli (cli * redis.ClusterClient ) session.ManagerStore {
45- return & managerStore {
54+ func NewRedisClusterStoreWithCli (cli * redis.ClusterClient , prefix ... string ) session.ManagerStore {
55+ store := & managerStore {
4656 cli : cli ,
4757 }
58+ if len (prefix ) > 0 {
59+ store .prefix = prefix [0 ]
60+ }
61+ return store
4862}
4963
5064type clienter interface {
@@ -58,11 +72,16 @@ type clienter interface {
5872}
5973
6074type managerStore struct {
61- cli clienter
75+ cli clienter
76+ prefix string
77+ }
78+
79+ func (s * managerStore ) getKey (key string ) string {
80+ return s .prefix + key
6281}
6382
6483func (s * managerStore ) getValue (sid string ) (string , error ) {
65- cmd := s .cli .Get (sid )
84+ cmd := s .cli .Get (s . getKey ( sid ) )
6685 if err := cmd .Err (); err != nil {
6786 if err == redis .Nil {
6887 return "" , nil
@@ -85,19 +104,18 @@ func (s *managerStore) parseValue(value string) (map[string]interface{}, error)
85104}
86105
87106func (s * managerStore ) Create (ctx context.Context , sid string , expired int64 ) (session.Store , error ) {
88- return newStore (ctx , s . cli , sid , expired , nil ), nil
107+ return newStore (ctx , s , sid , expired , nil ), nil
89108}
90109
91110func (s * managerStore ) Update (ctx context.Context , sid string , expired int64 ) (session.Store , error ) {
92111 value , err := s .getValue (sid )
93112 if err != nil {
94113 return nil , err
95114 } else if value == "" {
96-
97- return newStore (ctx , s .cli , sid , expired , nil ), nil
115+ return newStore (ctx , s , sid , expired , nil ), nil
98116 }
99117
100- cmd := s .cli .Expire (sid , time .Duration (expired )* time .Second )
118+ cmd := s .cli .Expire (s . getKey ( sid ) , time .Duration (expired )* time .Second )
101119 if err = cmd .Err (); err != nil {
102120 return nil , err
103121 }
@@ -107,7 +125,7 @@ func (s *managerStore) Update(ctx context.Context, sid string, expired int64) (s
107125 return nil , err
108126 }
109127
110- return newStore (ctx , s . cli , sid , expired , values ), nil
128+ return newStore (ctx , s , sid , expired , values ), nil
111129}
112130
113131func (s * managerStore ) Delete (_ context.Context , sid string ) error {
@@ -117,12 +135,12 @@ func (s *managerStore) Delete(_ context.Context, sid string) error {
117135 return nil
118136 }
119137
120- cmd := s .cli .Del (sid )
138+ cmd := s .cli .Del (s . getKey ( sid ) )
121139 return cmd .Err ()
122140}
123141
124142func (s * managerStore ) Check (_ context.Context , sid string ) (bool , error ) {
125- cmd := s .cli .Exists (sid )
143+ cmd := s .cli .Exists (s . getKey ( sid ) )
126144 if err := cmd .Err (); err != nil {
127145 return false , err
128146 }
@@ -134,12 +152,12 @@ func (s *managerStore) Refresh(ctx context.Context, oldsid, sid string, expired
134152 if err != nil {
135153 return nil , err
136154 } else if value == "" {
137- return newStore (ctx , s . cli , sid , expired , nil ), nil
155+ return newStore (ctx , s , sid , expired , nil ), nil
138156 }
139157
140158 pipe := s .cli .TxPipeline ()
141- pipe .Set (sid , value , time .Duration (expired )* time .Second )
142- pipe .Del (oldsid )
159+ pipe .Set (s . getKey ( sid ) , value , time .Duration (expired )* time .Second )
160+ pipe .Del (s . getKey ( oldsid ) )
143161 _ , err = pipe .Exec ()
144162 if err != nil {
145163 return nil , err
@@ -150,20 +168,20 @@ func (s *managerStore) Refresh(ctx context.Context, oldsid, sid string, expired
150168 return nil , err
151169 }
152170
153- return newStore (ctx , s . cli , sid , expired , values ), nil
171+ return newStore (ctx , s , sid , expired , values ), nil
154172}
155173
156174func (s * managerStore ) Close () error {
157175 return s .cli .Close ()
158176}
159177
160- func newStore (ctx context.Context , cli clienter , sid string , expired int64 , values map [string ]interface {}) * store {
178+ func newStore (ctx context.Context , ms * managerStore , sid string , expired int64 , values map [string ]interface {}) * store {
161179 if values == nil {
162180 values = make (map [string ]interface {})
163181 }
164182
165183 return & store {
166- cli : cli ,
184+ ms : ms ,
167185 ctx : ctx ,
168186 sid : sid ,
169187 expired : expired ,
@@ -173,11 +191,11 @@ func newStore(ctx context.Context, cli clienter, sid string, expired int64, valu
173191
174192type store struct {
175193 sync.RWMutex
194+ ms * managerStore
176195 ctx context.Context
177196 sid string
178197 expired int64
179198 values map [string ]interface {}
180- cli clienter
181199}
182200
183201func (s * store ) Context () context.Context {
@@ -234,6 +252,6 @@ func (s *store) Save() error {
234252 }
235253 s .RUnlock ()
236254
237- cmd := s .cli .Set (s .sid , value , time .Duration (s .expired )* time .Second )
255+ cmd := s .ms . cli .Set (s .ms . getKey ( s . sid ) , value , time .Duration (s .expired )* time .Second )
238256 return cmd .Err ()
239257}
0 commit comments