如何将项添加到缓存中

将项添加到缓存中

您可以使用三种不同的技术将项添加到 Cache 对象中。根据应用程序要求的不同,您的选择可以从简单到复杂。
如果要利用 Cache 所提供的清理、到期时间和依赖项支持,则必须使用 Cache.Insert 方法或 Cache.Add 方法。
注意   Add 和 Insert 方法具有相同的签名,但它们之间存在细微的差别。首先,调用 Add 方法返回表示缓存项的对象,而调用 Insert 方法不是。其次,如果您调用这些方法并将已存储在 Cache 中的某个项添加到 Cache 中,那么它们的行为是不同的。Insert 方法替换该项,而 Add 方法失败。
通过指定其键和值将项添加到缓存中
通过指定项的键和值,您可以像将项添加到字典中一样将其添加到缓存中。下面的代码将文本框的当前 Value 属性添加到 Cache 中。
[Visual Basic]
Cache("txt1") = txtName.value
[C#]
Cache["txt1"] = txtName.value;
通过使用 Insert 方法将项添加到缓存中
重载 Insert 方法,允许您定义正在使用的版本的参数的值。例如,若要只添加项的键和值,则使用下面的代码。
[Visual Basic]
Cache.Insert("MyData1", connectionString)
[C#]
Cache.Insert("MyData1", connectionString);
使用 Add 方法将项添加到缓存中
Add 方法与 Insert 方法具有相同的签名,但它返回表示您所添加项的对象。
[Visual Basic]
Cache.Add("MyData1", connectionString)
[C#]
Cache.Add("MyData1", connectionString);
这两种方法都使您能够在很大程度上控制在 Cache 中保留项的条件。两种方法都支持使缓存的项依赖于外部文件或目录、Cache 中的其他键或任意一个的数组。将设有依赖项的项添加到 Cache 中将创建 CacheDependency 类的实例,它跟踪对您定义的依赖项的更改。如果这些依赖项的任何一个发生更改(包括被删除或移动),则将与该依赖项关联的项从 Cache 中移除。
将设有依赖项的项添加到缓存中
您可以使用 Add 或 Insert 方法中的 dependencies 参数将设有依赖项的项添加到 Cache 中。下面的示例演示使用 Insert 方法将设有依赖项(在 XML 文件上)的项添加到 Cache 中。
[C#]
Cache.Insert("MyData1", connectionString, new CacheDependency(Server.MapPath(//myServer/myConfig.xml)));
[Visual Basic]
Cache.Insert("MyData1", connectionString, new CacheDependency(Server.MapPath(//myServer/myConfig.xml)))
将设有到期策略的项添加到缓存中
您可以使用 absoluteExpiration parameter 参数和 slidingExpiration 参数将设有到期策略的项添加到 Cache 中。您可以定义绝对过期时间或弹性过期时间,但不能同时定义两者。在使用上述参数之一定义到期策略时,必须将另一个参数设置为零。Cache 类定义了两个自动执行该操作的字段:NoAbsoluteExpiration 和 NoSlidingExpiration。当定义绝对或弹性过期时间时,只要将适当的参数设置为其相应的字段值即可。下面的示例使用 Insert 方法将设有两分钟绝对到期时间的项添加到 Cache 中。
[C#]
Cache.Insert("MyData1", connectionString, null, DateTime.Now.AddMinutes(2),  NoSlidingExpiration);
[Visual Basic]
Cache.Insert("MyData1", connectionString, null, DateTime.Now.AddMinutes(2),  NoSlidingExpiration)
下面的代码使用 Insert 方法将设有 30 秒弹性过期时间的项添加到 Cache 中。
[C#]
Cache.Insert("MyData1", connectionString, null, NoAbsoluteExpiration, TimeSpan.FromSeconds(30));
[Visual Basic]
Cache.Insert("MyData1", connectionString, null, NoAbsoluteExpiration, TimeSpan.FromSeconds(30))
注意   当设置绝对到期时间时,请使用 DateTime 结构。当设置弹性过期时间时,请使用 TimeSpan 结构。另外,如果您创建的弹性过期时间小于零或大于一年,则将引发 ArgumentOutOfRangeException 类。
您还可以使用 Add 或 Insert 方法通过在 CacheItemPriority 枚举中指定值定义缓存项的相对重要性。当 Web 服务器进行清理以释放内存时,这些相对优先级会对它有所帮助。Web 服务器会在移除具有较高优先级的项之前先从 Cache 中移除具有较低优先级的项。
将设有优先级设置的项添加到缓存中
您可以通过在 Add 或 Insert 方法上使用 priority 参数将设有优先级设置的项添加到 Cache 中。下面的示例使用 Add 方法将 priority 为 High 的项添加到 Cache 中。
[C#]
Cache.Add("MyData1", connectionString, null, NoAbsoluteExpiration, TimeSpan.FromSeconds(30), CacheItemPriority.High, null);
[Visual Basic]
Cache.Add("MyData1", connectionString, null, NoAbsoluteExpiration, TimeSpan.FromSeconds(30), CacheItemPriority.High, null)

 

 

在这个代码片段中,如果想要增加缓存和缓写功能,通常可以考虑以下几个步骤: 1. **缓存**:为了减少对PLC频繁的读取请求,可以在第一次读取数据后将其存储在一个缓存(如内存缓存或硬盘缓存)中。例如,可以创建一个Dictionary来作为缓存容器: ```csharp // 创建一个 Dictionary 存储缓存数据 Dictionary<string, double> cache = new Dictionary<string, double>(); if (!cache.ContainsKey("DB1.DBD4")) // 检查缓存是否存在 { float wd1 = (float)plc.Read("DB1.DBD4"); cache.Add("DB1.DBD4", wd1); // ...其他类似操作,并添加缓存中 } double mFromCache = cache["DB1.DBD4"] * cache["DB1.DBD4"]; ``` 2. **缓写**:对于计算后的结果,如果希望持久化,可以定期或在特定条件下更新缓存文件。比如,每次计算完毕后,你可以将当前缓存数据序列化并写入到文件系统: ```csharp // 更新缓存文件 string cacheFilePath = "C:\\temp\\cache.txt"; using (StreamWriter writer = File.AppendText(cacheFilePath)) { writer.WriteLine($"DB1.DBD4: {mFromCache}"); // ...其他缓存 } // 当缓存写入完成后,再进行文件写入 // ... ``` 3. **缓存更新策略**:确定何时从缓存加载数据,何时从PLC获取新的数据,这取决于缓存过期时间、数据变化频率等因素。可以选择定期检查缓存的有效性,或者当PLC返回的数据与缓存有差异时更新缓存。 请注意,在实际目中,应根据性能需求和可用资源调整缓存大小和更新策略,并确保处理好并发访问和清理旧数据的问题。同时,缓存策略可能需要根据业务需求进行调整,比如设置缓存最大容量、失效策略等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值