广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.NetCore MemoryCache使用详解
  • 488
分享到

.NetCore MemoryCache使用详解

2024-04-02 19:04:59 488人浏览 八月长安
摘要

目录引用类库MemoryCacheOptions 缓存配置MemoryCacheEntryOptions 单个缓存项配置完整代码引用类库 1.Install-Package Micr

引用类库

1.Install-Package Microsoft.Extensions.Caching.Memory

MemoryCacheOptions 缓存配置

1.ExpirationScanFrequency获取或设置对过期项的连续扫描之间的最短时间间隔

2.SizeLimit 缓存是没有大小的的,此值设置缓存的份数

3.CompactionPercentage获取或设置在超过最大大小时压缩缓存的数量,优先压缩优先级较低的缓存,0.2代表20%

services.AddMemoryCache(options => {
                // 缓存最大为100份
                //##注意netcore中的缓存是没有单位的,缓存项和缓存的相对关系
                options.SizeLimit = 2;
                //缓存满了时候压缩20%的优先级较低的数据
                options.CompactionPercentage = 0.2;
                //两秒钟查找一次过期项
                options.ExpirationScanFrequency = TimeSpan.FromSeconds(2);
            });

MemoryCacheEntryOptions 单个缓存项配置

1.AbsoluteExpiration 绝对过期时间

2.AbsoluteExpirationRelativeToNow 相对于现在的绝对过期时间

3.SlidingExpiration 滑动过期时间,在时间段范围内 缓存被再次访问,过期时间将会被重置

4.Priority 优先级

5.Size 缓存份数

public bool Add(string key, object value, int ExpirtionTime = 20)
        {
            if (!string.IsNullOrEmpty(key))
            {
                MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
                {
                    //滑动过期时间 20秒没有访问则清除
                    SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
                    //设置份数
                    Size = 1,
                    //优先级
                    Priority = CacheItemPriority.Low,
                };
                //过期回掉
                cacheEntityOps.ReGISterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
                {
                    Console.WriteLine($"回调函数输出【键:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
                });
                _cache.Set(key, value, cacheEntityOps);
            }
            return true;
        }

完整代码

1.接口

public interface ICacheService
    {
        /// <summary>
        ///  新增
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="ExpirtionTime"></param>
        /// <returns></returns>
        bool Add(string key, object value, int ExpirtionTime = 20);
        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        string GetValue(string key);
        /// <summary>
        /// 验证缓存项是否存在
        /// </summary>
        /// <param name="key">缓存Key</param>
        /// <returns></returns>
        bool Exists(string key);
        /// <summary>
        /// 移除
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        bool Remove(string key);
    }

2. 实现ICacheService

/// <summary>
    /// 缓存接口实现
    /// </summary>
    public class MemoryCacheService : ICacheService
    {
        protected IMemoryCache _cache;
        public MemoryCacheService(IMemoryCache cache)
        {
            _cache = cache;
        }
        public bool Add(string key, object value, int ExpirtionTime = 20)
        {
            if (!string.IsNullOrEmpty(key))
            {
                MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
                {
                    //滑动过期时间 20秒没有访问则清除
                    SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
                    //设置份数
                    Size = 1,
                    //优先级
                    Priority = CacheItemPriority.Low,
                };
                //过期回掉
                cacheEntityOps.RegisterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
                {
                    Console.WriteLine($"回调函数输出【键:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
                });
                _cache.Set(key, value, cacheEntityOps);
            }
            return true;
        }
        public bool Remove(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return false;
            }
            if (Exists(key))
            {
                _cache.Remove(key);
                return true;
            }
            return false;
        }
        public string GetValue(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return null;
            }
            if (Exists(key))
            {
                return _cache.Get(key).ToString();
            }
            return null;
        }
        public bool Exists(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return false;
            }
            object cache;
            return _cache.TryGetValue(key, out cache);
        }
    }

大神贴1:https://www.jb51.net/article/195870.htm

大神贴2:Https://www.jb51.net/article/252078.htm

到此这篇关于.netcore MemoryCache使用的文章就介绍到这了,更多相关.NetCore MemoryCache使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: .NetCore MemoryCache使用详解

