#region EntityMap

/// <summary>
        /// 实体类值的访问器,线程安全
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        public class EntityMap<TKey, TValue>
        {
            private readonly ConcurrentDictionary<TKey, TValue> map = new ConcurrentDictionary<TKey, TValue>();

/// <summary>
            /// 获得一个值
            /// </summary>
            /// <typeparam name="TKey"></typeparam>
            /// <param name="key"></param>
            /// <returns>如果key找不到对应值,返回null</returns>
            public TValue GetValue(TKey key)
            {
                TValue value;
                if (map.TryGetValue(key, out value))
                    return value;

return default(TValue);
            }

/// <summary>
            /// 设置一个值
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public void SetValue(TKey key, TValue value)
            {
                if (arrayCache != null)
                {
                    TValue mapValue;
                    if (map.TryGetValue(key, out mapValue))
                    {
                        if (!mapValue.Equals(value))
                            arrayCache = null;
                    }
                    else
                    {
                        arrayCache = null;
                    }
                }
                map[key] = value;
            }

/// <summary>
            /// 缓存map的数据
            /// </summary>
            private TValue[] arrayCache;

/// <summary>
            /// 获得所有的数据(内部有缓存,如果数据没改变过,则返回同一个数组)
            /// </summary>
            /// <returns></returns>
            public TValue[] ToArray()
            {
                if (arrayCache == null)
                    arrayCache = map.Values.ToArray();

return arrayCache;
            }

/// <summary>
            /// 删除一个数据
            /// </summary>
            /// <param name="key"></param>
            public void Remove(TKey key)
            {
                TValue value;
                if (map.TryRemove(key, out value))
                    arrayCache = null;
            }

public void Clear()
            {
                map.Clear();
                arrayCache = null;
            }
        }

#endregion

至于Session 的生命周期很好处理 自己封装一个时间片类 规定Session创建后什么时候移除
待会我再上传时间片代码

Session 的生命周期的更多相关文章

  1. 【转载】Session的生命周期

    http://www.cnblogs.com/binger/archive/2013/03/19/2970171.html 以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的 ...

  2. Session的生命周期之关于浏览器关闭后的Session

    Session是JSP的九大内置对象中的一个,它可以保存当前用户的各种的状态信息. 初次接触Session时认为Session的生命周期是从浏览器打开一个窗口发送请求开始,到浏览器窗口关闭结束.其实这 ...

  3. Cookie 和 Session 的区别和联系?session的生命周期?多个服务器部署session的管理?

    一.session 和 cookie 1.cookie Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie.当下次客户端再向服务端发起请求时,客户端会 ...

  4. cookie和session的区别,session的生命周期,

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  5. node中session存储与销毁,及session的生命周期

    1.首先在使用session之前需要先配置session的过期时间等,在入口文件app.js中 app.use(express.session({ cookie: { maxAge: config.g ...

  6. cookie和session的区别及session的生命周期

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录 ...

  7. session的生命周期是怎样的

    session的生命周期是怎样的 一.总结 一句话总结:Tomcat中Session的默认失效时间为20分钟.如果我们敲代码的时候把它设置成1个月,那么这一个月的数据会代替默认20分钟的数据,使ses ...

  8. Session的生命周期和工作原理

    一.什么是Session,如何使用?Session是用于存放用户与web服务器之间的会话,即服务器为客户端开辟的存储空间. 由于客户端与服务器之间的会话是无状态的机制,Session则可用于关联访问, ...

  9. Request和Session的生命周期

    request的生命周期是request请求域,一个请求结束,则request结束 session的生命周期是session会话域,打开一个浏览器请求一个网站的页面后,Session开始,当sessi ...

随机推荐

  1. JMeter学习笔记--JMeter前置处理器

    前置处理器被用来修改作用域内的采样器 HTML 链接解析器:解析从服务器得到的HTML响应,并从中提取链接和表单,使用perl型的正则表达式来寻求匹配项. HTML URL重写修饰符:使用URL重写来 ...

  2. C++ 设计模式 —— 訪问者(Visitor)

    訪问者设计模式的实现借助于两个继承体系, (1)elements:一个是被操作的类(基类及其子类) (2)visitors:一个定义了一系列操作的訪问者(基类及其子类) 訪问者模式是一种行为型设计模式 ...

  3. ucosii事件控制块------消息邮箱与消息队列

    UCOSII 使用叫做事件控制块(ECB)的数据结构来描述诸如信号量.邮箱(消息邮箱)和消息队列这些事件 #define OS_EVENT_EN (((OS_Q_EN > 0u) &&a ...

  4. 使用latex撰写博士,硕士学位论文(浙大博士经验分享)

    使用latex撰写博士,硕士学位论文(浙大博士经验分享) 浙大博士:  个人感觉,还是要用latex来写.因为之前发过几篇word排版的中文论文,在参考文献的引用.文字格式调整上,实在是难受.如果坚持 ...

  5. introduction to anaconda

    一.安装好anaconda后进行更新 说明:在windows环境中的操作,在linux环境中请参考具体书籍. 1.进入cmd命令行 执行 conda update conda conda update ...

  6. Verilog学习笔记

    作者:桂. 时间:2017-06-24  11:07:40 链接:http://www.cnblogs.com/xingshansi/p/7039237.html 前言 Verilog是硬件描述语言, ...

  7. 怎么修改Elasticsearch的对外ip 默认是本地IP 127.0.0.1

    //修改C:\Program Files\elasticsearch-2.1.1\config\elasticsearch.yml: network.bind_host: 172.16.1.86 pa ...

  8. Clojure 下的 xpath 库

    clj-xpath 项目网站 Github

  9. 【JavaWeb】(10)微信公众号开发进阶

    因为普通开发会有很多的权限限制,所以我们能够申请一个測试账号来开发体验一下微信公众号的其它接口功能. 申请測试号我就不介绍了.非常easy.申请成功后,还须要配置Url地址和token,和我们普通公众 ...

  10. ruby,python及curl post请求

    #飘红部分为变量 test_url="http://test" body_hash={"value"=>100, "year"=> ...