• 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数据库连接池分析(C3P0,DBCP,TomcatPool,BoneCP,Druid)
    JS实现多行文本最后是省略号紧随其后还有个超链接在同一行的需求
    java判断集合是否相等
    JavaScript调试技巧
    linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置
    linux网络配置相关命令、虚拟网络接口eth0:0
    网络游戏服务器架构设计
    Linux 下使用静态google protocl buffer
    php-fpm nginx 使用 curl 请求 https 出现 502 错误
  • 原文地址:https://www.cnblogs.com/haokaibo/p/1578910.html
Copyright © 2020-2023  润新知