网站开发使用的语言类福建建设银行招聘网站

bicheng/2025/10/13 6:57:05/文章来源:
网站开发使用的语言类,福建建设银行招聘网站,5h制作网站,北京个人网站备案一级缓存 为了获得更好的性能#xff0c;NHibernate智能地缓存数据。NHibernate有不同的缓存机制起作用#xff0c;最重要的就是一级缓存。每个session对象维持一个一级缓存#xff0c;session对象创建时缓存创建#xff0c;session对象释放时缓存销毁。 缓存只不过是一个哈…一级缓存 为了获得更好的性能NHibernate智能地缓存数据。NHibernate有不同的缓存机制起作用最重要的就是一级缓存。每个session对象维持一个一级缓存session对象创建时缓存创建session对象释放时缓存销毁。 缓存只不过是一个哈希表。哈希表根据唯一键存储值值可以根据唯一键检索。 一个实体由它的ID唯一标识如果两个实体类型相同ID也相等那么这两个实体是相等的。NHibernate要求两个相同类型的对象不能有相同的ID。原因是如果允许系统有相同ID的两个实例那么就会将系统置于不一致的状态中。有了这个条件NHibernate就可以执行下面的操作了 NHibernate session对象从数据库中加载指定ID的实体然后放到一级缓存中访问该实体的键是它的ID值。当系统再次从数据库中加载同一个实体时session对象首先检查它的缓存如果实体已经存在于缓存中NHibernate就返回缓存的实例。只有实体不在缓存时NHibernate session对象才从数据库中加载实体。看下面的过程 程序请求session ID为1的productsession问一级缓存“有ID为1的product吗”一级缓存回答说“没有”session就从数据库中加载ID为1的productsession将product放入一级缓存键为product的ID值session返回给程序product实例程序执行更多的操作程序再次请求session ID为1的productsession问一级缓存“有ID为1的product吗”一级缓存回答说“有”session就使用ID作为键从缓存中加载ID为1的product并返回给程序我们使用下面的代码从数据库中加载实体并隐式的使NHibernate session将它存储到一级缓存 var product sesson.GetProduct(1); 之后的Get操作不会引起NHibernate查询数据库而是从一级缓存中检索对象。 清除缓存 我们使用下面的语句请求session从一级缓存中移除一个实体 session.Evict(product); 如果想完全的清除缓存可以使用下面的代码 session.Clear(); 上述语句应该仅在特殊情况下使用因为如果使用不当会导致显著的性能下降。建议只在写测试代码时使用这些操作。 刷新缓存中的实体 如果想刷新一级缓存中的单个实体那么可以使用下面的语句 session.Refresh(product); 上面的代码重新从数据库中加载product实体的状态这在session打开的同时数据库里的实体被其他程序更改的情况下非常有意义。 二级缓存 我们已经看到NHibernate提供了非常有效的方式缓存数据。可惜一级缓存绑定到session对象也就是说每次session被释放所有的缓存数据就会丢失。二级缓存定义在session工厂级别的只要session工厂没有被释放缓存就一直存在。一旦实体加载二级缓存就被激活实体对所有的session同session工厂的都可用。这样只要实体在二级缓存中NHibernate就不会从数据库加载实体直到它从缓存中移除。 启动二级缓存我们就要定义使用哪个缓存提供程序。二级缓存有各种实现。我们的例子中使用基于哈希表的缓存它包含在核心的NHibernate程序集中。请注意不应该在生产级的代码中使用这种缓存提供程序仅仅用在测试中。参看后面的“二级缓存的实现”部分选择哪个实现最适合你然而如果你改变了缓存提供程序你不用修改你的代码。 使用下面的代码只会引发NHibernate访问一次数据库检索ID为1的product即使我们使用两个不同的session实例 using (var session1 sessionFactory.OpenSession()) { var product session1.GetProduct(1); } using (var session2 sessionFactory.OpenSession()) { var product session2.GetProduct(1); } 第二个Get操作会从二级缓存中获取product实体。然而要注意的是如果没有启动二级缓存上面的代码会访问两次数据库。 另外启动二级缓存必须相应的配置NHibernate。配置的详细内容会在后面介绍。我们还必须映射实体为可缓存的。如果使用fluent映射映射实体那么添加到映射的必要语句是 Cache.ReadWrite(); 只有显示配置的实体才会缓存在二级缓存中。 缓存区域 如果不使用缓存区域那么二级缓存只能整体清除。如果需要清除二级缓存的一部分就得使用缓存区域。缓存区域根据它们的名字区分。我们可以将任何数量的不同查询放在命名的缓存区域中。清除一个缓存区域的命令如下 sessionFactory.EvictQueries(My Region); 当前使用的sessionFactory是session工厂的实例My Region是缓存区域的名字。 二级缓存的实现 所有的二级缓存提供程序都是NHibernate contributions项目的一部分。下面列表给出了一些支持的提供程序的简短描述。 SysCache:使用System.Web.Caching.Cache作为缓存提供程序。也就是说可以依靠ASP.NET的缓存功能来理解它如何工作。SysCache2:和NHibernate.Caches.SysCache一样使用ASP.NET缓存。这个提供程序也支持SQL基于依赖过期意思是当数据库里的相关数据发生改变不可能自动地配置某些缓存区域。Velocity:它是Microsoft Windows Server App Fabric的一部分是一组构建、扩展和管理基于IIS的web应用程序的综合服务。Prevalence:使用Bamboo.Prevalence作为缓存提供程序。Bamboo.Prevalence是由Klaus Wuestefeld在Prevayler中提出的对象流行概念的.NET实现。Bamboo.Prevalence提供针对CLR的确定性系统的透明对象持久化。它为智能客户端应用程序提供持久化的缓存。MemCache:Memcached.Memcahed是一个高性能分布式内存对象缓存系统但是旨在通过减轻数据库负载加速动态web应用程序。根本上说就是一个分布式的哈希表。实例—使用二级缓存 在这个例子中我们使用NHibernate的二级缓存实现一个非常简单的例子。我们在例子中使用哈希表缓存提供程序但是在生产级代码中不要使用这个提供程序 1. 在SSMS中创建一个数据库:SecondLevelCacheSample。 2. 打开Visual Studio创建一个Console Application:SecondLevelCacheSample。 3. 添加对NHibernate.dll,FluentNHibernate.dll和NHibernate.ByteCode.Castle.dll程序集的引用。 4. 在项目中创建Domain文件夹。 5. 在Domain文件夹中创建一个类文件Product.cs添加如下代码 public class Product {public virtual int Id { get; set; }public virtual string Name { get; set; }public virtual decimal UnitPrice { get; set; }public virtual int ReorderLevel { get; set; }public virtual bool Discontinued { get; set; } } 6. 在Domain文件夹中添加一个ProductMap.cs类文件用来映射Product实体代码如下 public class ProductMap : ClassMapProduct {public ProductMap(){Cache.ReadWrite();Id(x x.Id).GeneratedBy.HiLo(1000);Map(x x.Name);Map(x x.UnitPrice);Map(x x.ReorderLevel);Map(x x.Discontinued);} } 注意在映射中添加了Cache.ReadWrite()语句用来告诉NHibernate为Product实体使用二级缓存。 7. 在Program类中添加一个ISessionFactory类型的静态字段如下 private static ISessionFactory sessionFactory; 8. 在Program类中添加一个静态方法ConfigureSystem。这个方法包含配置NHibernate的一般代码和二级缓存的代码。如下面的代码所示 private static void ConfigureSystem() {const string connString server.;databaseSecondLevelCacheSample; user idsa;passwordsasa;;var configuration Fluently.Configure().Database(MsSqlConfiguration.MsSql2008.ConnectionString(connString).ShowSql).Mappings(m m.FluentMappings.AddFromAssemblyOfProduct()).BuildConfiguration();configuration.Properties[cache.provider_class] NHibernate.Cache.HashtableCacheProvider;configuration.Properties[cache.use_second_level_cache] true;var exporter new SchemaExport(configuration);exporter.Execute(true, true, false);sessionFactory configuration.BuildSessionFactory(); } 配置二级缓存的代码中第一个是告诉NHibernate使用哪个二级缓存提供程序。它是一个键值对。值是实现二级缓存提供程序类的全路径。在我们的例子中不需要定义程序集因为该提供程序在NHibernate程序集内。第二个是启用或禁止二级缓存的使用。注意从技术上来说第二个配置不需要因为它的默认值是true。 9. 在Program类中创建一个TestLoadEntity的静态方法代码如下 private static void TestLoadEntity() {int productId;var product new Product{Name Apple,UnitPrice 1.55m,ReorderLevel 100,Discontinued false};using (var session sessionFactory.OpenSession()){using (var tx session.BeginTransaction()){productId (int)session.Save(product);tx.Commit();}}using (var session1 sessionFactory.OpenSession()){var product1 session1.GetProduct(productId);}using (var session2 sessionFactory.OpenSession()){var product2 session2.GetProduct(productId);} } 10. 在Main方法中调用ConfigureSystem和TestLoadEntity方法 static void Main(string[] args) {ConfigureSystem();TestLoadEntity();Console.Write(\r\nHit enter to exit:);Console.ReadLine(); } 11. 运行程序验证没有select语句生成。这说明二级缓存起作用了。 12. 现在改变cache.use_second_level_cache设置为false再次运行程序。这次有两个select语句发送到数据库如下图所示 很明显除了insert语句外还有两个select语句每个session对象一个用来加载product实体。 在这个例子中我们学会了如何配置程序以便NHibernate使用二级缓存也学会了如何配置实体映射以便它们可以被缓存到二级缓存中。转载于:https://www.cnblogs.com/nianming/archive/2011/11/17/2253201.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/90430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站技术开发设计网站如果直接点击拨打电话

