ASP.NET Core MemoryCache 缓存

2023-05-16

ASP.NET Core 中的缓存内存(MemoryCache)
ASP.NET Core 中的缓存内存  
ASP.NET Core 中的分布式缓存(SQL Server 和 Redis 分布式缓存)  
响应缓存在 ASP.NET Core 中的中间件  
github 地址  
IMemoryCache Interface  
Memcached 教程 | 菜鸟教程  

1、IMemoryCache 接口【方法】
CreateEntry:在缓存中创建或覆盖项。
Remove:删除与给定键关联的对象。
TryGetValue:获取与此键关联的项(如果存在)。

2、IMemoryCache 接口【扩展方法】
Get(IMemoryCache, Object)
Get<TItem>(IMemoryCache, Object)
GetOrCreate<TItem>(IMemoryCache, Object, Func<ICacheEntry,TItem>)
GetOrCreateAsync<TItem>(IMemoryCache, Object, Func<ICacheEntry,Task<TItem>>)
Set<TItem>(IMemoryCache, Object, TItem)
Set<TItem>(IMemoryCache, Object, TItem, MemoryCacheEntryOptions)
Set<TItem>(IMemoryCache, Object, TItem, IChangeToken)
Set<TItem>(IMemoryCache, Object, TItem, DateTimeOffset)
Set<TItem>(IMemoryCache, Object, TItem, TimeSpan)
TryGetValue<TItem>(IMemoryCache, Object, TItem)

3、MemoryCacheOptions 类
CompactionPercentage:获取或设置在超出最大大小时要压缩的缓存量。
ExpirationScanFrequency:获取或设置连续扫描过期项之间的最小时间长度。
SizeLimit:获取或设置缓存的最大大小。

4、属性
Key:缓存key
Value:缓存值
AbsoluteExpiration:绝对过期时间,为null则条件无效
AbsoluteExpirationRelativeToNow:相对当前时间的绝对过期时间(使用TimeSpan),为null条件无效
SlidingExpiration:滑动过期时间
ExpirationTokens:提供用来自定义缓存过期
PostEvictionCallbacks:缓存失效回调
Priority:缓存项优先级(在缓存满载的时候绝对清除的顺序)
Size:代表缓存数据的大小,在内存缓存中一般为null
SetSize:12
SizeLimit:缓存的大小
*
5、Memory
IMemoryCache Interface  
方法
CreateEntry(Object):在缓存中创建或覆盖项。
Remove(Object):删除与给定键关联的对象。
TryGetValue(Object, Object):获取与此键关联的项(如果存在)。
扩展方法
Get(IMemoryCache, Object)
Get<TItem>(IMemoryCache, Object)
GetOrCreate<TItem>(IMemoryCache, Object, Func<ICacheEntry,TItem>)
GetOrCreateAsync<TItem>(IMemoryCache, Object, Func<ICacheEntry,Task<TItem>>)
Set<TItem>(IMemoryCache, Object, TItem)
Set<TItem>(IMemoryCache, Object, TItem, MemoryCacheEntryOptions)
Set<TItem>(IMemoryCache, Object, TItem, IChangeToken)
Set<TItem>(IMemoryCache, Object, TItem, DateTimeOffset):创建或覆盖缓存中的指定条目,并设置具有绝对过期日期的值。
Set<TItem>(IMemoryCache, Object, TItem, TimeSpan)
TryGetValue<TItem>(IMemoryCache, Object, TItem)
*
MemoryCacheOptions
MemoryCacheOptions.SizeLimit 属性:获取或设置缓存的最大大小。
*
MemoryCacheEntryOptions
MemoryCacheEntryOptions.Size 属性:获取或设置缓存项值的大小。
*
MemoryCacheEntryExtensions
MemoryCacheEntryExtensions.SetSize 方法:设置缓存项值的大小。
*
5、注意
注意:静态构造函数只会实例化一次;【参考MemoryCacheHelper.cs】
注意:在【泛型类】中,不同的类型,会单独维护自己的类,比如MemoryCacheHelper<string>已经走了静态构造函数,MemoryCacheHelper<int>会再次走构造函数;【参考MemoryCacheHelper.cs】

6、Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddMemoryCache();
}

7、Controller.cs

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;

namespace Asset.WebAPI.Controllers
{
    [ApiVersion("1.0")]
    [ApiVersion("0.1")]
    [Route("v{version:apiVersion}/values")]
    public class ValuesController : ControllerBase
    {
        private readonly IMemoryCache _memoryCache;

        public ValuesController(IMemoryCache memoryCache)
        {
            _memoryCache = memoryCache;
        }

        [HttpGet("set")]
        public IActionResult Set()
        {
            _memoryCache.Set<string>("timestamp", DateTime.Now.ToString());

            _memoryCache.Set<string>("timestamp", DateTime.Now.ToString(), new MemoryCacheEntryOptions
            {
                AbsoluteExpiration = DateTime.Now.AddMinutes(1),
                SlidingExpiration = TimeSpan.FromMinutes(1)
            });

            string timestamp = _memoryCache.GetOrCreate<string>("timestamp", entry =>
            {
                return DateTime.Now.ToString();
            });
            return Ok();
        }

        [HttpGet("get")]
        public IActionResult Get()
        {
            string timestamp = _memoryCache.Get<string>("timestamp");
            string timestampNew = string.Empty;

            if (!_memoryCache.TryGetValue<string>("timestamp", out timestampNew))
                _memoryCache.Set<string>("timestamp", DateTime.Now.ToString());

            return Ok();
        }

