zoukankan      html  css  js  c++  java
  • NHibernate学习(6)—使用缓存

    一级缓存
    1.  使用ISession.Get()方法立即把对象实例保存到缓存中,使用ISession.Load()方法当你需要使用的时候再访问数据库把这个实例保存在缓存中。
    2. NHibernate一级缓存管理

      ISession.Evict(object):从缓存中删除指定实例。

      ISession.Clear():清空缓存。

      ISession.Contains(object):检查缓存中是否包含指定实例
    使用ISession.Get()方法立即把对象实例保存到缓存中,使用ISession.Load()方法当你需要使用的时候再访问数据库把这个实例保存在缓存中。
    在测试时发现一个问题调用Get方法时,一级缓存并不起作用,调用Load方法就可以。这点是不是NHibernate2.1.0的改变呢?对于二级缓存的测试也是如此...
    刚才又好好的看了下,原来是之前的测试把数据删除了,新添的用户是以id为3开始的用下面的代码是可以查到的,原来是自己的一时粗心所致...
     [Test]
            
    public void SessionFactoryCacheTest()
            
    {
                
    using (_session)
                
    {
                    Console.WriteLine(
    "--Session 1--读取持久化实例--");
                    Customer customer1 
    = _session.Get<Customer>(3);
                    Assert.IsNotNull(customer1);
                }

                ResetSession();
                
    using (_session)
                
    {
                    Console.WriteLine(
    "--Session 2--读取持久化实例--");
                    Customer customer2 
    = _session.Get<Customer>(3);
                    Assert.IsNotNull(customer2);
                }

            }
       private void ResetSession()
            {
                if (_session.IsOpen)
                    _session.Close();
                _session = _helper.GetSession();
                _sample.Session = _session;
            }


    管理NHibernate二级缓存

    NHibernate二级缓存由ISessionFactory创建并由ISessionFactory自行维护。我们使用NHibernate操 作数据时,ISessionFactory能够自动同步缓存,保证缓存的有效性。但是当我们批量操作数据时,往往NHibernate不能维护缓存持久有 效。ISessionFactory提供了可编程方式的缓存管理方法。

    ISessionFactory提供了一系列的EvictXXX()方法可以方便的从二级缓存中删除一个实例、删除一个集合、一个命名缓存等操作

    • Evict(persistentClass):从二级缓存中删除persistentClass类所有实例
    • Evict(persistentClass, id):从二级缓存中删除指定的持久化实例
    • EvictEntity(entityName):从二级缓存中删除命名实例
    • EvictCollection(roleName):从二级缓存中删除集合
    • EvictCollection(roleName, id):从二级缓存中删除指定的集合
    • EvictQueries():从二级缓存中刷新全部查询结果集
    • EvictQueries(cacheRegion):从二级缓存中刷新指定查询结果集

    ISession内置缓存可以共享ISessionFactory缓存,通过指定ISession的CacheMode可以控制ISession和ISessionFactory的交互方式。ISession可以通过以下五种方式和ISessionFactory交互:

    • Ignore:更新数据时将二级缓存失效,其它时间不和二级缓存交互
    • Put:向二级缓存写数据,但不从二级缓存读数据
    • Get:从二级缓存读数据,仅在数据更新时向二级缓存写数据
    • Normal:默认方式。从二级缓存读/写数据
    • Refresh:向二级缓存写数据,想不从二级缓存读数据,通过在配置文件设置cache.use_minimal_puts从数据库中读取数据时,强制二级缓存刷新
    李永京的NHibernate之旅就到更新到这里,相信以后还有更多精彩的文章,但是我的NHibernate学习笔记才刚刚开始...
    这是目前我学习笔记的最新代码:NHibernateSample3.zip
    本文部分内容引自: YJingLee's Blog
  • 相关阅读:
    正则校验录入日期是否有效(含润年)
    java截取字符串中字节长度【转】
    python基础总结(oop)
    python基础总结(函数)
    python基础总结(字符串)
    python基础总结(集合容器)
    python基础总结(判断语句*循环语句)
    python基础总结(基本类型与运算符)
    python爬虫相关的一些面试题
    python爬虫基本知识
  • 原文地址:https://www.cnblogs.com/haokaibo/p/1578910.html
Copyright © 2011-2022 走看看