.NET Core中的分布式缓存和负载均衡

2019 年 7 月 14 日 DotNet

(给DotNet加星标,提升.Net技能


转自:lingfeng95
cnblogs.com/zhao123/p/10531927.html

通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性,缓存对不经常更改的数据效果最佳,缓存生成的数据副本的返回速度可以比从原始源返回更快。


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 1;
events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;
#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 404 /404.html;
}
}


网站配置


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



效果图




源码地址


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


推荐阅读

(点击标题可跳转阅读)

解决ASP.NET站点首次访问慢的方法

.NET轻松处理亿级数据ClickHouse介绍

.NET轻松处理亿级数据ClickHouse数据操作


看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

好文章,我在看❤️

登录查看更多
0

相关内容

.NET 框架(.NET Framework) 是由微软开发,一个致力于敏捷软件开发、快速应用开发、平台无关性和网络透明化的软件开发平台。
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
微信小程序支持webP的WebAssembly方案
前端之巅
19+阅读 · 2019年8月14日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
一天精通无人中级篇:遥控器协议 S-BUS
无人机
51+阅读 · 2018年12月20日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
优化哈希策略
ImportNew
5+阅读 · 2018年1月17日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
Arxiv
101+阅读 · 2020年3月4日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
4+阅读 · 2019年2月8日
Arxiv
5+阅读 · 2018年4月22日
Arxiv
5+阅读 · 2015年9月14日
VIP会员
相关VIP内容
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
相关资讯
微信小程序支持webP的WebAssembly方案
前端之巅
19+阅读 · 2019年8月14日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
一天精通无人中级篇:遥控器协议 S-BUS
无人机
51+阅读 · 2018年12月20日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
优化哈希策略
ImportNew
5+阅读 · 2018年1月17日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
Top
微信扫码咨询专知VIP会员