github.com/wangyougui/gf/v2@v2.6.5/os/gcache/gcache_adapter.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/wangyougui/gf.
     6  
     7  package gcache
     8  
     9  import (
    10  	"context"
    11  	"time"
    12  
    13  	"github.com/wangyougui/gf/v2/container/gvar"
    14  )
    15  
    16  // Adapter is the core adapter for cache features implements.
    17  //
    18  // Note that the implementer itself should guarantee the concurrent safety of these functions.
    19  type Adapter interface {
    20  	// Set sets cache with `key`-`value` pair, which is expired after `duration`.
    21  	//
    22  	// It does not expire if `duration` == 0.
    23  	// It deletes the keys of `data` if `duration` < 0 or given `value` is nil.
    24  	Set(ctx context.Context, key interface{}, value interface{}, duration time.Duration) error
    25  
    26  	// SetMap batch sets cache with key-value pairs by `data` map, which is expired after `duration`.
    27  	//
    28  	// It does not expire if `duration` == 0.
    29  	// It deletes the keys of `data` if `duration` < 0 or given `value` is nil.
    30  	SetMap(ctx context.Context, data map[interface{}]interface{}, duration time.Duration) error
    31  
    32  	// SetIfNotExist sets cache with `key`-`value` pair which is expired after `duration`
    33  	// if `key` does not exist in the cache. It returns true the `key` does not exist in the
    34  	// cache, and it sets `value` successfully to the cache, or else it returns false.
    35  	//
    36  	// It does not expire if `duration` == 0.
    37  	// It deletes the `key` if `duration` < 0 or given `value` is nil.
    38  	SetIfNotExist(ctx context.Context, key interface{}, value interface{}, duration time.Duration) (ok bool, err error)
    39  
    40  	// SetIfNotExistFunc sets `key` with result of function `f` and returns true
    41  	// if `key` does not exist in the cache, or else it does nothing and returns false if `key` already exists.
    42  	//
    43  	// The parameter `value` can be type of `func() interface{}`, but it does nothing if its
    44  	// result is nil.
    45  	//
    46  	// It does not expire if `duration` == 0.
    47  	// It deletes the `key` if `duration` < 0 or given `value` is nil.
    48  	SetIfNotExistFunc(ctx context.Context, key interface{}, f Func, duration time.Duration) (ok bool, err error)
    49  
    50  	// SetIfNotExistFuncLock sets `key` with result of function `f` and returns true
    51  	// if `key` does not exist in the cache, or else it does nothing and returns false if `key` already exists.
    52  	//
    53  	// It does not expire if `duration` == 0.
    54  	// It deletes the `key` if `duration` < 0 or given `value` is nil.
    55  	//
    56  	// Note that it differs from function `SetIfNotExistFunc` is that the function `f` is executed within
    57  	// writing mutex lock for concurrent safety purpose.
    58  	SetIfNotExistFuncLock(ctx context.Context, key interface{}, f Func, duration time.Duration) (ok bool, err error)
    59  
    60  	// Get retrieves and returns the associated value of given `key`.
    61  	// It returns nil if it does not exist, or its value is nil, or it's expired.
    62  	// If you would like to check if the `key` exists in the cache, it's better using function Contains.
    63  	Get(ctx context.Context, key interface{}) (*gvar.Var, error)
    64  
    65  	// GetOrSet retrieves and returns the value of `key`, or sets `key`-`value` pair and
    66  	// returns `value` if `key` does not exist in the cache. The key-value pair expires
    67  	// after `duration`.
    68  	//
    69  	// It does not expire if `duration` == 0.
    70  	// It deletes the `key` if `duration` < 0 or given `value` is nil, but it does nothing
    71  	// if `value` is a function and the function result is nil.
    72  	GetOrSet(ctx context.Context, key interface{}, value interface{}, duration time.Duration) (result *gvar.Var, err error)
    73  
    74  	// GetOrSetFunc retrieves and returns the value of `key`, or sets `key` with result of
    75  	// function `f` and returns its result if `key` does not exist in the cache. The key-value
    76  	// pair expires after `duration`.
    77  	//
    78  	// It does not expire if `duration` == 0.
    79  	// It deletes the `key` if `duration` < 0 or given `value` is nil, but it does nothing
    80  	// if `value` is a function and the function result is nil.
    81  	GetOrSetFunc(ctx context.Context, key interface{}, f Func, duration time.Duration) (result *gvar.Var, err error)
    82  
    83  	// GetOrSetFuncLock retrieves and returns the value of `key`, or sets `key` with result of
    84  	// function `f` and returns its result if `key` does not exist in the cache. The key-value
    85  	// pair expires after `duration`.
    86  	//
    87  	// It does not expire if `duration` == 0.
    88  	// It deletes the `key` if `duration` < 0 or given `value` is nil, but it does nothing
    89  	// if `value` is a function and the function result is nil.
    90  	//
    91  	// Note that it differs from function `GetOrSetFunc` is that the function `f` is executed within
    92  	// writing mutex lock for concurrent safety purpose.
    93  	GetOrSetFuncLock(ctx context.Context, key interface{}, f Func, duration time.Duration) (result *gvar.Var, err error)
    94  
    95  	// Contains checks and returns true if `key` exists in the cache, or else returns false.
    96  	Contains(ctx context.Context, key interface{}) (bool, error)
    97  
    98  	// Size returns the number of items in the cache.
    99  	Size(ctx context.Context) (size int, err error)
   100  
   101  	// Data returns a copy of all key-value pairs in the cache as map type.
   102  	// Note that this function may lead lots of memory usage, you can implement this function
   103  	// if necessary.
   104  	Data(ctx context.Context) (data map[interface{}]interface{}, err error)
   105  
   106  	// Keys returns all keys in the cache as slice.
   107  	Keys(ctx context.Context, regexp ...string) (keys []interface{}, err error)
   108  
   109  	// Values returns all values in the cache as slice.
   110  	Values(ctx context.Context) (values []interface{}, err error)
   111  
   112  	// Update updates the value of `key` without changing its expiration and returns the old value.
   113  	// The returned value `exist` is false if the `key` does not exist in the cache.
   114  	//
   115  	// It deletes the `key` if given `value` is nil.
   116  	// It does nothing if `key` does not exist in the cache.
   117  	Update(ctx context.Context, key interface{}, value interface{}) (oldValue *gvar.Var, exist bool, err error)
   118  
   119  	// UpdateExpire updates the expiration of `key` and returns the old expiration duration value.
   120  	//
   121  	// It returns -1 and does nothing if the `key` does not exist in the cache.
   122  	// It deletes the `key` if `duration` < 0.
   123  	UpdateExpire(ctx context.Context, key interface{}, duration time.Duration) (oldDuration time.Duration, err error)
   124  
   125  	// GetExpire retrieves and returns the expiration of `key` in the cache.
   126  	//
   127  	// Note that,
   128  	// It returns 0 if the `key` does not expire.
   129  	// It returns -1 if the `key` does not exist in the cache.
   130  	GetExpire(ctx context.Context, key interface{}) (time.Duration, error)
   131  
   132  	// Remove deletes one or more keys from cache, and returns its value.
   133  	// If multiple keys are given, it returns the value of the last deleted item.
   134  	Remove(ctx context.Context, keys ...interface{}) (lastValue *gvar.Var, err error)
   135  
   136  	// Clear clears all data of the cache.
   137  	// Note that this function is sensitive and should be carefully used.
   138  	Clear(ctx context.Context) error
   139  
   140  	// Close closes the cache if necessary.
   141  	Close(ctx context.Context) error
   142  }