IMemoryCache 使用

IMemoryCache 提供了一个内存中的缓存存储,允许你存储和检索对象,这些对象可以在应用程序的不同部分之间共享,以提高性能并减少重复计算或数据库访问的次数。

 public interface ICacheService : IDisposable{/// <summary>/// 验证缓存项是否存在/// </summary>/// <param name="key">缓存Key</param>/// <returns></returns>bool Exists(string key);/// <summary>/// List写入head/// </summary>/// <param name="key"></param>/// <param name="val"></param>void LPush(string key, string val);void RPush(string key, string val);/// <summary>/// List出队 lpop/// </summary>/// <param name="key"></param>/// <returns></returns>object ListDequeue(string key);/// <summary>/// List出队 lpop/// </summary>/// <param name="key"></param>/// <returns></returns>T ListDequeue<T>(string key) where T : class;/// <summary>/// 移除list中的数据,keepIndex为保留的位置到最后一个元素如list 元素为1.2.3.....100/// 需要移除前3个数,keepindex应该为4/// </summary>/// <param name="key"></param>/// <param name="keepIndex"></param>void ListRemove(string key, int keepIndex);/// <summary>/// 添加缓存/// </summary>/// <param name="key">缓存Key</param>/// <param name="value">缓存Value</param>/// <param name="expiresIn">缓存时长</param>/// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间) //new TimeSpan(0, 60, 0);</param>/// <returns></returns>bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false);bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false);/// <summary>/// 删除缓存/// </summary>/// <param name="key">缓存Key</param>/// <returns></returns>bool Remove(string key);/// <summary>/// 批量删除缓存/// </summary>/// <param name="key">缓存Key集合</param>/// <returns></returns>void RemoveAll(IEnumerable<string> keys);/// <summary>/// 获取缓存/// </summary>/// <param name="key">缓存Key</param>/// <returns></returns>T Get<T>(string key) where T : class;/// <summary>/// 获取缓存/// </summary>/// <param name="key">缓存Key</param>/// <returns></returns>string Get(string key);}

实现:

 public class MemoryCacheService : ICacheService{/// <summary>/// 。IMemoryCache 提供了一个内存中的缓存存储,允许你存储和检索对象,这些对象可以在应用程序的不同部分之间共享,以提高性能并减少重复计算或数据库访问的次数。/// </summary>protected IMemoryCache _cache;public MemoryCacheService(IMemoryCache cache){_cache = cache;}/// <summary>/// 验证缓存项是否存在/// </summary>/// <param name="key">缓存Key</param>/// <returns></returns>public bool Exists(string key){if (key == null){throw new ArgumentNullException(nameof(key));}return _cache.Get(key) != null;}/// <summary>/// 添加缓存/// </summary>/// <param name="key">缓存Key</param>/// <param name="value">缓存Value</param>/// <returns></returns>public bool Add(string key, object value){if (key == null){throw new ArgumentNullException(nameof(key));}if (value == null){throw new ArgumentNullException(nameof(value));}_cache.Set(key, value);return Exists(key);}public bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false){if (expireSeconds != -1){_cache.Set(key,value,new MemoryCacheEntryOptions().SetSlidingExpiration(new TimeSpan(0, 0, expireSeconds)));}else{_cache.Set(key, value);}return true;}public bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false){return AddObject(key, value, expireSeconds, isSliding);}public void LPush(string key, string val){}public void RPush(string key, string val){}public T ListDequeue<T>(string key) where T : class{return null;}public object ListDequeue(string key){return null;}public void ListRemove(string key, int keepIndex){}/// <summary>/// 添加缓存/// </summary>/// <param name="key">缓存Key</param>/// <param name="value">缓存Value</param>/// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>/// <param name="expiressAbsoulte">绝对过期时长</param>/// <returns></returns>public bool Add(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte){_cache.Set(key, value,new MemoryCacheEntryOptions().SetSlidingExpiration(expiresSliding).SetAbsoluteExpiration(expiressAbsoulte));return Exists(key);}/// <summary>/// 添加缓存/// </summary>/// <param name="key">缓存Key</param>/// <param name="value">缓存Value</param>/// <param name="expiresIn">缓存时长</param>/// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>/// <returns></returns>public bool Add(string key, object value, TimeSpan expiresIn, bool isSliding = false){if (isSliding)_cache.Set(key, value,new MemoryCacheEntryOptions().SetSlidingExpiration(expiresIn));else_cache.Set(key, value,new MemoryCacheEntryOptions().SetAbsoluteExpiration(expiresIn));return Exists(key);}/// <summary>/// 删除缓存/// </summary>/// <param name="key">缓存Key</param>/// <returns></returns>public bool Remove(string key){if (key == null){throw new ArgumentNullException(nameof(key));}_cache.Remove(key);return !Exists(key);}/// <summary>/// 批量删除缓存/// </summary>/// <param name="key">缓存Key集合</param>/// <returns></returns>public void RemoveAll(IEnumerable<string> keys){if (keys == null){throw new ArgumentNullException(nameof(keys));}keys.ToList().ForEach(item => _cache.Remove(item));}public string Get(string key){return _cache.Get(key)?.ToString();}/// <summary>/// 获取缓存/// </summary>/// <param name="key">缓存Key</param>/// <returns></returns>public T Get<T>(string key) where T : class{if (key == null){throw new ArgumentNullException(nameof(key));}return _cache.Get(key) as T;}public void Dispose(){if (_cache != null)_cache.Dispose();GC.SuppressFinalize(this);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型入门(一)—— LLaMa/Alpaca/Vicuna

LLaMa模型是Meta开源的大模型&#xff0c;模型参数从7B到65B不等&#xff0c;LLaMa-7B在大多数基准测试上超过了GPT3-173B&#xff0c;而LLaMa-65B和Chinchilla-70B、PaLM-540B相比也极具竞争力。相比于ChatGPT或者GPT4来说&#xff0c;LLaMa可能效果上还有差距&#xff0c;但相…

oracle显示列名,列注释

项目场景&#xff1a; 数据库文档中&#xff0c;需要&#xff08;列名&#xff0c;列注释&#xff09;两列 问题描述 数据库文档中&#xff0c;需要&#xff08;列名&#xff0c;列注释&#xff09;两列&#xff0c;而且不止一张表&#xff0c;是很多张&#xff0c;这个时候…

HyperBDR云容灾,让低碳未来有“迹”可循

全球气候变化时刻牵动着我们的心。生活在同一个地球下&#xff0c;万博智云始终坚持环境友好&#xff0c;携手企业和合作伙伴在保持市场竞争力、促进企业可持续发展的同时&#xff0c;共同肩负起守护地球环境的责任。 HyperBDR云容灾以“碳足迹”践行低碳容灾 云产品及数据中心…

Qt界面假死原因

创建一个播放器类&#xff0c;继承QLabel&#xff0c;在播放器类中起一个线程用ffmpeg取流解码&#xff0c;将解码后的图像保存到队列&#xff0c;在gui线程中调用update()刷新显示。 当ffmpeg打开视频流失败后调用update()将qlabel刷新为黑色&#xff0c;有一定概率会使得qla…

随机采样一致性算法RANSAC

点云分割 图自&#xff1a;https://openaccess.thecvf.com/content_cvpr_2017/papers/Qi_PointNet_Deep_Learning_CVPR_2017_paper.pdf《PointNet:用于3D分类和分割的点集深度学习》 点云分割(Point Cloud Segmentation)是计算机视觉和3D图像处理中的一个重要步骤&#xff0c;…

数据结构——位图布隆过滤器

一、位图 1.1 概念 所谓位图&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。 数据是否在给定的整形数据中&#xff0c;结果是在或者不在&#xff0c;刚好是两种状态&#xff0c;那么可以…

Android获取当前屏幕显示的是哪个activity

在 Android 中&#xff0c;要获取当前屏幕显示的 Activity&#xff0c;可以使用以下几种方法&#xff1a; 方法一&#xff1a;使用 ActivityManager 获取当前运行的任务信息 这是一个常见的方法&#xff0c;尽管从 Android 5.0 (API 21) 开始&#xff0c;有些方法变得不太可靠…

【多线程】线程安全的单例模式

文章目录 什么是单例模式饿汉实现方式饿汉实现模式的特点 懒汉实现方式懒汉实现方式的特点 什么是单例模式 单例模式是一个设计模式&#xff0c;其目的是确保一个类只有一个实例&#xff0c;并提供一个全局的访问点来访问该实例。单例模式常用于需要控制资源数量的场景&#x…

C++:类的定义和实例化

目录 一、类的定义 1、类的定义格式 2、访问限定符 3、类域 二、实例化 1、实例化的概念 2、对象大小 一、类的定义 1、类的定义格式 class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后面分号不能省略。类体中内容…

@TableName(value=““)

Spring中Service对应的实体Entity类上不写TableName(value"")的注解&#xff0c;怎样对应到数据表&#xff1f; 在使用 MyBatis-Plus 时&#xff0c;如果实体类没有使用 TableName(value"") 注解来指定数据库表名&#xff0c;MyBatis-Plus 会根据默认的命…

log4js node日志插件

最近不是特别忙在用express搭建后台项目&#xff0c;在开发过程中遇到了需要输入日志的问 本来想直接用node自带的console来实现&#xff0c;后来发现console输出的日志达不到自己希望的 日志格式&#xff0c;后来各种百度发现了log4js插件&#xff0c;本文来记录log4js插件使用…

STM32智能工业自动化监控系统教程

目录 引言环境准备智能工业自动化监控系统基础代码实现&#xff1a;实现智能工业自动化监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业自动化与管理问题解决方案与优化收尾与总结 1. 引言 智能…

基于zynq的视频采集与hdmi显示(未完)

文章目录 一、项目整体框架一、传感器配置与驱动二、IMX222 1080P 模式图像解析(bayer 2 rgb 模块)2.1 解析有效像素(gen_sync)2.1.1同步字详细介绍&#xff1a; 2.2 bayer 2 rgb 一、项目整体框架 一、传感器配置与驱动 camera信息&#xff1a;索尼IMX222摄像头 SPI&#xf…

脚本练习-每5分钟执行一次获取当前服务器的基本情况

设计一个shell程序&#xff0c;每5分钟执行一次获取当前服务器的基本情况&#xff08;内存使用率&#xff0c;CPU负载&#xff0c;I/O&#xff0c;磁盘使用率&#xff09;&#xff0c;保存到120.20.20.20数据库上数据库帐号aaa密码bbb库名test表名host 创建一个名为server_stat…

Android10.0 锁屏分析-KeyguardPatternView图案锁分析

首先一起看看下面这张图&#xff1a; 通过前面锁屏加载流程可以知道在KeyguardSecurityContainer中使用getSecurityView()根据不同的securityMode inflate出来&#xff0c;并添加到界面上的。 我们知道&#xff0c;Pattern锁所使用的layout是 R.layout.keyguard_pattern_view&a…

【内网穿透】如何本地搭建Whisper语音识别模型并配置公网地址

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

用C语言写的一个扫雷小游戏

头文件 调用头文件和声明函数 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <time.h> #include <stdlib.h>#define ROW 9 #define COL 9#define ROWS ROW2 #define COLS COL2#define EASY_CONT 10//声明函数 //初始化棋盘函数 void InitB…

【机器学习】Grid Search: 一种系统性的超参数优化方法

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Grid Search: 一种系统性的超参数优化方法引言什么是Grid Search&#xff1f;Gr…

Spring Boot(概要 入门 Spring Boot 核心配置 YAML JSR303数据校验 )

目录 一、Spring Boot概要 1. SpringBoot优点 2. SpringBoot缺点 二、Spring Boot入门开发 1. 第一个SpringBoot项目 项目创建方式一&#xff1a;使用 IDEA 直接创建项目 项目创建方式二&#xff1a;使用Spring Initializr 的 Web页面创建项目 &#xff08;了解&#x…

Jenkins 安装、部署与配置

引言 在软件开发领域&#xff0c;持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;是提高代码质量和开发效率的关键实践。Jenkins 是一款开源的持续集成/持续部署服务器&#xff0c;以其灵活性和丰富的插件生态系统而闻名。本文将详细介绍 Jenkins 的…