zoukankan      html  css  js  c++  java
  • 使用另一种方式实现会话功能

    有的时候时候并不一定要使用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的操作,所以可以看到在运行的时候,如下

     

    image

  • 相关阅读:
    进程Queue
    进程ID
    多进程
    queue 生产者、清费者
    让静态页面显示用户登录状态
    apache2.2 + tomcat6 整合以及集群配置整理
    linux安装rzsz
    http_load
    用Ant实现Java项目的自动构建和部署
    Openfire:安装指南
  • 原文地址:https://www.cnblogs.com/zbw911/p/4256583.html
Copyright © 2011-2022 走看看