github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/sessionStore/memcacheProvider/deprecated_Provider.go (about) 1 package memcacheProvider 2 3 import ( 4 "net" 5 6 "github.com/bradfitz/gomemcache/memcache" 7 ) 8 9 type Provider struct { 10 Client *memcache.Client 11 Prefix string 12 Expiration int32 13 } 14 15 func New(server ...string) *Provider { 16 if len(server) == 0 { 17 panic("[memcacheProvider.New] len(server)==0") 18 } 19 return &Provider{ 20 Client: memcache.New(server...), 21 } 22 } 23 func (provider *Provider) Get(Id string) (Value []byte, Exist bool, err error) { 24 //workaround for memcache network error 25 for i := 0; i < 2; i++ { 26 Value, Exist, err = provider.get(Id) 27 if err == nil { 28 return 29 } 30 _, ok := err.(net.Error) 31 if !ok { 32 return 33 } 34 } 35 return 36 } 37 func (provider *Provider) get(Id string) (Value []byte, Exist bool, err error) { 38 item, err := provider.Client.Get(provider.Prefix + Id) 39 if err != nil { 40 if err == memcache.ErrCacheMiss { 41 return nil, false, nil 42 } 43 return 44 } 45 Value = item.Value 46 Exist = true 47 return 48 } 49 func (provider *Provider) Set(Id string, Value []byte) (err error) { 50 //workaround for memcache network error 51 for i := 0; i < 2; i++ { 52 err = provider.set(Id, Value) 53 if err == nil { 54 return 55 } 56 _, ok := err.(net.Error) 57 if !ok { 58 return 59 } 60 } 61 return 62 } 63 func (provider *Provider) set(Id string, Value []byte) (err error) { 64 item := &memcache.Item{ 65 Key: provider.Prefix + Id, 66 Value: Value, 67 Expiration: provider.Expiration, 68 } 69 err = provider.Client.Set(item) 70 return 71 } 72 func (provider *Provider) Delete(Id string) (err error) { 73 //workaround for memcache network error 74 for i := 0; i < 2; i++ { 75 err = provider.delete(Id) 76 if err == nil { 77 return 78 } 79 _, ok := err.(net.Error) 80 if !ok { 81 return 82 } 83 } 84 return 85 } 86 87 func (provider *Provider) delete(Id string) (err error) { 88 err = provider.Client.Delete(provider.Prefix + Id) 89 if err == nil { 90 return nil 91 } 92 if err == memcache.ErrCacheMiss { 93 return nil 94 } 95 return err 96 }