.NET和.NET Core(C#)中使用MemoryCache缓存的方法及示例代码

本文主要介绍.NET和.NET Core(C#)中,使用MemoryCache实现对应用数据缓存的方法,以及相关的示例代码。

1、.NET(C#)中MemoryCache缓存的使用

1)项目中添加System.Runtime.Caching引用

添加引用后,可以添加using System.Runtime.Caching;命令空间。

2)创建MemoryCache对象

 ObjectCache cache = MemoryCache.Default;  

3)缓存中添加值

cache.Add("CacheName", "Value1", null);
cache.Add("CacheName2", 0, null);

注意:null是不指定缓存策略,CacheItemPolicy可用于添加缓存过期时间、更改监视器、更新回调等。

4)CacheItemPolicy的使用

ObjectCache cache = MemoryCache.Default;
var cacheItemPolicy = new CacheItemPolicy
{
AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(60.0),
};
cache.Add("CacheName3", "缓存一分钟过期", cacheItemPolicy);

5)删除缓存

cache.Remove("CacheName");

6)获取缓存

cache.Get("fullName")

7)更新缓存

 cache.Set("CacheName2", 1, null);

8)使用示例

using System;
using System.Runtime.Caching;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            ObjectCache cache = MemoryCache.Default;
            //添加缓存
            //null是不指定缓存策略,CacheItemPolicy可用于添加缓存过期时间、更改监视器、更新回调等。
            cache.Add("CacheName", "Value1", null);
            cache.Add("CacheName2", 100, null);
            // 创建缓存的策略
            var cacheItemPolicy = new CacheItemPolicy
            {
                AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(60.0),
            };
            //用缓存项策略添加缓存
            cache.Add("CacheName3", "Expires In A Minute", cacheItemPolicy);
            //使用CacheItem对象添加缓存
            var cacheItem = new CacheItem("fullName", "Vikas Lalwani");
            cache.Add(cacheItem, cacheItemPolicy);
            //获取缓存值并打印
            Console.WriteLine("Full Name " + cache.Get("fullName"));
            //打印所有缓存
            Console.WriteLine("更新前");
            PrintAllCache(cache);
            //删除缓存
            cache.Remove("CacheName");
            //更新缓存值
            cache.Set("CacheName2", 2000, null);
            //更新后输出所有缓存
            Console.WriteLine("更新后");
            PrintAllCache(cache);
        }
        public static void PrintAllCache(ObjectCache cache)
        {
            foreach (var item in cache)
            {
                Console.WriteLine("cache object key-value: " + item.Key + "-" + item.Value);
            }
        }
    }
}

2、.NET Core中MemoryCache缓存的使用

1)使用Nuget安装引用Microsoft.Extensions.Caching.Memory和System.Runtime.Caching

使用Nuget的界面的管理器搜索 "Microsoft.Extensions.Caching.Memory" 和 "System.Runtime.Caching" => 找到分别点击"安装"。

也可以使用.NET CLI命令安装:

> dotnet add TodoApi.csproj  Microsoft.Extensions.Caching.Memory
> dotnet add TodoApi.csproj package System.Runtime.Caching

相关文档VS(Visual Studio)中Nuget的使用

2)使用示例

using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Primitives;
using System;
using System.Threading;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            IMemoryCache cache = new MemoryCache(new MemoryCacheOptions());
            object result;
            string key = "KeyName";
            // 创建/更新
            result = cache.Set(key, "Testing 1");
            result = cache.Set(key, "Update 1");
            // 获取值,如果没有则返回null
            result = cache.Get(key);
            Console.WriteLine("KeyName Value=" + result);
            // 判断是否存在
            bool found = cache.TryGetValue(key, out result);
            Console.WriteLine("KeyName Found=" + result);
            // 删除
            cache.Remove(key);
            //设置项与令牌过期和回调
            TimeSpan expirationMinutes = System.TimeSpan.FromSeconds(0.1);
            var expirationTime = DateTime.Now.Add(expirationMinutes);
            var expirationToken = new CancellationChangeToken(
                new CancellationTokenSource(TimeSpan.FromMinutes(0.001)).Token);
            // 创建执行回调函数的缓存项
            var cacheEntryOptions = new MemoryCacheEntryOptions()
           // 获取或设置在内存压力触发的清理过程中保留缓存中的缓存项的优先级。 默认值为 Normal。
           .SetPriority(Microsoft.Extensions.Caching.Memory.CacheItemPriority.Normal)
           // 设置实际的过期时间
           .SetAbsoluteExpiration(expirationTime)
           // 获取导致缓存项过期的 IChangeToken 实例。
           .AddExpirationToken(expirationToken)
           // 获取或设置从缓存中逐出缓存项后将触发的回调。
           .RegisterPostEvictionCallback(callback: CacheItemRemoved);
            //使用回调选项添加缓存项
            result = cache.Set(key, "Call back cache Item", cacheEntryOptions);
            Console.WriteLine(result);
            Console.ReadKey();
        }
        private static void CacheItemRemoved(object key, object value, EvictionReason reason, object state)
        {
            Console.WriteLine(key + " " + value + " removed from cache due to:" + reason);
        }
    }
}

推荐阅读
cjavapy编程之路首页