        [HttpGet("get_async")]
        public async Task<IActionResult> GetAsync()
        {
            var cacheEntry = await _memoryCache.GetOrCreateAsync("timestamp", entry =>
            {
                entry.SlidingExpiration = TimeSpan.FromSeconds(3);
                return Task.FromResult(DateTime.Now);
            });

            return Ok(new { code = 200, data = cacheEntry });
        }

        [HttpGet("remove")]
        public IActionResult Remove()
        {
            _memoryCache.Remove("timestamp");
            return Ok();
        }
    }
}

8、MemoryCacheHelper.cs 代码如下

public class MemoryCacheHelper<T>
{
    static MemoryCacheHelper()
    { }
}

*
*
*

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core MemoryCache 缓存 的相关文章

随机推荐

  • Spark学习: Spark-Scala-IntelliJ编译Jar包流程

    Spark Scala IntelliJ编译可执行Jar包流程 注意 xff1a 非Maven环境下 xff0c 本篇文章接住上一篇文章使用IntelliJ创建Spark项目 第1步 xff1a 点击File project structu
  • Spark2 Linear Regression线性回归

    本文使用SparkMllib搭建简单的线性回归例子 数据下载地址 package SparkMlibCourse3 import org span class hljs preprocessor apache span span class
  • 2011

    2011 Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits G
  • linux 自动关机 计划任务

    设置192 168 67 232 231在21 xff1a 30自动关机 1 xff09 手动命令方式 xff03 shutdown h 21 30 2 xff09 计划任务方式 xff0c 定时关机 1 添加定时任务 root 64 se
  • 微信自动回复(python)

    前言 xff1a 自从微信禁止网页版登陆之后 xff0c itchat 库也就都不能用了 xff0c 新号不能再登录网页版 xff0c 而且itchat 库在headers里面只放了UserAgent xff0c 其他字段都没有放 所以在你
  • linux下性能监控shell脚本实现系列一(服务器整体性能监控)

    在实现监控脚本前 xff0c 我们先了解下一些已经成型的监控程序 xff0c 比如大名鼎鼎的nmon nmon官网 http nmon sourceforge net pmwiki php nmon使用简单说明 http www ibm c
  • python utf-8转汉字

    其实也不麻烦 xff0c 看下边的代码 汉字编码转换 testgbk 61 39 汉字 39 testunit 61 testgbk decode 39 gbk 39 汉字解码 testutf8 61 testgbk encode 39 u
  • linux中如何查看进程启动时间,持续时长

    root 64 gasdb2 Transsoft ps eo pid lstart etime grep 5359 5359 Tue Sep 16 14 47 22 2014 00 43 其中5359为进程号 xff0c 方便做过滤用的 T
  • 错误: 程序包org.apache.log4j不存在问题处理

    将maven中依赖修改如下 xff1a lt dependency gt lt groupId gt log4j lt groupId gt lt artifactId gt log4j lt artifactId gt lt versio
  • 构建maven项目失败解决办法

    通过eclipse的maven插件新建maven项目时 xff0c 出现如下错误 Unable to create project from archetype org apache maven archetypes maven arche
  • 关于java中的非静态代码块和静态代码块

    非静态代码块如 xff1a System out println 34 2 34 以上代码块就是非静态的代码块 xff0c 请注意这里的方法名 作用域 返回值 参数一概没有 xff0c 非静态代码块会在每次类被调用或者被实例化时就会被执行
  • jsoninclude.include.non_null 不起作用问题

    在开发过程中 xff0c 遇到在属性上加jsoninclude include non null注解 xff0c 有些属性起了作用 xff0c 有些却没有起作用 xff0c 下面使用代码简要说明一下 xff1a 64 Data public
  • 再次认识java的序列化

    首先是我们为什么要序列化 xff1f 我们可以来想想游戏的场景 xff0c 一个游戏有很多关卡 xff0c 并不是一次性能够打完的 如果我们打完一关 xff0c 这时候需要退出游戏休息了 当我们再次进入游戏之后发现这个游戏竟然需要重新打起
  • 控制actionbar中的向上键

    android中会给配置了 android parentActivityName 的activity默认加入一个向上返回键 xff0c 如下 xff1a 当点击向上返回后 xff0c 默认的行为是finish自身 xff0c startac
  • Android Studio快捷键

    Alt 43 回车 导入包 自动修正 Ctrl 43 N 查找类 Ctrl 43 Shift 43 N 查找文件 Ctrl 43 Alt 43 L 格式化代码 Ctrl 43 Alt 43 O 优化导入的类和包 Alt 43 Insert
  • Ubuntu 16.04 出现E: Problem executing scripts E: Sub-process returned an error code处理办法

    E Problem executing scripts APT Update Post Invoke Success 39 if usr bin test w var cache app info a e usr bin appstream
  • android studio “leaked window“ 错误

    昨天玩我做的app 发现app运行没问题 xff0c 但log里面出现下面的错误 xff1a Activity com example thirdversionclock MainActivity welcome has leaked wi
  • Archlinux 安装桌面环境 dwm + polybar

    Archlinux 安装桌面环境 dwm 43 polybar 关于git一 安装一些必要软件1 壁纸 状态栏等软件2 安装dwm和st 三 安装Polybar四 Fish Shell五 登录管理器六 一些个人使用的工具 2023 1 31
  • Arch Linux 安装和配置(陆续更新)

    Arch Linux 安装和配置 陆续更新 南国一年一度的回南天到来 xff0c 周末百无聊赖 xff0c 研究一下Arch Linux xff0c 整理此文 xff0c 其他使用笔记陆续补充 一 在Vmware中安装Arch Linux
  • ASP.NET Core MemoryCache 缓存

    ASP NET Core 中的缓存内存 xff08 MemoryCache xff09 ASP NET Core 中的缓存内存 ASP NET Core 中的分布式缓存 xff08 SQL Server 和 Redis 分布式缓存 xff0