首页 > 编程语言 >C#.NET WINFORM 缓存 System.Runtime.Caching MemoryCache

C#.NET WINFORM 缓存 System.Runtime.Caching MemoryCache

时间:2023-08-18 13:45:27浏览次数:44  
标签:slidingExpiration MemoryCache C# System key policy new null

C#.NET WINFORM 缓存 System.Runtime.Caching MemoryCache

 

工具类:

using System;
using System.Runtime.Caching;

namespace CommonUtils
{
    /// <summary>
    /// 基于MemoryCache的缓存辅助类
    /// </summary>
    public static class MemoryCacheHelper
    {

        public static void SetCache<T>(string key, T cacheItem, TimeSpan? slidingExpiration = null, DateTime? absoluteExpiration = null)
        {
            if (String.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentException("Invalid cache key");
            }
            if (cacheItem == null)
            {
                throw new ArgumentNullException("cacheItem null ");
            }
            if (slidingExpiration == null && absoluteExpiration == null)
            {
                throw new ArgumentException("Either a sliding expiration or absolute must be provided");
            }
            MemoryCache.Default.Remove(key);

            var item = new CacheItem(key, cacheItem);
            var policy = CreatePolicy(slidingExpiration, absoluteExpiration);
            MemoryCache.Default.Add(item, policy);
        }

        public static T GetCache<T>(string key)
        {
            if (String.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentException("Invalid cache key");
            }
            return (T)MemoryCache.Default[key];
        }

        /// <summary>
        /// 移除缓存
        /// </summary>
        /// <param name="key"></param>
        public static void RemoveCache(string key)
        {
            MemoryCache.Default.Remove(key);
        }

        private static CacheItemPolicy CreatePolicy(TimeSpan? slidingExpiration, DateTime? absoluteExpiration)
        {
            var policy = new CacheItemPolicy();

            if (absoluteExpiration.HasValue)
            {
                policy.AbsoluteExpiration = absoluteExpiration.Value;
            }
            else if (slidingExpiration.HasValue)
            {
                policy.SlidingExpiration = slidingExpiration.Value;
            }

            policy.Priority = CacheItemPriority.Default;

            return policy;
        }
    }
}

使用:

string cacheKey = "person_key";
                MemoryCacheHelper.SetCache<Person>(cacheKey,
                   new Person() { Id = Guid.NewGuid(), Name = "wolfy" }
                   , new TimeSpan(0, 30, 0));

                Console.WriteLine("获取缓存中数据");
                Person p2 = MemoryCacheHelper.GetCache<Person>(cacheKey);
                if (p2 != null)
                {
                    Console.WriteLine(p2.ToString());
                }
                MemoryCacheHelper.RemoveCache(cacheKey);
                Person p3 = MemoryCacheHelper.GetCache<Person>(cacheKey);
                if (p3 != null)
                {
                    Console.WriteLine(p3.ToString());
                }
                Console.Read();

--

标签:slidingExpiration,MemoryCache,C#,System,key,policy,new,null
From: https://www.cnblogs.com/runliuv/p/17640254.html

相关文章

  • TedNet:一个用于张量分解网络的Pytorch工具包
    摘要张量分解网络(TensorDecompositionNetworks,TDNs)因其固有的紧凑架构而流行。为了给更多的研究人员提供一种灵活的方式来利用TDNs,我们提出了一个名为TedNet的Pytorch工具包。TedNet实现了5种张量分解(即,CANDECOMP/PARAFAC(CP)、Block-TermTucker(BTT)、Tucker-2、TensorTrain(TT)和......
  • 【工具类】JacksonUtils
     packagecom.ryxx.util;importcom.fasterxml.jackson.annotation.JsonInclude;importcom.fasterxml.jackson.core.JsonParser;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.core.type.TypeReference;importcom.faste......
  • 导出运营数据Excel报表_需求分析和设计
       ......
  • XACT_ABORT示例一则
    CREATEPROCdbo.proc1ASSETXACT_ABORTON;BEGINTRY BEGINTRAN--body; COMMITENDTRYBEGINCATCH DECLARE @ErrorNumberint,@ErrorSeverityint,@ErrorStateint,@ErrorMessagenvarchar(2048); IF......
  • Mcuzone CM4_WiFi6 WLAN Pi扩展板,支持8265 AX200 AX210 MT7921 MT7961 RTL8822
    关键词:树莓派CM4  WLANPi  WLANPi英特尔8265AX200AX210MT7921MT7961RTL8822ScannerWiFi6Mcuzone野芯科技概述:WLANPi是一款用途很广泛的WiFi工具,可以测试网速,可以对WiFi信号进行频谱分析。WLANPi可以在很多硬件平台上运行,其中最典型的就是树莓派平台。......
  • Docker方式安装Archery
    Docker方式安装Archery基本环境信息OS:RHELServer7.8_x86_64()archery版本:hhyo/Archery-1.9.1Python版本:3.9.10准备docker环境1.安装Docker可以执行命令来获取安装脚本:curl-fsSLhttps://get.docker.com-oget-docker.sh|sudosh也可以直接访问https://get.docker.co......
  • 【springMVC】全局json序列化配置
    1.概述现在我们进行web开发,一般都要设计成RESTful风格的API,通过json格式的数据进行交互。但是前端传入的json数据如何被解析成Java对象作为API入参,后端返回结果又如何将Java对象解析成json格式数据返回给前端,在整个数据流转过程中,这是由谁来完成的呢?2.HttpMessageConve......
  • C#调用微软api文本转语音
    目录1.注册微软云服务,搭建文本转语音标准应用(每月500万字免费好像)2.Visualstudio使用nuget给程序安装Microsoft.CognitiveServices.Speech框架3.引用命名空间4.文本转语音参考代码5.文本转语音下载到本地参考代码1.注册微软云服务,搭建文本转语音标准应用(每月500万字免费好......
  • SpringMVC-1-解密Spring MVC:构建优雅、灵活的Web应用的秘诀
    今日目标能够编写SpringMVC入门案例了解SpringMVC原理1.SpringMVC介绍1.1SpringMVC概述思考:SpringMVC框架有什么优点?SpringMVC是一种基于Java实现MVC模型的轻量级Web框架优点使用简单,开发便捷(相比于Servlet)天然的与Spring框架集成(如IOC容器、AOP等)请求处理简化:支......
  • python使用netmiko连接交换机绑定mac
    环境背景python3.8,华为交换机每次手动登录交换机再进行绑定操作,太过机械化啊,本着懒人原则,写一个脚本真不是事情脚本fromnetmikoimportConnectHandlerimporttimedefbing_mac(mac):sw_ip='10.10.10.10'#交换机ipusername='admin'#交换机账号......