忻州师范学院论坛:.Net Core 『跨平台开发实战』-服务器缓存:{内}陆缓存、分布式缓存、 自定义缓存[

admin 7个月前 (04-07) 科技 51 0

.Net Core 「跨平」台开发实战-「服务」{器「{缓‘存’}」}:{内陆缓}‘存’、‘分布式「{缓‘存’}」’、‘自界说「{缓‘存’}」’

1、“概述”

   系统性能优[化的第一步(就是{《使用》})「{缓‘存’}」!(什么是缓)‘存’?(「{缓‘存’}」是一种效果),〖就〗是把数据效果‘存’「{「〖在〗」}」某《个介》质中,〖下次直接重用〗。 凭据二八原则[,80%【的请求都集中「{「〖在〗」}」】20%《的数据上》,“「{缓‘存’}」就”是把20%「的数据‘存’起来」,“直接复用”。Web 系统「{缓‘存’}」主要分为[客户【端缓】‘存’、CDN「{缓‘存’}」、反向署理「{缓‘存’}」及「服务」{器「{缓‘存’}」},而「服务」{器「{缓‘存’}」}又分类{内陆缓}‘存’、‘分布式「{缓‘存’}」’。‘本节将给人人分 享[’.Net Core 〖跨〗平台开发 「服务」{器「{缓‘存’}」}开发实战。

2、《「【项】目」《建》立》-ShiQuan.WebTest

  -》《建》立Asp.Net Core3.1 Web「【项】目」-shiquan.webtest,【添加默认控制器】-DefaultController 。

  ‘开发环境{《使用》}’VS2019 aps.net core 3.1  

  

   

  

  -》Action Index “方”式

        public IActionResult Index()
        {
            /*Web 「服务」器响应请求时,设置「{缓‘存’}」Cache-Control。{单}元为秒。*/
            //base.HttpContext.Response.Headers[HeaderNames.CacheControl] = "public,max-age=600";//no-cache

            base.ViewBag.Now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff");
            base.ViewBag.Url = $"{base.Request.Scheme}://{base.Request.Host}";//「浏」览器地址
            base.ViewBag.InternalUrl = $"{base.Request.Scheme}://:{this._iConfiguration["port"]}";//(应用程序地址)
            return View();
        }

  -》「{「〖在〗」}」Startup 〖文件的〗Configure,{《使用》}UseStaticFile 【指定当前路】径。

            //{《使用》}UseStaticFile 【指定当前路】径
            app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot"))
            });

  -》(复制)wwwroot (〖目录〗及)文件到debug\bin 〖目录〗。

   忻州师范学院论坛:.Net Core 『跨平台开发实战』-服务器缓存:{内}陆缓存、分布式缓存、 自定义缓存[ 第1张

  -》「{「〖在〗」}」Program〖文件中〗设置命令行获取‘参数’。

        public static void Main(string[] args)
        {
            //设置命令行获取‘参数’
            new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddCommandLine(args)//支持命令行‘参数’
                .Build();

            CreateHostBuilder(args).Build().Run();
        }

  -》{《使用》}控制台, 启动[Web「【项】目」-dotnet shiquan.webtest.dll --urls=http://*:5177 --port=5177。

   忻州师范学院论坛:.Net Core 『跨平台开发实战』-服务器缓存:{内}陆缓存、分布式缓存、 自定义缓存[ 第2张

  -》【《《运行效果》》】

  忻州师范学院论坛:.Net Core 『跨平台开发实战』-服务器缓存:{内}陆缓存、分布式缓存、 自定义缓存[ 第3张

3、{内陆缓}‘存’-MemoryCache

  下面我们来举行{内陆缓}‘存’-MemoryCache(的开发),【首先安】装MemoryCache《 安[装包》

  忻州师范学院论坛:.Net Core 『跨平台开发实战』-服务器缓存:{内}陆缓存、分布式缓存、 自定义缓存[ 第4张

  -》Startup 『设置添』加MemoryCache的{《使用》}。

   忻州师范学院论坛:.Net Core 『跨平台开发实战』-服务器缓存:{内}陆缓存、分布式缓存、 自定义缓存[ 第5张

  -》{内陆缓}‘存’的挪用

《原来》rollup〖这么〗简单之 tree shaking<篇>

 

            var key = "defaultcontroller_info";
            # region 「服务」器{内陆缓}‘存’-MemoryCache
            {
                var time = string.Empty;
                if(this._iMemoryCache.TryGetValue(key,out time) == false)
                {
                    time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff");
                    this._iMemoryCache.Set(key, time);
                }
                base.ViewBag.MemoryCacheNew = time;
            }
            #endregion

 

  -》Info 《页面内容》

@{
    ViewData["Title"] = "Home Page";
}

    <div>
        <h1>Index</h1>
        <h2>「浏」览器地址:@base.ViewBag.Url</h2>
        <h2>「服务」器地址:@base.ViewBag.InternalUrl</h2>
        <h2><『后台』>Action『{ ‘【 时间[】’[}』:@base.ViewBag.Now</h2>
        <h2>MemoryCache『{ ‘【 时间[】’[}』:@base.ViewBag.MemoryCacheNew</h2>
        <h2>RedisCache『{ ‘【 时间[】’[}』:@base.ViewBag.RedisCacheNow</h2>
        <h2>CustomCache『{ ‘【 时间[】’[}』:@base.ViewBag.CustomCacheNow</h2>
        <h2>{前端}View『{ ‘【 时间[】’[}』:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")</h2>
    </div>

 

  -》【《《运行效果》》】,<『后台』>Action及{前端}View『{ ‘【 时间[】’[}』,「每次刷新」都市更新,而内‘存’「{缓‘存’}」首次加载后,都将保留原有『{ ‘【 时间[】’[}』。

  忻州师范学院论坛:.Net Core 『跨平台开发实战』-服务器缓存:{内}陆缓存、分布式缓存、 自定义缓存[ 第6张

4、‘分布式「{缓‘存’}」’-DistributedCache

  我们{《使用》}Redis作为‘分布式「{缓‘存’}」’『数据库』,「首先」下载安装设置Redis『数据库』,Redis『数据库』默认端【口】:6379。

  忻州师范学院论坛:.Net Core 『跨平台开发实战』-服务器缓存:{内}陆缓存、分布式缓存、 自定义缓存[ 第7张

  -》「{「〖在〗」}」.Net core 「【项】目」中添加Microsoft.Extensions.Caching.Redis 《 安[装包》

  忻州师范学院论坛:.Net Core 『跨平台开发实战』-服务器缓存:{内}陆缓存、分布式缓存、 自定义缓存[ 第8张

   -》「{「〖在〗」}」Startup文件中设置‘分布式「{缓‘存’}」’

            /*增添‘分布式「{缓‘存’}」’Redis*/
            services.AddDistributedRedisCache(option => {
                option.Configuration = "127.0.0.1:6379";
                option.InstanceName = "DistributedRedisCache";
            });

   -》控制器挪用‘分布式「{缓‘存’}」’,(实现)内容保留与读取,「{「〖在〗」}」页面中显示。

            #region ‘分布式「{缓‘存’}」’-解决「{缓‘存’}」「{「〖在〗」}」差别实例共 享[‘问题’
            {
                var time = this._iRedisCache.GetString(key);
                if (string.IsNullOrEmpty(time))
                {
                    time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff");
                    this._iRedisCache.SetString(key, time, new DistributedCacheEntryOptions()
                    {
                        AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(120) //过时『{ ‘【 时间[】’[}』
                    }); 
                }
                base.ViewBag.RedisCacheNow = time;
            }
            #endregion

  -》【《《运行效果》》】,Redis 「{缓‘存’}」「{「〖在〗」}」多个客户端中也「将不会」改变。

 

5、‘自界说「{缓‘存’}」’-CustomCache

  {我们来举行一次重}复造“轮子”,实现类似内‘存’「{缓‘存’}」-MemoryCache《“的效果”》。「首先我们界说」自界说接【口】-ICustomCache,然后实现‘自界说「{缓‘存’}」’CustomCache。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ShiQuan.WebTest.Helpers
{
    /// <summary>
    /// ‘自界说「{缓‘存’}」’接【口】
    /// </summary>
    public interface ICustomCache
    {
        void Add(string key, object value);
        T Get<T>(string key);
        bool Exists(string key);
        void Remove(string key);
    }
    /// <summary>
    /// ‘自界说「{缓‘存’}」’
    /// </summary>
    public class CustomCache:ICustomCache
    {
        private readonly Dictionary<string, object> keyValues = new Dictionary<string, object>();
        /// <summary>
        /// ‘增添内容’
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public void Add(string key,object value)
        {
            this.keyValues.Add(key, value);
        }
        /// <summary>
        /// <获取值>
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public T Get<T> (string key)
        {
            return (T)this.keyValues[key];
        }
        /// <summary>
        /// 判断是否‘存’「{「〖在〗」}」
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool Exists(string key)
        {
            return this.keyValues.ContainsKey(key);
        }
        /// <summary>
        /// 『移除值』
        /// </summary>
        /// <param name="key"></param>
        public void Remove(string key)
        {
            this.keyValues.Remove(key);
        }
    }
}

  -》「【项】目」注册接【口】及实现

            /*增添‘自界说「{缓‘存’}」’*/
            //services.AddTransient<ICustomCache, CustomCache>();//〖历程实例模〗式
            services.AddSingleton<ICustomCache, CustomCache>(); //《程序单例模式》

  -》控制器挪用‘自界说「{缓‘存’}」’,(实现)内容保留与读取,「{「〖在〗」}」页面中显示。

            #region ‘自界说「{缓‘存’}」’
            {
                var time = string.Empty;
                if (this._iCustomCache.Exists(key) == false)
                {
                    time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff");
                    this._iCustomCache.Add(key, time);
                }
                time = this._iCustomCache.Get<String>(key);
                base.ViewBag.CustomCacheNow = time;
            }
            #endregion

 

  从运行《“的效果”》,〖我们可以看到〗,到达类似内‘存’「{缓‘存’}」MemoryCache《“的效果”》。

 

   至此[,.net core 〖跨〗平台开发「服务」{器「{缓‘存’}」}『开发实战先容完』毕,“有欠妥地方”,‘迎接指正’!

,

阳光「{「〖在〗」}」线

阳光「{「〖在〗」}」线www.sinotter.com(原诚信「{「〖在〗」}」线)现已开放阳光「{「〖在〗」}」线手机(版)下载。阳光「{「〖在〗」}」线游戏公平、“公开”、“公正”, 用实力[赢取信誉。

网友评论

  • (*)

最新评论

文章归档

站点信息

  • 文章总数:642
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1010
  • 评论总数:267
  • 浏览总数:7544