summaryrefslogtreecommitdiff
path: root/xmake/core/cache/memcache.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2020-12-19 21:31:11 +0800
committerruki <[email protected]>2020-12-19 21:31:11 +0800
commitff4f482606197b3e1a5dd94cded73b7b1c889d0d (patch)
treef348049b55990ffddcd97cec9adc13b20d3ec887 /xmake/core/cache/memcache.lua
parent22dca65a708eb7bb98ca2263665da56eecc48715 (diff)
impl memcache
Diffstat (limited to 'xmake/core/cache/memcache.lua')
-rw-r--r--xmake/core/cache/memcache.lua78
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