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  }