📜  MemoryCache c# .net 中的 cache.TryGetValue (1)

📅  最后修改于: 2023-12-03 15:02:55.617000             🧑  作者: Mango

MemoryCache c# .net 中的 cache.TryGetValue

MemoryCache 是一个基于内存的缓存类库,它可以在 .NET 平台上进行数据缓存。在 .NET 框架中,MemoryCache 是一个轻量级的缓存类,可以有效提高程序性能。

MemoryCache 类提供了 Get、Add、Remove、Contains 等方法,这些方法都可以用来控制缓存中的数据。其中,TryGetValue 方法用于尝试从缓存中检索一个项,如果检索成功,则返回 true 和相应的对象,否则返回 false。

以下是该方法的语法和用法:

public bool TryGetValue(
    object key,
    out object value
)

其中,

  • key:要检索的缓存对象的键;
  • value:如果检索成功,则返回相应的缓存对象,否则返回 null。

此外,还有一个重载版本的 TryGetValue 方法可以传入一个自定义的缓存项策略(CacheItemPolicy),以控制缓存项的生命周期。

以下是一个例子:

using System;
using System.Runtime.Caching;
  
namespace MyMemoryCache
{
    class Program
    {
        static void Main(string[] args)
        {
            MemoryCache cache = MemoryCache.Default;
  
            // 创建一个缓存项策略,有效期为5秒
            CacheItemPolicy policy = new CacheItemPolicy();
            policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(5);
  
            // 添加一个新的缓存对象
            cache.Add("MyCacheItem", "This is a test cache item.", policy);
  
            // 尝试检索缓存对象,如果检索成功,则输出字符串
            object cacheItem;
            if (cache.TryGetValue("MyCacheItem", out cacheItem))
            {
                Console.WriteLine(cacheItem.ToString());
            }
  
            // 在有效期内再次尝试检索缓存对象,应该可以得到相同的结果
            if (cache.TryGetValue("MyCacheItem", out cacheItem))
            {
                Console.WriteLine(cacheItem.ToString());
            }
  
            // 延迟6秒后尝试检索缓存对象,应该返回 null
            System.Threading.Thread.Sleep(6000);
            if (cache.TryGetValue("MyCacheItem", out cacheItem))
            {
                Console.WriteLine(cacheItem.ToString());
            }
  
            Console.ReadKey();
        }
    }
}

以上代码将输出以下内容:

This is a test cache item.
This is a test cache item.

由于缓存项的有效期为 5 秒,因此在第二次检索时仍然可以检索到相同的缓存对象。然而,在第三次检索时,由于已经超过了有效期,因此返回的缓存对象为 null。

参考文献: