利用System.Web.HttpRuntime.Cache制作缓存工具类

用到的依赖介绍

当谈到 ASP.NET 中的缓存管理时,常涉及到以下三个类:CacheDependency、HttpRuntime.Cache 和 System.Web.Caching。

  1. CacheDependency(缓存依赖项):

    • CacheDependency 类用于指定一个或多个文件或目录作为缓存项的依赖项。
    • 当关联的文件或目录内容发生变化时,与之相关联的缓存项将自动失效并更新。
    • 这样可以确保缓存数据的及时性和一致性,避免缓存数据过期而导致错误的情况发生。
    • 在 ASP.NET 中,CacheDependency 是实现更智能的缓存管理策略的关键类之一。
  2. HttpRuntime.Cache:

    • HttpRuntime.Cache 是 ASP.NET 中用于管理应用程序级缓存的静态类。
    • 它提供了对应用程序级缓存的访问和操作方法,如插入缓存项、获取缓存项、移除缓存项等。
    • 可以使用 HttpRuntime.Cache 存储和管理应用程序中的数据,提高数据访问的性能和效率。
  3. System.Web.Caching 命名空间:

    • System.Web.Caching 命名空间包含了在 ASP.NET 中用于缓存管理的相关类和接口。
    • 该命名空间定义了与缓存相关的类,如 Cache 类用于操作缓存项,CacheDependency 类用于设置缓存依赖项等。
    • 通过 System.Web.Caching 命名空间提供的类和接口,开发人员可以实现对缓存的灵活管理和控制,提高应用程序的性能和可靠性。

综上所述,CacheDependency 类用于设置缓存项的依赖项,HttpRuntime.Cache 是 ASP.NET 中用于管理应用程序级缓存的类,而 System.Web.Caching 命名空间提供了一系列与缓存管理相关的类和接口,帮助开发人员实现对缓存的有效管理。这些类和命名空间在 ASP.NET 中扮演着重要的角色,用于提高应用程序的性能和响应速度。

CacheDependency 是 ASP.NET 中用于设置缓存依赖项的类,主要用于 ASP.NET Web 应用程序中管理缓存。在 ASP.NET Web 应用程序中,可以使用 CacheDependency 来关联文件或目录,实现缓存项与这些文件或目录的关联,从而在文件内容发生变化时自动失效并更新缓存项。

虽然 CacheDependency 主要用于 ASP.NET Web 应用程序中,但 .NET Framework 中也提供了其他类型的缓存管理机制,如 System.Runtime.Caching 命名空间中的 MemoryCache 类和 ObjectCache 类。这些类提供了更通用的缓存功能,可以在各种类型的应用程序中使用,包括控制台应用程序、Windows 服务等。

因此,虽然 CacheDependency 是一个 ASP.NET 特定的类,但在其他类型的应用程序中也可以使用其他缓存管理类来实现类似的功能。例如,可以使用 MemoryCache 类来管理缓存,并通过监视文件变化等方式手动实现缓存项的失效和更新逻辑。

这个缓存只有web能用吗

本次文章介绍的只能使用与web,CacheDependency、HttpRuntime.Cache 和 System.Web.Caching 这些类主要是针对 ASP.NET Web 应用程序的缓存管理而设计的,但并不仅限于 Web 应用程序,也可以在其他类型的应用程序中使用,只要项目引用了适当的命名空间和程序集。

例如,如果你正在开发一个 Windows 服务、控制台应用程序或 WPF 应用程序,并且希望实现缓存管理以提高性能,你仍然可以使用类似的缓存机制。在这些情况下,你可能需要手动实现一些缓存管理逻辑,而不是直接使用 HttpRuntime.Cache 等类。

对于非 Web 应用程序,你可以考虑使用 System.Runtime.Caching 命名空间中的 MemoryCache 类(.NET Framework 4.0 及更高版本)来实现缓存管理。MemoryCache 提供了一个通用的缓存机制,可以在各种类型的应用程序中使用,并且具有类似于 ASP.NET 缓存管理的功能。通过 MemoryCache,你可以插入、获取和移除缓存项,并设置缓存项的属性,实现灵活的缓存策略。

因此,尽管这些缓存类最初是为 ASP.NET Web 应用程序设计的,但在其他类型的应用程序中也可以通过适当的方式实现类似的缓存管理功能,以提高应用程序的性能和效率。

工具类代码

环境:.net framework 4.5

using System;
using System.Configuration;
using System.Web;
using System.Web.Caching;namespace Wing.Framework.Utility
{/// <summary>/// 本地缓存帮助类/// </summary>public class Caching{/// <summary>/// 本地缓存获取/// </summary>/// <param name="name">key</param>/// <returns></returns>public static object Get(string name){return HttpRuntime.Cache.Get(name);}/// <summary>/// 本地缓存移除/// </summary>/// <param name="name">key</param>public static void Remove(string name){if (HttpRuntime.Cache[name] != null)HttpRuntime.Cache.Remove(name);}/// <summary>/// 本地缓存写入(默认缓存20min)/// </summary>/// <param name="name">key</param>/// <param name="value">value</param>public static void Set(string name, object value){Set(name, value, null);}/// <summary>/// 本地缓存写入(默认缓存20min),依赖项/// </summary>/// <param name="name">key</param>/// <param name="value">value</param>/// <param name="cacheDependency">依赖项</param>public static void Set(string name, object value, CacheDependency cacheDependency){HttpRuntime.Cache.Insert(name, value, cacheDependency, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(20));}/// <summary>/// 本地缓存写入/// </summary>/// <param name="name">key</param>/// <param name="value">value</param>/// <param name="minutes">缓存分钟</param>public static void Set(string name, object value, int minutes){HttpRuntime.Cache.Insert(name, value, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(minutes));}/// <summary>/// 本地缓存写入,包括分钟,是否绝对过期及缓存过期的回调/// </summary>/// <param name="name">key</param>/// <param name="value">value</param>/// <param name="minutes"缓存分钟></param>/// <param name="isAbsoluteExpiration">是否绝对过期</param>/// <param name="onRemoveCallback">缓存过期回调</param>public static void Set(string name, object value, int minutes, bool isAbsoluteExpiration, CacheItemRemovedCallback onRemoveCallback){if (isAbsoluteExpiration)HttpRuntime.Cache.Insert(name, value, null, DateTime.Now.AddMinutes(minutes), Cache.NoSlidingExpiration, CacheItemPriority.Normal, onRemoveCallback);elseHttpRuntime.Cache.Insert(name, value, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(minutes), CacheItemPriority.Normal, onRemoveCallback);}}
}

InsCode AI创作助手的回答

提问:

ASP.NET 中如何实现缓存?

回答:

在ASP.NET中,可以通过使用HttpContext.Current.Cache对象来实现缓存。该对象是一个全局的缓存容器,可以在整个应用程序的生命周期内使用。

下面是在ASP.NET中实现缓存的一些常见方法:

  1. 添加缓存项: HttpContext.Current.Cache.Insert(key, value, dependencies, absoluteExpiration, slidingExpiration, priority, onRemoveCallback);

    key: 缓存项的唯一标识符; value: 缓存项的值; dependencies: 缓存项的依赖项,可以是文件、数据库表等; absoluteExpiration: 缓存项的绝对过期时间; slidingExpiration: 缓存项的滑动过期时间; priority: 缓存项的优先级; onRemoveCallback: 缓存项被移除时的回调方法。

  2. 获取缓存项: var value = HttpContext.Current.Cache[key];

    通过键名获取缓存项的值。

  3. 移除缓存项: HttpContext.Current.Cache.Remove(key);

    通过键名移除缓存项。

  4. 清空缓存: HttpContext.Current.Cache.Clear();

    清空所有缓存项。

此外,还可以在ASP.NET中使用OutputCache特性来实现页面级别的缓存。例如:

