通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性,缓存对不经常更改的数据效果最佳,缓存生成的数据副本的返回速度可以比从原始源返回更快。ASP.NET Core 支持多种不同的缓存,最简单的缓存基于 IMemoryCache,它表示存储在 Web 服务器内存中的缓存。 在包含多个服务器的场合,要保证缓存数据的一致性,这个时候需要分布式缓存,也就是把数据从缓存内存中保存到外部缓存服务器中,例如reids,云等,内存中和分布式缓存将缓存项存储为键 / 值对。

创建.net core项目

修改Startup.cs

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
////内存中缓存,完全可以替代session
//services.AddMemoryCache(); //redis分布式缓存
services.AddDistributedRedisCache(options =>
{
options.Configuration = "127.0.0.1:32768";//redis的端口地址
options.InstanceName = "simple";
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

修改HomeController.cs

public class HomeController : Controller
{
#region 内存中缓存
//private IMemoryCache _cache; //public HomeController(IMemoryCache memoryCache)
//{
// _cache = memoryCache;
//}
#endregion private readonly IDistributedCache _cache;
public HomeController(IDistributedCache cache)
{
_cache = cache;
} public IActionResult Index()
{
return View();
} [HttpPost]
public JsonResult SetSession(string key, string value)
{
//_cache.Set(key, value); //内存中缓存 _cache.SetString(key, value);
return Json(new { success = true });
} [HttpGet]
public IActionResult GetSession(string key)
{
//string value = _cache.Get<string>(key); //内存中缓存 string value = _cache.GetString(key);
return Json(new { success = true, data = value });
}
}

Nginx负载均衡

nginx的安装这里不做讲解,下载安装就可以了,redis的安装这里也不做讲解。nginx配置如下

#user  nobody;
worker_processes ;
events {
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream; sendfile on;
#tcp_nopush on; #keepalive_timeout ;
keepalive_timeout ; #gzip on; #项目发布的地址
upstream myredis.run {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
} server {
listen 8084; #端口
server_name localhost; #网址
location / {
root html;
index index.html index.htm;
proxy_pass http://myredis.run; #需要与upstream后面的一致
}
#error_page /.html;
} }

网站配置

网址2设置,网站1同样设置,访问localhost:8084可以看到效果,刷新页面访问到网站1和网站2,两个网站里的内容改成不一样。

效果图

源码地址

https://github.com/jasonhua95/samll-project/tree/master/DistributedSession

其他分布式文章

不同的分布式文章,用actor实现分布式,Actor模型(分布式编程)

.net core中的分布式缓存和负载均衡的更多相关文章

  1. 记录core中GRPC长连接导致负载均衡不均衡问题 二,解决长连接问题

    题外话: 1.这几天收到蔚来的面试邀请,但是自己没做准备,并且远程面试,还在上班时间,再加上老东家对我还不错.没想着换工作,导致在自己工位上做算法题不想被人看见,然后非常紧张.估计over了.不过没事 ...

  2. .NET Core应用中使用分布式缓存及内存缓存

    .NET Core针对缓存提供了很好的支持 ,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中.对于分布式缓存,.NET Core提供了针对 ...

  3. ASP.NET Core中使用Cache缓存

    ASP.NET Core中使用Cache缓存 缓存介绍: 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性. 缓存对不经常更改的数据效果最佳. 缓存生成的数据副本的返回速度可以比从原始 ...

  4. MapReduce中的分布式缓存使用

    MapReduce中的分布式缓存使用 @(Hadoop) 简介 DistributedCache是Hadoop为MapReduce框架提供的一种分布式缓存机制,它会将需要缓存的文件分发到各个执行任务的 ...

  5. ASP.NET Core中的Http缓存

    ASP.NET Core中的Http缓存 Http响应缓存可减少客户端或代理对web服务器发出的请求数.响应缓存还减少了web服务器生成响应所需的工作量.响应缓存由Http请求中的header控制. ...

  6. Windows平台分布式架构实践负载均衡

    Windows平台分布式架构实践 - 负载均衡 概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Li ...

  7. Windows平台分布式架构实践 - 负载均衡(转载)

    Windows平台分布式架构实践 - 负载均衡 概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Li ...

  8. Windows平台分布式架构实践 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  9. .Net微服务实践(四)[网关]:Ocelot限流熔断、缓存以及负载均衡

    目录 限流 熔断 缓存 Header转化 HTTP方法转换 负载均衡 注入/重写中间件 后台管理 最后 在上篇.Net微服务实践(三)[网关]:Ocelot配置路由和请求聚合中我们介绍了Ocelot的 ...

随机推荐

  1. python 中list的深拷贝和浅拷贝

    注意:这里提到是list的隐式转换例如 a=[1,2,3]def test(n):n[2] = n[2]*2c=a此时是浅拷贝,当调用test(c)时,可以看到a也发生了变化c=[1,4,3]a=[1 ...

  2. SQLServer 2008 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。

    在用SQL Server 2008 在连接其他电脑的实例时,一直提示“已成功与服务器建立连接,但是在登录前的握手期间发生错误. (provider: SSL Provider, error: 0 - ...

  3. spring boot 给返回值加状态 BaseData

    JavaWeb开发中,需要给前端返回的数据加上一些头部的状态信息,来表示请求成功或失败的状态原因 一.数据添加状态信息 1.新建BaseData public class BaseData<T& ...

  4. matlab-单位圆内射线数次反射

    转载自 https://zhidao.baidu.com/question/2268408219692883828.html 先贴代码和放图,然后我再做出一点解释(其实只是觉得这个思路好厉害,所以想保 ...

  5. Flask 里的WEB表单应用

    它是HTML页面中负责数据采集的部件.表单有三个部分组成:表单标签.表单域.表单按钮.表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器. 创建模板文件 login. ...

  6. 关于学习CentOS7使用firewalld打开关闭防火墙和端口

    1.firewalld简介 firewalld是centos7的一大特点,主要有两个优点:一是支持动态更新,不需要重启服务:二就是加入了防火墙的“zone”概念. firewalld有图形界面和工具界 ...

  7. 字母导航跳转react核心代码

    componentDidMount() { this.move(); } skipToDep(e) { let dom = document.getElementById(e); // 获取要跳至的字 ...

  8. Python re.findall函数不能匹配但是notepad++能匹配

    我使用同样的表达式匹配同样的网页源码,在notepad++里面不能直接使用,需要将内容都弄到同一行中. 但是我使用 requests.get(self.url).content.decode('UTF ...

  9. Selenium分布式自动化测试平台 Standalone Server 4.0 搭建

    最新的selenium测试平台大概有这么几个组件 Selenium Standalone Server: 用来搭建远程测试平台以及分布式测试. Selenium WebDriver: 最基础的用来创建 ...

  10. NamedParameterJdbcTemplate

    NamedParameterJdbcTemplate 在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参 ...