|
@@ -35,6 +35,38 @@ namespace VCommon.Caching
|
|
|
|
|
|
public T KeyGetJson<T>(int db, string key) => VJsonSerializer.Deserialize<T>(_cacheAccess.CacheOp(db, p => p.StringGet(key)));
|
|
|
|
|
|
+ public CacheValue KeyFetch(int db, string key, Func<CacheValue> missingCacheValueProvider, CacheExpire expire = null)
|
|
|
+ {
|
|
|
+ if (KeyExist(db, key))
|
|
|
+ {
|
|
|
+ return _cacheAccess.CacheOp(db, p => p.StringGet(key));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var value = missingCacheValueProvider();
|
|
|
+ _cacheAccess.CacheOp(db, p => p.StringSet(key, value));
|
|
|
+ KeyExpire(db, key, expire);
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public T KeyFetchJson<T>(int db, string key, Func<T> missingCacheValueProvider, CacheExpire expire = null)
|
|
|
+ {
|
|
|
+ if (KeyExist(db, key))
|
|
|
+ {
|
|
|
+ var json = (string)_cacheAccess.CacheOp(db, p => p.StringGet(key));
|
|
|
+ return VJsonSerializer.Deserialize<T>(json);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var value = missingCacheValueProvider();
|
|
|
+ var json = VJsonSerializer.Serialize(value);
|
|
|
+ _cacheAccess.CacheOp(db, p => p.StringSet(key, json));
|
|
|
+ KeyExpire(db, key, expire);
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void KeySet(int db, string key, CacheValue value, CacheExpire expire = null)
|
|
|
{
|
|
|
_cacheAccess.CacheOp(db, p => p.StringSet(key, value));
|