一、Java文件内容查找的基本原理 在Java中,文件内容查找可以通过读取文件并逐行检查每一行内容来实现。基本的流程包括以下几个步骤: 打开文件:使用Java的文件操作类(如FileInputStream)打开要查找的文件。 逐行读取…

做一个电影网站需要多少钱高端网站哪种好

基于51单片机的LCD1602电子钟闹钟proteus仿真设计 基于51单片机的LCD1602电子钟闹钟proteus仿真设计功能介绍:仿真图:原理图:设计报告:程序:器件清单:资料清单&&下载链接: 基于51单片机…

建筑人才网招收土建预算员实学生重庆排名优化整站优化

在学习harmonyOS时,原本是好好运行的。但是突然报错 ToDoListItem({ item }) does not meet UI component syntax. 一脸懵逼,以为是自己语法问题检查了半天也没问题。 网上搜索了一下,说把多余的js\map文件删除就行 才发现我的 鸿蒙的开…

html5做网站的代码wordpress 4.9升级

在Web3技术迅速发展的时代,寻找一个综合且深入的Web3开发工具和学习项目资源平台变得至关重要。今天,我将向大家介绍一个非常有价值的网站,它就是https://web3x.world 。 Web3X是一个全面而深入的Web3开发者社区,为开发者们提供了…

