.Net程序中使用本地缓存,基于System.Web.Caching类。
提供了对缓存数据的新增、查询、清除操作。
有关更多缓存操作参考文章:https://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html
新增缓存
实例一:缓存的值为字符串类型
{
Cache cache = HttpRuntime.Cache;
cache.Insert("我是key", "我是缓存的字符串内容");
var enumerator1 = cache.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.WriteLine($"key:{enumerator1.Key},value:{enumerator1.Value}");
}
}
执行结果:
实例二:缓存的值为对象
{
Cache cache = HttpRuntime.Cache;
Person p = new Person();
p.Id = 1;
p.Name = "张三";
cache.Insert("AA", p);
var enumerator1 = cache.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.WriteLine($"key:{enumerator1.Key},value:{(enumerator1.Value as Person).Id} {(enumerator1.Value as Person).Name}");
}
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
执行结果:
新增缓存除了Insert方法外,还有Add方法:
实例三:通过Add方法添加缓存
{
Cache cache = HttpRuntime.Cache;
//Add方法需要加载七个参数,一个都不能少
var obj = cache.Add("BB", "我是通过Add方法添加的缓存数据1", null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30), CacheItemPriority.High, null);
var enumerator1 = cache.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.WriteLine($"key:{enumerator1.Key},value:{enumerator1.Value}");
}
}
执行结果:
Insert方法和Add方法新增缓存的比较:
1.Insert方法支持5种重载,使用灵活,而Add方法必须提供7个参数;
2.Add方法可以返回缓存项的数据对象,Insert 返回void;
3.添加重复缓存情况下(Key已存在),Insert会替换该项,而Add方法则不执行任何操作,并返回原来保存的object对象。
执行结果:
执行结果:
查询缓存
使用Get()方法从 Cache 对象检索指定项。
实例四:根据指定key值查询
{
Cache cache = HttpRuntime.Cache;
cache.Insert("BB", "我是被缓存的字符串信息");
Console.WriteLine(cache.Get("BB").ToString());
}
执行结果:
实例五:使用GetEnumerator()方法遍历查询所有缓存信息
{
Cache cache = HttpRuntime.Cache;
cache.Insert("AA", "我是被缓存的字符串信息AA");
cache.Insert("BB", "我是被缓存的字符串信息BB");
var enumerator1 = cache.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.WriteLine($"key:{enumerator1.Key},value:{enumerator1.Value}");
}
}
执行结果:
清除缓存
清除缓存有两种方法,一种是根据key值清除单个缓存信息,另一种是遍历后清除所有缓存信息。
实例六:通过Remove()方法,传入一个Key,清空一个。
{
Cache cache = HttpRuntime.Cache;
cache.Insert("AA", "我是被缓存的字符串信息AA");
cache.Insert("BB", "我是被缓存的字符串信息BB");
Console.WriteLine("缓存清除前:");
var enumerator1 = cache.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.WriteLine($"key:{enumerator1.Key},value:{enumerator1.Value}");
}
cache.Remove("BB");//从cache中移除一项
Console.WriteLine("缓存清除后:");
enumerator1 = cache.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.WriteLine($"key:{enumerator1.Key},value:{enumerator1.Value}");
}
}
执行结果:
如果想清空所有缓存,由于Cache类没有提供RemoveAll()方法,所以可以通过遍历后逐个清除的方法删除所有缓存。GetEnumerator()方法用于获取所有缓存项。MoveNext()用于将位置移动到下一个缓存项。
实例七:通过遍历清除的方法,清空所有缓存。
{
Cache cache = HttpRuntime.Cache;
cache.Insert("AA", "我是被缓存的字符串信息AA");
cache.Insert("BB", "我是被缓存的字符串信息BB");
Console.WriteLine("缓存清除前:");
var enumerator1 = cache.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.WriteLine($"key:{enumerator1.Key},value:{enumerator1.Value}");
}
enumerator1 = cache.GetEnumerator();
while (enumerator1.MoveNext())
{
cache.Remove(enumerator1.Key.ToString());
}
Console.WriteLine("缓存清除后:");
enumerator1 = cache.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.WriteLine($"key:{enumerator1.Key},value:{enumerator1.Value}");
}
}
执行结果: