如何让一台服务器上的多个C#程序共享一份缓存数据

如何让一台服务器上的多个C#程序共享一份缓存数据,第1张

可以有多种方式 一、 *** 作系滚缺统底层API 共享内存块 二、数据库 通过数据库存放数据,多个程芹改序同时读取 三、第嫌备判三方服务 比如 Memcache 也提供缓存数据的功能

这要看你想怎么用。是否用到其复杂的特性。比如:依赖项过期;移除通知

如果都不用到。完全可以像session一样使用

HttpRuntime.Cache["key"]=value

object value = HttpRuntime.Cache["key"]

如果你要用到cache的一些高级特性。需要参考msdn

下面我贴出cache的定义

// 实现用于 Web 应用程序的缓存。无法继承此类。

public sealed class Cache : IEnumerable

{

// 用于 Cache.Insert(...) 方法调用中的 absoluteExpiration 参数中以指示项从不过期。

public static readonly DateTime NoAbsoluteExpiration

// 用作 Cache.Insert(...) 或 Cache.Add(...)

//团指 方法调用中的 slidingExpiration 参数,以禁用可调过期。

public static readonly TimeSpan NoSlidingExpiration

// 获取或设置指定键处的缓存项。

public object this[string key] { getset}

// 将指定项添加到 System.Web.Caching.Cache 对象,该对象具有依赖项、过期和优先级策略

// 以及一个委托(可用于在从 Cache 移除插入项时通知应用程序)。

public object Add(string key, object value, CacheDependency dependencies,

DateTime absoluteExpiration, TimeSpan slidingExpiration,

CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback)

// 从 System.Web.Caching.Cache 对象检索指定项。

// key: 要检索的缓存坦猛项的标识符。

// 返回结果: 检索到的缓存项,未找到该键时为 null。

public object Get(string key)

public void Insert(string key, object value)

public void Insert(string key, object value, CacheDependency dependencies)

public void Insert(string key, object value, CacheDependency dependencies,

DateTime absoluteExpiration, TimeSpan slidingExpiration)

// 摘要:

// 向 System.Web.Caching.Cache 对象中插入对象,后者具有依赖项、过期和优先级策略

//以及一个委托(可用于在让或桥从 Cache 移除插入项时通知应用程序)。

//

// 参数:

// key:

// 用于引用该对象的缓存键。

//

// value:

// 要插入缓存中的对象。

//

// dependencies:

// 该项的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,

//并从缓存中移除。如果没有依赖项,则此参数包含 null。

//

// absoluteExpiration:

// 所插入对象将过期并被从缓存中移除的时间。

//如果使用绝对过期,则 slidingExpiration 参数必须为 Cache.NoSlidingExpiration。

//

// slidingExpiration:

// 最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,

// 则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期,则

// absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。

//

// priority:

// 该对象相对于缓存中存储的其他项的成本,由 System.Web.Caching.CacheItemPriority 枚举表示。

// 该值由缓存在退出对象时使用;具有较低成本的对象在具有较高成本的对象之前被从缓存移除。

//

// onRemoveCallback:

// 在从缓存中移除对象时将调用的委托(如果提供)。

//当从缓存中删除应用程序的对象时,可使用它来通知应用程序。

//

// 异常:

// System.ArgumentException:

// 为要添加到 Cache 中的项设置 absoluteExpiration 和 slidingExpiration 参数。

//

// System.ArgumentNullException:

// key 或 value 参数为 null。

//

// System.ArgumentOutOfRangeException:

// 将 slidingExpiration 参数设置为小于 TimeSpan.Zero 或大于一年的等效值。

public void Insert(string key, object value, CacheDependency dependencies,

DateTime absoluteExpiration, TimeSpan slidingExpiration,

CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback)

// 从应用程序的 System.Web.Caching.Cache 对象移除指定项。

public object Remove(string key)

// 将对象与依赖项策略、到期策略和优先级策略

// 以及可用来在从缓存中移除项【之前】通知应用程序的委托一起插入到 Cache 对象中。

// 注意:此方法受以下版本支持:3.5 SP1、3.0 SP1、2.0 SP1

public void Insert(string key, object value, CacheDependency dependencies,

DateTime absoluteExpiration, TimeSpan slidingExpiration,

CacheItemUpdateCallback onUpdateCallback)

}

ASP.NET 提供三种主游瞎要形式的缓存:页面缓存、用户控件输出缓存和缓存 API。

页面输出缓存作为最简单的缓存形式,将已经生成的动/静太页面全部内容保存在服务器内容中。当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期。在这个过程中,缓存不再要再次经过页面处理生命周期。这样可以缩短请求响应时间,提高应用程序性能。显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面。

实现页面输出缓存,通常可以用以下两种方法:

一、使用@ OutputCache指令

使用@ OutputCache指令,能够实现对页面输出缓存的一般性需要。@ OutputCache指令在ASP.NET页或者页中包含的用户控件的头部声明。这种方式非常方便,只需几个简单的属性设置,就能够实现页面的输出缓存策略。

二、使用HttpCacheability类

该类主要包含用于设置缓存特定的HTTP标头的方法和用于控制ASP.NET页面输出缓存的方法。与.NET Framework 1.x中的HttpCachePolicy类相比,.NET Framework 2.0中的HttpCachePolicy类得野磨拦到了扩充和发展。

