一、概述
缓存采用的是MemoryCache来实现。分两种:
第一种:定时缓存
第二种:实体缓存
二、使用
2.1定时缓存
2.1.1 根据需要可在PreInitialize进行配置时效性
//对所有缓存的配置
Configuration.Caching.ConfigureAll(cache =>
{
cache.DefaultSlidingExpireTime = TimeSpan.FromHours(2);
});
//对指定缓存的配置
Configuration.Caching.Configure("MyCache", cache =>
{
cache.DefaultSlidingExpireTime = TimeSpan.FromHours(8);
});
2.1.2调用缓存
private readonly ICacheManager _cacheManager;
public TasksController( ICacheManager iCacheManager)
{
_cacheManager = iCacheManager;
}
public ActionResult Index()
{
var data = _cacheManager.GetCache<string, IList<TaskDto>>("ControllerCache")
.Get("Index", () => _taskAppService.GetAllTasks());
return View(data);
}
2.2Entity Caching
Entity Caching可以缓存实体,当实体发生改变时,会自动更新缓存。
2.2.1创建缓存项
[AutoMapFrom(typeof(Task))]
public class TaskCacheItem
{
public string Title { get; set; }
public string Description { get; set; }
}
2.2.2创建缓存类接口
// 面向接口编程,用于注入
public interface ITaskCache:IEntityCache<TaskCacheItem>
{
}
2.2.3创建缓存类
//实现接口ITransientDependency就为了用于ITaskCache能自动注入
//实体缓存主要点就是:继承 EntityCache
public class TaskCache : EntityCache<Task, TaskCacheItem>, ITaskCache,ITransientDependency
{
public TaskCache(ICacheManager cacheManager, IRepository<Task> repository) : base(cacheManager, repository)
{
}
}
2.2.4演示调用实体缓存
//添加断点检测到只访问一次数据库,其余都是访问缓存
private readonly ITaskAppService _taskAppService;
public TasksController(ITaskAppService taskAppService)
{
_taskAppService = taskAppService;
}
public ActionResult GetTask()
{
var data = _taskAppService.GetTaskById(1);
return View(data);
}
三、省略
暂时不深入 redis Cache