首页 > 代码库 > 使用另一种方式实现会话功能
使用另一种方式实现会话功能
有的时候时候并不一定要使用SESSION,或不能使用WEB的SESSION,有的时候考虑自己来定义会话操作。可以用自己的代码来会话的操作。我也读了System.Web.SessionState的InProcess实现代码,如果按它的原理来的话。将会有很大的工作量。
那好吧,我们还有两个可选的方案,一个是 System.Web.Cache , 一个是 System.Runtime.Cache , MSDN也说了两个功能相似,Runtime的出现是为了可以脱离对于System.Web的依赖。 写个控制台类的程序那还是用System.Runtime吧。
下面是一个测试代码。
static void Main(string[] args)
{
MemoryCache mc = new MemoryCache("mycache");
CacheItemPolicy policy = new CacheItemPolicy();
policy.RemovedCallback = (x) =>
{
Console.WriteLine(x.CacheItem.Key + "removed");
};
policy.SlidingExpiration = new TimeSpan(0, 0, 3);
var i = 0;
while (true)
{
i++;
mc.AddOrGetExisting(new CacheItem("mykey" + i, "value" + i), policy);
Console.WriteLine(i + "=>" + mc.GetCount());
}
}
如果MemoryCache不满足要求的时候,可以考虑通过扩展 ObjectCache 加入自己想要的东西。(实际上MC就已经够用了)
上面的代码写的3秒过期,不会在整3秒的时候过期,大概5秒后才开始清理,这点看一下源代码就知道了。
另外,执行清理操作是一个占用CPU的操作,所以可以看到在运行的时候,如下
使用另一种方式实现会话功能