using System;
using Microsoft.Extensions.Caching.Memory;
using System.Runtime; namespace UFX.Tools
{
public class CacheHelper
{
public static IMemoryCache _memoryCache= new MemoryCache(new MemoryCacheOptions()); /// <summary>
/// 缓存绝对过期时间
/// </summary>
///<param name="key">Cache键值</param>
///<param name="value">给Cache[key]赋的值</param>
///<param name="minute">minute分钟后绝对过期</param>
public static void CacheInsertAddMinutes(string key, object value, int minute)
{
if (value == null) return;
_memoryCache.Set(key, value, new MemoryCacheEntryOptions()
.SetAbsoluteExpiration(TimeSpan.FromMinutes(minute)));
} /// <summary>
/// 缓存相对过期,最后一次访问后minute分钟后过期
/// </summary>
///<param name="key">Cache键值</param>
///<param name="value">给Cache[key]赋的值</param>
///<param name="minute">滑动过期分钟</param>
public static void CacheInsertFromMinutes(string key, object value, int minute)
{
if (value == null) return;
_memoryCache.Set(key, value, new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromMinutes(minute)));
} /// <summary>
///以key键值,把value赋给Cache[key].如果不主动清空,会一直保存在内存中.
/// </summary>
///<param name="key">Cache键值</param>
///<param name="value">给Cache[key]赋的值</param>
public static void CacheInsert(string key, object value)
{
_memoryCache.Set(key, value);
} /// <summary>
///清除Cache[key]的值
/// </summary>
///<param name="key"></param>
public static void CacheNull(string key)
{
_memoryCache.Remove(key);
} /// <summary>
///根据key值,返回Cache[key]的值
/// </summary>
///<param name="key"></param>
public static object CacheValue(string key)
{
return _memoryCache.Get(key);
} #region 缓存文档
//public IActionResult Index()
//{
// string cacheKey = "key";
// string result;
// if (!_memoryCache.TryGetValue(cacheKey, out result))
// {
// result = $"LineZero{DateTime.Now}";
// _memoryCache.Set(cacheKey, result);
// //设置相对过期时间2分钟
// _memoryCache.Set(cacheKey, result, new MemoryCacheEntryOptions()
// .SetSlidingExpiration(TimeSpan.FromMinutes(2)));
// //设置绝对过期时间2分钟
// _memoryCache.Set(cacheKey, result, new MemoryCacheEntryOptions()
// .SetAbsoluteExpiration(TimeSpan.FromMinutes(2)));
// //移除缓存
// _memoryCache.Remove(cacheKey);
// //缓存优先级 (程序压力大时,会根据优先级自动回收)
// _memoryCache.Set(cacheKey, result, new MemoryCacheEntryOptions()
// .SetPriority(CacheItemPriority.NeverRemove));
// //缓存回调 10秒过期会回调
// _memoryCache.Set(cacheKey, result, new MemoryCacheEntryOptions()
// .SetAbsoluteExpiration(TimeSpan.FromSeconds(10))
// .RegisterPostEvictionCallback((key, value, reason, substate) =>
// {
// Console.WriteLine($"键{key}值{value}改变,因为{reason}");
// }));
// //缓存回调 根据Token过期
// var cts = new CancellationTokenSource();
// _memoryCache.Set(cacheKey, result, new MemoryCacheEntryOptions()
// .AddExpirationToken(new CancellationChangeToken(cts.Token))
// .RegisterPostEvictionCallback((key, value, reason, substate) =>
// {
// Console.WriteLine($"键{key}值{value}改变,因为{reason}");
// }));
// cts.Cancel();
// }
// ViewBag.Cache = result;
// return View();
//}
#endregion
}
}

不要忘记先下载:Microsoft.Extensions.Caching.Memory;