使用这两种方法,我们可以实现下列功能:

1、使用参数对页的各个版本进行缓存

使用 ASP.NET,您可以根据指定的 HTTP 标头的值对某页的多个版本进行缓存。当请求页时,您可以指定按传递到应用程序的单个标头、多个标头或所有标头进行缓存。

根据 HTTP 标头值以声明方式对某页的各个版本进行缓存

A、 在 ASP.NET 页中,在 @ OutputCache 指令中包括必需颂胡的 Duration 和 VaryByParam 或 VaryByControl 属性。必须将 Duration 属性设置为大于零的整数。如果希望只按 HTTP 标头值进行缓存,则必须将 VaryByParam 属性设置为“None”。

B、 在 @ OutputCache 指令中,包含 VaryByHeader 属性,将其值设置为要作为改变缓存内容的依据的 HTTP 标头的名称。

下面的示例将页缓存 60 秒,并根据随 Accept-Language HTTP 标头传递的值设置要缓存的页的版本:

<%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>

注意:如果要根据多个标头改变缓存的内容,请以分号 () 作为分隔符包括标头名称的列表。如果要根据所有标头值改变缓存的内容,请将 VaryByHeader 属性设置为星号 (*)。

根据 HTTP 标头值以编程方式对某页的各个版本进行缓存

A、 在页的 Page_Load 方法中,对页的 Response 对象的 Cache 属性调用 SetCacheability 和 SetExpires 方法。

B、 将 VaryByHeaders 属性中的 HTTP 标头值设置为 true。

下面的代码示例演示如何为有不同的 Accept-Language HTTP 标头值的请求,将某页的多个版本缓存一分钟之久。

protected void Page_Load(object sender, EventArgs e)

{

Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d))

Response.Cache.SetCacheability(HttpCacheability.Public)

Response.Cache.SetValidUntilExpires(true)

Response.Cache.VaryByHeaders["Accept-Language"] = true

}

注意:如果要根据多个标头改变缓存的内容,需要在 VaryByHeaders 属性中设置多个值。如果要根据所有标头改变缓存的内容,请将 VaryByHeaders["VaryByUnspecifiedParameters"] 设置为 true。

2、使用请求浏览器缓存页的各个版本

基于浏览器类型以声明方式缓存页的多个版本

A、 在 ASP.NET 页中,包括一个具有必需的 Duration 以及 VaryByParam 或 VaryByControl 属性的 @ OutputCache 指令。必须将 Duration 属性设置为大于零的整数。如果希望仅按浏览器类型进行缓存,请将 VaryByParam 属性设置为“None”。

B、 在 @ OutputCache 指令中,包括 VaryByCustom 属性并将其设置为“browser”。下面的示例将导致持续缓存该页达 10 秒。输出将因浏览器类型而异。

<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser" %>

基于浏览器类型以编程方式缓存页的多个版本

A、 在页代码中,对页的 Response 属性的 Cache 属性调用 SetExpires 和 SetCacheability 方法。

B、 调用 SetVaryByCustom 方法,在 custom 参数中传递值“browser”。

下面的代码示例演示如何持续缓存页的多个版本达 1 分钟。输出将因发出请求的浏览器的类型而异。

protected void Page_Load(object sender, EventArgs e)

{

Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d))

Response.Cache.SetCacheability(HttpCacheability.Public)

Response.Cache.SetValidUntilExpires(true)

Response.Cache.SetVaryByCustom("browser")

}

3、 使用自定义字符串对页的各个版本进行缓存

根据自定义字符串对页输出的多个版本进行缓存

A、 在 ASP.NET 页中包括 @ OutputCache 指令,该指令带有必需的 Duration 和 VaryByParam 属性。必须将 Duration 属性设置为大于零的整数。如果不想使用 VaryByParam 属性提供的功能,则必须将其值设置为“无”。

B、 若要以声明方式设置自定义字符串,请在 @ OutputCache 指令中包括 VaryByCustom 属性,并将该属性设置为您要作为进行不同输出缓存行为的依据的字符串。

下面的指令根据自定义字符串“minorversion”改变页输出。

<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="minorversion" %>

1. 若要以编程方式设置自定义字符串,请调用 SetVaryByCustom 方法,并将要使用的自定义字符串传递给它。

下面的代码示例演示如何将自定义字符串设置为“minorversion”。

Response.Cache.SetVaryByCustom("minorversion")

在应用程序的 Global.asax 文件中,重写 GetVaryByCustomString 方法以指定自定义字符串的输出缓存行为。

被重写的方法接受您在 VaryByCustom 属性或 SetVaryByCustom 方法中设置的字符串,作为它的 arg 参数。例如,有些页可能根据请求浏览器的次版本进行缓存。对于这些页,可以将 VaryByCustom 属性设置为“minorversion”。然后,在被重写的 GetVaryByCustomString 方法中,可以检查 arg 参数,并根据 arg 参数的值是否为“minorversion”返回不同的字符串。

下面的代码示例演示一个 Global.asax 文件,其中的 GetVaryByCustomString 方法被重写。

<%@ Application language="C#" %>

<script runat="server">

public override string GetVaryByCustomString(HttpContext context,

string arg)

{

if(arg == "minorversion")

{

return "Version=" +

context.Request.Browser.MinorVersion.ToString()

}

else

{

return ""

}

}

</script>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12506202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存