protected internal override bool AddCore(string region, string key, StoredValue value)
        {
            EnsureDbCreated();

            try
            {
                this._locker.EnterWriteLock();

                object checkerMemoto = null;
                if (value.Checker != null)
                {
                    //真实存储在数据库中的值,是Checker的Memoto
                    checkerMemoto = value.Checker.GetMemoto();
                }

                this.Db_Add(region, key, value.Value, checkerMemoto);

                return true;
            }
            catch
            {
                return false;
            }
            finally
            {
                this._locker.ExitWriteLock();
            }
        }
예제 #2
0
        protected internal override bool AddCore(string region, string key, StoredValue value)
        {
            //由于优先使用内存中的缓存,所以添加到硬盘缓存的操作可以异步执行。
            AsyncHelper.InvokeSafe(() =>
            {
                this._disk.AddCore(region, key, value);
            });

            return this._memory.AddCore(region, key, value);
        }
        protected internal override StoredValue GetCacheItemCore(string region, string key)
        {
            EnsureDbCreated();

            try
            {
                this._locker.EnterReadLock();

                object value = null;
                object memoto = null;
                this.Db_Read(key, region, out value, out memoto);

                if (value != null)
                {
                    var result = new StoredValue();
                    result.Value = value;

                    if (memoto != null)
                    {
                        //把Memoto转换为原始的Checker
                        var checkerMemoto = memoto as CheckerMemoto;
                        result.Checker = checkerMemoto.Restore();
                    }

                    return result;
                }
            }
            catch { }
            finally
            {
                this._locker.ExitReadLock();
            }

            return null;
        }
예제 #4
0
 protected internal override bool AddCore(string region, string key, StoredValue value)
 {
     return this._regionCache.Add(key, value, new CacheItemPolicy(), region);
 }
예제 #5
0
 protected internal abstract bool AddCore(string region, string key, StoredValue value);