本文链接: https://www.lsjlt.com/news/151868.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .NetCore MemoryCache使用详解
    目录引用类库MemoryCacheOptions 缓存配置MemoryCacheEntryOptions 单个缓存项配置完整代码引用类库 1.Install-Package Micr...
    99+
    2022-11-13
  • .NETCore中的HttpClientFactory类用法详解
    一、HttpClient使用 在C#中,如果我们需要向某特定的URL地址发送Http请求的时候,通常会用到HttpClient类。会将HttpClient包裹在using内部进行声明...
    99+
    2022-11-13
  • 使用memorycache作为session共享配置
    # cp /application/php/lib/php.ini{,.bak}    先备份php.ini文件 web集群session共享存储设置:默认php.i...
    99+
    2022-10-18
  • 详解如何创建一个.NETCore工程
    1、打开VS2019,点击“创建新项目”,选择“ASP.NET Core Web应用”,设置路径和文件名,选择目标框架(.net co...
    99+
    2022-11-13
  • .NetCore基础之读取配置文件详解
    目录涉及知识点安装插件读取Json文件1. 准备数据2. 创建IConfiguration接口实例3. 通过索引器进行读取4. 通过GetValue<T>()方法进行读取...
    99+
    2022-11-13
  • 解析.netcore项目中IStartupFilter使用教程
    背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host...
    99+
    2022-11-12
  • 怎么使用.NETCore操作RabbitMQ
    这篇文章将为大家详细讲解有关怎么使用.NETCore操作RabbitMQ,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是RabbitMQ?RabbitMQ是由erlang语言开发的一个基于AMQP(A...
    99+
    2023-06-15
  • 使用.NETCore创建exe应用程序
    .net core 2.0程序默认生成的是一个dll,需要通过dotnet命令来执行他。 dotnet ConsoleApp1.dll 这种方式有点类似于java程序。本身这种方式没...
    99+
    2022-11-13
  • .NetCore静态文件资源的使用
    介绍 静态文件都存储在Core Web根目录中。默认目录是<content_root>/wwwroot,但可通过 UseWebRoot方法更改访问目录。而content_...
    99+
    2022-11-13
  • 浅析.netcore中的Configuration具体使用
    目录添加其他配置文件源码解读:读取层级配置项选项模式获取配置项命名选项的使用不管是.net还是.netcore项目,我们都少不了要读取配置文件,在.net中项目,配置一般就存放在we...
    99+
    2022-11-12
  • .NETCore使用EF生成数据库出错的解决方法
    在.NET Core 项目钟(类库),使用Entity Framework,建立模型生成数据库时,失败 Could not load assembly 'xxx'. Ensure i...
    99+
    2022-11-12
  • .NetCore使用ImageSharp进行图片的生成
    目录一、源码获取二、应用1.在图片中画出文字2.在图片中画出圆形的头像3.处理二维码的BitMatrix类型ImageSharp是对NetCore平台扩展的一个图像处理方案,以往网上...
    99+
    2022-11-13
  • .NetCore使用SignalR实现斗地主游戏
    之前开内部培训,说到实时web应用这一块讲到了SignalR,我说找时间用它做个游戏玩玩,后面时间紧张就一直没安排。这两天闲了又想起这个事,考虑后决定用2天时间写个斗D主,安排了前端...
    99+
    2022-11-12
  • .NetCore中使用EFCore生成反向工程
    一、简要步骤 1、第一步 安装以下程序包 安装Entity FrameWork Core SqlServer 3.1安装Entity FrameWork Core Tools 3.1...
    99+
    2022-11-13
  • .NETCore中RabbitMQ使用死信队列的实现
    在.NET Core中,可以使用RabbitMQ.Client库来实现与RabbitMQ的交互。 RabbitMQ死信队列(Dead Letter Queue)是一种用于存储和处理无...
    99+
    2023-05-14
    .NET Core RabbitMQ死信队列 .NET Core 死信队列
  • 国产化之Arm64 CPU+银河麒麟系统安装.NetCore的步骤详解
    目录背景环境下载安装x64、Arm处理器MIPS、龙芯处理器其它依赖测试背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟,银河麒麟就是一个Linux发行版,数据库使...
    99+
    2022-11-13
  • .NETCore跨平台串口通讯使用SerialPortStream基础类库问题解决
    说明 由于.net core 2.x 中,已经找不到 serialport 库,使用需要使用第三方框架,可以直接在 Nuget 中搜索 SerialPortStream 开源地址ht...
    99+
    2022-11-12
  • 国产化之银河麒麟安装.NetCore包管理器方式(步骤详解)
    目录背景环境安装步骤1、更新软件列表2、添加Microsoft包签名密钥到受信任包签名密钥列表3、安装.netcore3.1sdk4、检查安装结果测试背景 某个项目需要实现基础软件全...
    99+
    2022-11-13
  • 运用.NetCore实例讲解RabbitMQ死信队列,延时队列
    目录一、死信队列二、延时队列三、延时消息设置不同过期时间四、延时消息用延时插件的方式实现一、死信队列 描述:Q1队列绑定了x-dead-letter-exchange(死信交换机)...
    99+
    2022-11-12
  • .NetCore使用Swagger+API多版本控制的流程分析
    目录一、Swagger基本使用二、Swagger结合版本控制本文实例环境及版本.NetCore3.1、Swagger6.1 现在的开发大部分都是前后端分离的模式了,后端提供接口,前端...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作