ASP.NET Core中使用Cache缓存

缓存介绍:

通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性。 缓存对不经常更改的数据效果最佳。 缓存生成的数据副本的返回速度可以比从原始源返回更快。 应用程序应进行编写和测试到永远不会依赖于缓存的数据。

ASP.NET Core 支持多种不同的缓存。 最简单的缓存基于IMemoryCache,它表示存储在 Web 服务器内存中的缓存。 在服务器场的多个服务器运行的应用程序应确保使用内存中缓存时,都粘滞会话。 粘性会话可确保来自客户端的后续请求都转到同一台服务器。 例如,Azure Web 应用使用应用程序请求路由(ARR) 将所有的后续请求路由到同一台服务器。

Web 场中的非粘性会话需要分布式缓存以避免缓存一致性问题。 对于某些应用,分布式的缓存可以支持更高版本向外缩放比内存中缓存。 使用分布式缓存可将缓存内存卸载到外部进程。

内存中缓存可以存储任何对象;分布式缓存接口仅限于byte[]。 内存中和分布式缓存将缓存项存储为键 / 值对。

使用IMemoryCache:

1、在使用IMemoryCache之前需要添加引用,在程序包管理控制台中执行命令安装依赖包:

 PM> Install-Package Microsoft.Extensions.Caching.Memory -Version 2.2.

备注:Microsoft.AspNetCore.App(2.2.0)元包含此包,如果已经安装过Microsoft.AspNetCore.App(2.2.0),则可跳过此步骤

2、使用依赖关系注入从应用中引用的服务

在Startup类的ConfigureServices()方法中调用AddMemoryCache服务:

    public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
}

3、在构造函数中请求IMemoryCache实例

 public class LoginController : Controller
{
private IMemoryCache _cache; public LoginController(IMemoryCache memoryCache)
{
_cache = memoryCache;
}

4、使用cache缓存

①添加、读取缓存

以下代码使用cache缓存实现了 添加用户名验证缓存,在下次请求时会直接返回缓存内容,而不用重新查询,显著提高应用的性能。

 1 //检查用户名是否存在
2 public JsonResult SelectUName(string uname)
3 {
//读取缓存
var cache = _cache.Get("re_" + uname);
if (cache == null)//如果没有该缓存
{
8 //查询用户名是否存在
var re = _userdal.SelectUName(uname);
//将验证结果添加到缓存
11 _cache.Set("re_" + uname, re.Status, new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes()));
12 return Json(new { status = re.Status });
}
else//如果缓存不为空,则返回缓存内容
{
return Json(new { status = cache });
}
}
  • "re_" + uname:缓存名
  • re.Status:缓存内容
  • new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(10)):设置缓存过期时间
②清除缓存

在删除或修改用户信息后,需清除缓存

         //删除
public int Delete(int uid)
{
var re = _maindal.Delete(uid);
//删除成功之后移除验证用户名缓存
_cache.Remove("re_" + HttpContext.Session.GetString("name"));
return re;
}

备注:在缓存数据发生变化后,需清除缓存,下次请求时重新添加缓存

最新文章

  1. Spark MLlib - LFW
  2. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q109-Q111)
  3. 斯坦福公开课:Statistical Learning中做错的选择题
  4. MSSQL Server数据库的四种连接方法和sql连接字符串
  5. 深度神经网络结构以及Pre-Training的理解
  6. Mac 下安装mitmproxy
  7. matalab(绘图)
  8. url中的scheme
  9. 创建WCF的客户端
  10. TCPDUMP Command Examples
  11. 关于SVN版本控制器的问题与解决方法
  12. 在最完整的搜索提示降史上的用户交互的研究——阅读《An Eye-tracking Study of User Interactions with Query Auto Completion》
  13. VR全景是市场价值及前景
  14. (办公)mybatis工作中常见的问题(不定时更新)
  15. web框架。Django--
  16. jQuery使用(九):队列及实现原理、基于队列模拟实现animate()
  17. Docker Swarm Mode 学习笔记(聊聊 replicas)
  18. JavaScript Basic Memo
  19. 电信项目java补充类
  20. swust oj 1075

热门文章

  1. eclipse IDE for java developers下载与安装
  2. windows 下批量删除git 分支
  3. LeetCode 1216. Valid Palindrome III
  4. Linux中关于samba的几个问题
  5. Android 开发基础入门篇: 复制一个工程作为一个新的工程
  6. Django 1.11 网站分页设计
  7. Lab1:Linux内核编译及添加系统调用(详细版)
  8. Hyperledger Fabric 1.4 快速环境搭建
  9. Spring Cloud Zuul 精进
  10. python 本地时间+8小时