哪些国家网站无须备案容易做的html5的网站

什么是原型模式 区别于单例模式,原型模式的一个类可以有多个实例化的对象。 原型模式通过拷贝来产生新的对象,而不是new,并且可以根据自己的需求修改对象的属性。 实现Cloneable接口实现拷贝 而拷贝又分为浅拷贝和深拷贝,两者在…

广州技术支持 骏域网站建设凡科网怎么注销

目录 0 专栏介绍1 从路径到轨迹2 基于贝塞尔曲线的粗轨迹生成2.1 路径关键点提取2.2 路径点航向角计算2.3 贝塞尔曲线轨迹生成 3 算法仿真3.1 ROS C仿真3.2 Python仿真 0 专栏介绍 🔥课设、毕设、创新竞赛必备!🔥本专栏涉及更高阶的运动规划…

wordpress 图片 分离网站优化快照

antv L7结合高德地图使用 一、设置底图二 、添加antv L7 中要使用的dome1. 安装L7 依赖2. 使用的dome 、以下使用的是浮动功能3. 运行后显示 自定义样式修改1. 设置整个中国地图浮动起来 自定义标注点1. 静态标注点2. 动态标注点(点位置需要自己改)3. 完…

如何建立公司网站网页水果网站源码

环境: Unbuntu 22.04 问题描述: Ubuntu上如何部署Nginx? 解决方案: 在Ubuntu上部署Nginx是一个相对简单的过程,以下是详细的步骤指南。我们将涵盖安装Nginx、启动服务、配置防火墙以及验证安装是否成功。 1. 更新…