Asp.net Core CacheHelper 通用缓存帮助类的更多相关文章

  1. ASP.NET Core ResponseCache进行缓存操作

    前言 本章将介绍客户端缓存将介绍浏览器缓存和服务端缓存,使用浏览器缓存将减少对web服务器的请求次数,同时可以提升性能,避免重复的运算浪费. ASP.NET Core对于HTTP缓存分为两种: 客户端 ...

  2. ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存

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

  3. ASP.Net Core使用分布式缓存Redis从入门到实战演练

    一.课程介绍 人生苦短,我用.NET Core!缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力.  所以经常要用到且不会频繁改变且被用户共享的 ...

  4. ASP.NET Core 中的缓存

    目录 缓存的基本概念 缓存原理 缓存设计 分布式缓存 Memcache 与 Redis 的比较 缓存穿透,缓存击穿,缓存雪崩解决方案 数据一致性 使用内置 MemoryCache 使用分布式缓存 Re ...

  5. 第十二节:Asp.Net Core 之分布式缓存(SQLServer和Redis)

    一. 整体说明 1. 说明 分布式缓存通常是指在多个应用程序服务器的架构下,作为他们共享的外部服务共享缓存,常用的有SQLServer.Redis.NCache.     特别说明一下:这里的分布式是 ...

  6. 第十一节:Asp.Net Core 之内容缓存(IMemoryCache)

    1. 整体说明 ASP.NET Core 支持多种不同的缓存,最简单的缓存基于 IMemoryCache,它表示存储在 Web 服务器内存中的缓存,内存缓存可以存储任何对象,存储形式键值对,需要 .n ...

  7. asp.net core 系列 2 启动Startup类介绍

    一.Startup类 ASP.NET Core 应用是一个控制台应用,它在其 Program.Main 方法中创建 Web 服务器.其中Main方法是应用的托管入口点,Main 方法调用 WebHos ...

  8. asp.net core刷新css缓存

    在非spa程序开发的时候.css经常会因为浏览器的缓存机制导致不刷新. 很多前端为了应对这个问题,都会引入webpack或者gulp等工具来处理css缓存的问题. 但是作为一个偏服务器端的程序员来说. ...

  9. 在Asp.Net Core 3.0中如何使用 Newtonsoft.Json 库序列化数据

    在.Net Core 3.0中 内置了一套Json序列化/反序列化方案,默认可以不再依赖,不再支持   Newtonsoft.Json. 但是.NET Core 3.0 System.Text.Jso ...

随机推荐

  1. C# 正则表达式测试工具与分享窗体自适应类

    放假刚回来,自己打算写一个正则表达式的测试工具,因为上次在网上用的一个在线正则表示测试工具就 没有很好的服务自己的,所以才有了现在的想法,想写一个C#开发者用的正则表达式测试工具!期间由于最大化时控件 ...

  2. JS判断手机访问跳转到手机站

    这里提供了六种让手机端访问网站跳转到手机端的方法: 第一种: <script> if(navigator.platform.indexOf('Win32')!=-1){ //pc //wi ...

  3. sql语句对数据库表进行加锁和解锁

    锁是数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性. 我们知道,多个用户能够同时操纵同一个数据库中的数据,会发生数据不一致现象.即如果没有锁定且多个用户同时访问一个数据库 ...

  4. 0001-Weekly Meeting on 13th and 20th March, 2015

    13th March, 2015 (1) Nearest Neighbors Using Compact Sparse Coding  ->appearing in ICML2014       ...

  5. C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)

    前面三篇文章<C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)>.<C++11 并发指南六( <atomic> 类型详解二 std::at ...

  6. [51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]

    这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c /*--------------------- ...

  7. [JS5] 利用onload执行脚本

    <html> <head> <title>利用onload执行脚本</title> <SCRIPT TYPE="text/JavaScr ...

  8. eclipse运行maven的jetty插件内存溢出

    系统运行在Maven中的Jetty插件下,当在Eclipse运行clean jetty:run时,系统提示OutOfMemoryError: PermGen space.解决办法:设置run as - ...

  9. JNI技术基础(1)——从零开始编写JNI代码

    众所周知,Java程序的最大特点就是其跨平台的特性,编写的上层应用程序可以不加任何修改甚至不用重新编译而运行于不同的平台上,然而,Java本身也存着这一个弊端,那就是性能上相对要差一些,在对性能要求比 ...

  10. web前端基础——jQuery编程基础

    1 jQuery简介 jQuery是一个兼容多浏览器的JavaScript库,核心理念是write less,do more(写得更少,做得更多).它对JavaScript进行了封装,使开发更便捷,并 ...