这样很大一个缺点是每一个缓存的数据都需要手动到指定业务逻辑中添加缓存处理,代码后期不好维护,缓存功能的开启和关闭也不好控制,需要修改代码进行满足。
面向切面编程,无需嵌入多余代码到业务中
通过面向切面的思想,以动态代理的原理拦截方法,在方法前后进行处理,如下:
缓存逻辑直接放在拦截器中处理即可,如下:
注册服务时,开启Autofac的面向切面功能即可
运行看效果,第二次都是从缓存中获取数据,美美哒:
注:推荐使用面向切面的形式进行处理,这样缓存功能可插拔,代码维护性也好。
2.WebApiDemo(项目名称为:MemoryCacheWebApiDemo)在WebApi中使用就比较简单啦,关于MemoryCache的依赖包已经集成在框架中,如果需要使用,直接注册服务就可以用啦;通常在WebApi中进行缓存处理的方式有三种:
中间件形式:通过自定义中间件进行缓存逻辑操作;
过滤器形式:使用MVC相关过滤器进行缓存逻辑操作;
业务层面向切面形式:面向切面的方式,在业务层做缓存,集成Autofac即可,和控制台Demo的面向切面一样;
这里就用过滤器的形式进行Demo演示,走起来~~~
2.1 编写过滤器缓存如果能在最前面处理,就优先在最前面,所以使用的ResourceFilter过滤器;关于过滤器之前写过一篇文章很详细(),这里就不赘述了。
然后在Startup.cs中注册服务和将自定义过滤器注册即可,如下:
然后启动运行,多次请求调试看看效果(小伙伴自己在过滤器中调试即可);
在WebApi中也可以使用业务层面向切面的方式进行相关业务处理,集成Autofac即可;小伙伴可以参照这篇文章()。 关于AOP面向切面编程这块,后续单独整理一篇分享;
源码地址:https://github.com/zyq025/DotNetCoreStudyDemo
总结在一些开发项目中,可能会使用Dictionary进行数据缓存,如果是这样,可以尝试使用MemoryCache,性能合理利用CPU,而且还是线程安全的;另外在高并发场景,可以用其作为多级缓存,因为MemoryCache还能设置过期时间,搭配Redis配合使用,效果杠杠的。
一个被程序搞丑的帅小伙,关注"Code综艺圈",跟我一起学~~~