广州代做网站怎么提高自己网站的流量

行为型模式-状态模式 8.7状态模式8.7.1概念8.7.2场景8.7.3优势 / 劣势8.7.4状态模式可分为8.7.5状态模式8.7.6实战8.7.6.1题目描述8.7.6.2输入描述8.7.6.3输出描述8.7.6.4代码 8.7.7总结 8.7状态模式 8.7.1概念 ​ 状态模式是指对象在运行时可以根据内部状态的不同而改变它们…

国内最好的搜索引擎长沙网站关键词seo

文章目录 0. 前言1. 无痛入门1.1 飞书创建群聊机器人1.2 Webhook 请求示例1.3 设置安全策略 2. 实战3. 总结3.1 使用体验3.2 深入使用建议 先进团队用飞书,先进飞书群聊有...... 0. 前言 科技蓬勃发展的今天,我们可以轻松拥有属于自己/团队的机器人。日…

做网站网页尺寸是多少无锡网站制作那些

原文地址: https://debezium.io/blog/2019/02/19/reliable-microservices-data-exchange-with-the-outbox-pattern/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. 使用发件箱模式进行可靠的微服务数…

可信的移动网站建设wordpress积分商城插件

新能源场站和区域电网作为复杂且具有动态特性的大规模电力系统,需要实时仿真测试来验证其性能、稳定性和响应能力。在这种背景下,多核并行仿真运算显得尤为重要。多核并行仿真能够同时处理电力系统的复杂模型,加速仿真过程,实现接…

网站建设与设计饰品中小学生做的网站

在IDEA中,如果控制台输出的中文字符显示为乱码,可能是因为控制台的编码设置不正确。你可以尝试以下方法来解决此问题: 方法1:更改IDEA控制台编码 打开IDEA的设置:File -> Settings(Windows/Linux&…

昆山做网站多少钱网站开发vs2013

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从…

免费建网站讨论aws配置wordpress

华为二面!!!被问常用API,这也太偏门了吧,我秀了一波hhhh~常用API一、API概述二、Scanner类代码三、Random类代码四、* ArrayList类**存储基本数据类型**代码五、匿名对象昨天我去了华为面试,问我常用API,我以为我被搞到…

珠江新城网站建设店铺设计软件

winreg模块 进入系统注册表的方法多种多样,最常见的就是运行窗口输入命令“regedit”,即可进入注册表,而Python的winreg模块可以对注册表进行一系列操作 "winreg"中的各个常量 注册表地址(HKEY_ )常量 winreg.HKEY_CLASSES_ROOT #存储应用和shell的信息 winreg…

卡盟网站建设公司中企动力科技股份有限公司是国企吗

目录: Java中的关键字 static关键字final关键字Java中的权限修饰符代码块 构造代码块静态代码块接口 接口的介绍接口的定义和特点接口的成员特点接口的案例接口中成员方法的特点枚举随堂小记 继承方法重写抽象类模板设计模式staticfinal权限修饰符接口回顾上午内容…

Godaddy优惠码网站怎么做的婚庆企业网站建设

实现思路: 在按钮上绑定一个点击事件,默认是true;在export default { }中注册变量给卡片标签用v-if判断是否要显示卡片,ture则显示;在卡片里面写好你想要展示的数据;给卡片添加一个取消按钮,绑…

营销型网站建设设计服务公司文化墙创意设计

Geekbench 6 是一款跨平台的系统性能测试软件,可以对处理器和内存等硬件进行评测,并提供了单核和多核两种测试模式。该软件适用于 Windows、macOS、Linux 和 iOS 等多种操作系统平台。 Geekbench 6 测试可以帮助用户快速准确地了解自己设备的性能表现&am…