diff options
| author | ruki <[email protected]> | 2020-12-19 21:31:11 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-12-19 21:31:11 +0800 |
| commit | ff4f482606197b3e1a5dd94cded73b7b1c889d0d (patch) | |
| tree | f348049b55990ffddcd97cec9adc13b20d3ec887 /xmake/core/cache/memcache.lua | |
| parent | 22dca65a708eb7bb98ca2263665da56eecc48715 (diff) | |
impl memcache
Diffstat (limited to 'xmake/core/cache/memcache.lua')
| -rw-r--r-- | xmake/core/cache/memcache.lua | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/xmake/core/cache/memcache.lua b/xmake/core/cache/memcache.lua index 693c5b52d..36e462569 100644 --- a/xmake/core/cache/memcache.lua +++ b/xmake/core/cache/memcache.lua @@ -27,9 +27,87 @@ local table = require("base/table") -- new an instance function _instance.new(name) local instance = table.inherit(_instance) + instance._NAME = name + instance._ITEMS = {} return instance end +-- get cache name +function _instance:name() + return self._NAME +end + +-- get all cached items +function _instance:items() + return self._ITEMS +end + +-- get cache item value +function _instance:get(name) + return self._ITEMS[name] +end + +-- set cache item value +function _instance:set(name, value) + self._ITEMS[name] = value +end + +-- clear cache items +function _instance:clear() + self._ITEMS = {} +end + +-- get cache instance +function memcache.cache(cachename) + local caches = memcache._CACHES + if not caches then + caches = {} + memcache._CACHES = caches + end + local instance = caches[cachename] + if not instance then + instance = _instance.new(cachename) + caches[cachename] = instance + end + return instance +end + +-- get all caches +function memcache.caches() + return memcache._CACHES +end + +-- get cache item value +function memcache.get(cachename, name) + return memcache.cache(cachename):get(name) +end + +-- set cache item value +function memcache.set(cachename, name, value) + return memcache.cache(cachename):set(name, value) +end + +-- clear caches of the given scope name, it will clear all caches if pattern is nil +-- +-- @code +-- memcache.clear() -- clear all caches +-- memcache.clear("cachescope.") -- clear caches with `cachescope.*` +-- @endcode +-- +function memcache.clear(scopename) + local caches = memcache.caches() + if caches then + for _, cache in pairs(caches) do + if scopename then + if cache:startswith(scopename) then + cache:clear() + end + else + cache:clear() + end + end + end +end -- return module: memcache return memcache |
