目录
public class AbpMemoryCache : CacheBase { private MemoryCache _memoryCache; // 初始化 MemoryCahce public AbpMemoryCache(string name) : base(name) { _memoryCache = new MemoryCache(new OptionsWrapper<MemoryCacheOptions>(new MemoryCacheOptions())); } // 从 MemoryCahce 取得缓存 public override object GetOrDefault(string key) { return _memoryCache.Get(key); } // 设置缓存 public override void Set(string key, object value, TimeSpan? slidingExpireTime = null, TimeSpan? absoluteExpireTime = null) { // 值为空的时候抛出异常 if (value == null) { throw new AbpException("Can not insert null values to the cache!"); } if (absoluteExpireTime != null) { _memoryCache.Set(key, value, DateTimeOffset.Now.Add(absoluteExpireTime.Value)); } else if (slidingExpireTime != null) { _memoryCache.Set(key, value, slidingExpireTime.Value); } else if (DefaultAbsoluteExpireTime != null) { _memoryCache.Set(key, value, DateTimeOffset.Now.Add(DefaultAbsoluteExpireTime.Value)); } else { _memoryCache.Set(key, value, DefaultSlidingExpireTime); } } // 删除缓存 public override void Remove(string key) { _memoryCache.Remove(key); } // 清空缓存 public override void Clear() { _memoryCache.Dispose(); _memoryCache = new MemoryCache(new OptionsWrapper<MemoryCacheOptions>(new MemoryCacheOptions())); } public override void Dispose() { _memoryCache.Dispose(); base.Dispose(); } }可以看到在
AbpMemoryCache内部就是将MemoryCahce进行了一个二次包装而已。其实可以看到这些缓存超期时间之类的参数 Abp 自己并没有用到,而是将其传递给具体的缓存实现来进行管理。
2.2.3 Redis 缓存的实现
Abp.Redis 库使用的是
StackExchange.Redis库来实现对 Redis 的通讯的,其实现为AbpRedisCache,里面也没什么好说的,如同内存缓存一样,实现那些抽象方法就可以了。public class AbpRedisCache : CacheBase { private readonly IDatabase _database; private readonly IRedisCacheSerializer _serializer; public AbpRedisCache(关键字:
青岛软件培训
可能你正在寻找一家靠谱的IT培训机构,
渴望突破职业瓶颈,
找一份得体的工作。
恰巧万码学堂正在寻找像你这样不甘平凡的追光者!
我们拒绝纸上谈兵,直接参与真实开发流程!
现在行动,未来可期
立即拨打0532-85025005,预约免费职业规划咨询
前20名咨询者赠送《2025高薪技术岗位白皮书》!
你不是在报名课程,而是在投资五年后的自己!