[OutputCache(Duration = 3600, VaryByParam = "none")] public ActionResult Index() { // 缓存该页面的输出结果,有效期为3600秒 return View(); }

以上是ASP.NET中实现缓存的一些常见方法和技巧,可以根据具体的应用场景选择合适的缓存策略。

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

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

相关文章

问题:Spark SQL 读不到 Flink 写入 Hudi 表的新数据,打开新 Session 才可见

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

Predis Multi-Zone

A Data Flow Framework with High Throughput and Low Latency for Permissioned Blockchains 联盟链的吞吐瓶颈由共识层和网络层的数据分发过程共同决定。 Predis 协议利用了共识节点的空闲带宽&#xff0c;提前分发区块中的内容即bundle&#xff0c;减少了共识区块中的内容&…

在vue3中使用canvas实现雨滴效果

在vue3中使用canvas实现雨滴效果 这是封装的一个组件DotAndRain&#xff08; &#xff09; <script setup> import { ref, onMounted } from "vue"; import { onUnmounted } from "vue";let animationFrameId null;const el ref(null); let canv…

5 原型模式 Prototype

1.模式定义: 指原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象 2.应用场景&#xff1a; 当代码不应该依赖于需要复制的对象的具体类时&#xff0c;请使用Prototype模式。 Spring源码中的应用 org.springframework.beans.factory.support.AbstractB…

QT 如何让多语言翻译变得简单,提高效率?

一.QT多语言如何翻译的? 在QT的多语言翻译过程中,分为两个步骤:第一步生成ts文件,第二步将ts文件翻译为qm文件。如果我们在需要多语言的情况下,qml经常使用qstr或者qwidget中使用tr等等,遍布许多个文件夹,在需要更新新的翻译时会很麻烦。整个工程收索并修改,效率十分低…

vue3 #ref #reactive

一、ref 函数将简单类型的数据包装为响应式数据 import { ref } from vue const count ref(10) 一、reactive函数将复杂类型的数据包装为响应式数据 import { reactive} from vue const obj reactive({ name : zs&#xff0c; age : 18 })

蓝桥杯嵌入式第12届真题(完成) STM32G431

蓝桥杯嵌入式第12届真题(完成) STM32G431 题目 程序 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body**************************…

【LeetCode-198】打家劫舍(回溯动归)

目录 解法1&#xff1a;记忆回溯 代码实现 解法2&#xff1a;动态规划 代码实现 题目链接 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相…

Linux常见的指令

目录 01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令&#xff08;重要&#xff09;&#xff1a;06.rmdir指令 && rm 指令&#xff08;重要&#xff09;&#xff1a;07.man指令&#xff08;重要&#xff09;&#xff1a;08.cp指令&#xff08;重要&#x…

浅谈maven的生命周期

正文: 在Maven中,生命周期定义了项目构建过程的不同阶段以及在每个阶段中执行的插件目标。Maven的生命周期是由一系列阶段组成的,每个阶段都有一个唯一的标识符。 Clean生命周期:用于清理项目的构建目录。它包含以下阶段: pre-clean:执行在清理操作之前的任何操作。clea…

【Vuforia+Unity】AR05-实物3D模型识别功能实现

对于3D物体的识别&#xff0c;可以是虚拟的也可以是实物的&#xff0c;但是对于虚拟的三维模型意义不大&#xff0c;我们完全可以把三维模型放在屏幕上截一张图&#xff0c;以图片识别的方式召唤数字内容&#xff0c;不过在虚拟现实中或许有用。 因此本文探讨的技术路线主要是…

贝叶斯核机回归-因果中介分析 (BKMR-CMA)causalbkmr R包

GAP 混合物的单个元素,暴露混合物和介质的元素以及任何非线性之间的所有真实存在的相互作用需要包括在介质和结果的模型中,以获得无偏估计。随着多维暴露尺寸的增加,使用当前的方法来获得中介效应的无偏估计变得非常困难。 本算法解决的问题 使用BKMR进行中介分析时,可以…

【云原生】Docker consul的容器服务更新与发现

目录 什么是服务注册与发现 什么是consul consul提供的一些关键特性&#xff1a; consul 部署 consul服务器 1. 建立 Consul 服务 设置代理&#xff0c;在后台启动 consul 服务端 2. 查看集群信息 查看members状态 查看集群状态 3. 通过 http api 获取集群信息 regi…

vue-router 三级路由,路由跳转页面异常白屏或404,或刷新三级路由页面后一级和二级路由菜单丢失

问题描述 情况1. vue-router 定义三级路由&#xff0c;路由跳转了&#xff0c;页面404或者白屏情况2. 点击菜单三级路由后&#xff0c;刷新页面后一级和二级路由菜单丢失 解决方案&#xff1a; 某些时候是因为二级和三级的路由共用router-view&#xff0c;可以使用router-vi…

select滑动分页请求数据

需求背景 Antd 的 select 组件支滑动分页获取后端数据 实现滑动加载数据 定义变量 const allLoadedRef useRef<boolean>(true); // 是否触底 const [current, setCurrent] useState<number>(1); // 当前页 const [list, setList] useState([]); // 列表定义…

搭建SQL 注入平台

sqli-labs是一款学习SQL 注入的开源平台&#xff0c;共有75种不同类型的注入&#xff0c;在本书 的同步网站下载完压缩包后并解压&#xff0c;复制源码然后将其粘贴到网站的目录中&#xff0c;进入 MySQL 管理中的phpMyAdmin, 打开http://127.0.0.1/phpMyAdmin/, 在数据库…

加解密算法

加解密算法 推荐链接前端加密&#xff0c;后端解密AES 推荐链接 链接目录 前端加密&#xff0c;后端解密 AES 下载CryptoJS库 //引入库里面的aes.js文件 <script type"text/javascript" src"__CDN__/assets/libs/CryptoJS/rollups/aes.js"></s…

day08-实战-今日指数

今日指数-day08 1. 个股最新分时行情数据 1.1 个股最新分时行情功能说明 1&#xff09;个股最新分时行情功能原型 2&#xff09;个股最新分时行情数据接口分析 功能描述&#xff1a;获取个股最新分时行情数据&#xff0c;主要包含&#xff1a;开盘价、前收盘价、最新价、最…

深入理解Promise:用法和面试问题解析

引言 在现代的异步JavaScript编程中&#xff0c;Promise是一个强大的工具&#xff0c;用于更优雅地处理异步操作。本文将深入探讨Promise的具体用法&#xff0c;并提供一些在面试中可能遇到的问题及其答案。 Promise的基本用法 Promise是一个代表异步操作最终完成或失败的对…

Redis降低内存占用(二)分片结构

一、分区方法&#xff1a; 分片&#xff0c;也称为分区。Redis提供了多种分区实现方案: 1、哈希分区 2、区间分区 3、一致性哈希分区 4、虚拟分区 5、LUA脚本实现分片 二、