做外贸网站建设肉部网站建设包括哪些

diannao/2026/1/16 7:34:09/文章来源:
做外贸网站建设,肉部网站建设包括哪些,深圳做外贸网站公司哪家好,海南网站建设获客介绍 在我以前的文章中#xff0c;我介绍了NONSTRICT_READ_WRITE二级缓存并发机制。 在本文中#xff0c;我将使用READ_WRITE策略继续本主题。 直写式缓存 NONSTRICT_READ_WRITE是一种通读缓存策略#xff0c;可更新最终无效的缓存条目。 尽管这种策略可能很简单#xff0… 介绍 在我以前的文章中我介绍了NONSTRICT_READ_WRITE二级缓存并发机制。 在本文中我将使用READ_WRITE策略继续本主题。 直写式缓存 NONSTRICT_READ_WRITE是一种通读缓存策略可更新最终无效的缓存条目。 尽管这种策略可能很简单但是随着写入操作的增加性能会下降。 对于需要大量写入的应用程序直写式高速缓存策略是更好的选择因为高速缓存条目可以被日期化而不是被丢弃。 因为数据库是记录系统并且数据库操作被包装在物理事务中所以可以同步更新缓存例如TRANSACTIONAL缓存并发策略的情况或异步更新在提交数据库事务之后。 READ_WRITE策略是一种异步缓存并发机制为了防止数据完整性问题例如陈旧的缓存条目它使用了提供工作单元隔离保证的锁定机制。 插入资料 因为持久化的实体是唯一标识的每个实体都分配给一个不同的数据库行所以新创建的实体会在提交数据库事务后立即缓存 Override public boolean afterInsert(Object key, Object value, Object version) throws CacheException {region().writeLock( key );try {final Lockable item (Lockable) region().get( key );if ( item null ) {region().put( key, new Item( value, version, region().nextTimestamp() ) );return true;}else {return false;}}finally {region().writeUnlock( key );} } 对于要在插入时进行缓存的实体它必须使用SEQUENCE生成器 该缓存由EntityInsertAction填充 Override public void doAfterTransactionCompletion(boolean success, SessionImplementor session) throws HibernateException {final EntityPersister persister getPersister();if ( success isCachePutEnabled( persister, getSession() ) ) {final CacheKey ck getSession().generateCacheKey( getId(), persister.getIdentifierType(), persister.getRootEntityName() );final boolean put cacheAfterInsert( persister, ck );}}postCommitInsert( success ); } IDENTITY生成器不能与事务性的后写式第一级缓存设计配合使用因此关联的EntityIdentityInsertAction不会缓存新插入的条目至少在修复HHH-7964之前。 从理论上讲在数据库事务提交和第二级高速缓存插入之间一个并发事务可能会加载新创建的实体因此触发高速缓存插入。 虽然可能但缓存同步滞后非常短如果并发事务被交错则只会使另一个事务命中数据库而不是从缓存中加载实体。 更新资料 尽管插入实体是一个相当简单的操作但是对于更新我们需要同步数据库和缓存条目。 READ_WRITE并发策略采用锁定机制来确保数据完整性 Hibernate Transaction提交过程触发会话刷新 EntityUpdateAction用Lock对象替换当前缓存条目 update方法用于同步缓存更新因此在使用异步缓存并发策略如READ_WRITE时不会执行任何操作 提交数据库事务后 将调用after-transaction-completion回调 EntityUpdateAction调用EntityRegionAccessStrategy的afterUpdate方法 ReadWriteEhcacheEntityRegionAccessStrategy将Lock条目替换为实际的Item 从而封装了实体分解状态 删除资料 从下面的序列图中可以看出删除实体与更新过程类似 Hibernate Transaction提交过程触发会话刷新 EntityDeleteAction用Lock对象替换当前的缓存条目 remove方法调用不执行任何操作因为READ_WRITE是异步缓存并发策略 提交数据库事务后 将调用after-transaction-completion回调 EntityDeleteAction调用EntityRegionAccessStrategy的unlockItem方法 ReadWriteEhcacheEntityRegionAccessStrategy用另一个超时时间增加的Lock对象替换Lock条目 删除实体后其关联的二级缓存条目将被一个Lock对象代替该对象将发出任何随后的请求以从数据库读取而不是使用缓存条目。 锁定构造 Item和Lock类都继承自Lockable类型并且这两个类都有一个特定的策略允许读取或写入缓存条目。 READ_WRITE 锁定对象 Lock类定义以下方法 Override public boolean isReadable(long txTimestamp) {return false; }Override public boolean isWriteable(long txTimestamp, Object newVersion, Comparator versionComparator) {if ( txTimestamp timeout ) {// if timedout then allow writereturn true;}if ( multiplicity 0 ) {// if still locked then disallow writereturn false;}return version null? txTimestamp unlockTimestamp: versionComparator.compare( version, newVersion ) 0; } Lock对象不允许读取缓存条目因此任何后续请求都必须发送到数据库 如果当前会话创建时间戳大于“锁定超时”阈值则允许写入缓存条目 如果至少一个会话设法锁定了该条目则禁止进行任何写操作 如果进入的实体状态已增加其版本或者当前的会话创建时间戳大于当前的条目解锁时间戳则可以使用Lock条目进行写操作 READ_WRITE 项目对象 Item类定义以下读取/写入访问策略 Override public boolean isReadable(long txTimestamp) {return txTimestamp timestamp; }Override public boolean isWriteable(long txTimestamp, Object newVersion, Comparator versionComparator) {return version ! null versionComparator.compare( version, newVersion ) 0; } 仅在缓存条目创建时间之后启动的会话中才可读取项目 Item条目仅在传入实体状态已增加其版本时才允许写入 缓存条目并发控制 当保存和读取底层缓存条目时将调用这些并发控制机制。 在调用ReadWriteEhcacheEntityRegionAccessStrategy get方法时读取缓存条目 public final Object get(Object key, long txTimestamp) throws CacheException {readLockIfNeeded( key );try {final Lockable item (Lockable) region().get( key );final boolean readable item ! null item.isReadable( txTimestamp );if ( readable ) {return item.getValue();}else {return null;}}finally {readUnlockIfNeeded( key );} } 缓存条目由ReadWriteEhcacheEntityRegionAccessStrategy putFromLoad方法编写 public final boolean putFromLoad(Object key,Object value,long txTimestamp,Object version,boolean minimalPutOverride)throws CacheException {region().writeLock( key );try {final Lockable item (Lockable) region().get( key );final boolean writeable item null || item.isWriteable( txTimestamp, version, versionComparator );if ( writeable ) {region().put( key, new Item( value, version, region().nextTimestamp() ) );return true;}else {return false;}}finally {region().writeUnlock( key );} }超时 如果数据库操作失败则当前高速缓存条目将保留一个Lock对象并且无法回滚到其先前的Item状态。 由于这个原因锁必须超时以允许将缓存条目替换为实际的Item对象。 EhcacheDataRegion定义以下超时属性 private static final String CACHE_LOCK_TIMEOUT_PROPERTY net.sf.ehcache.hibernate.cache_lock_timeout; private static final int DEFAULT_CACHE_LOCK_TIMEOUT 60000; 除非我们重写net.sf.ehcache.hibernate.cache_lock_timeout属性否则默认超时为60秒 final String timeout properties.getProperty(CACHE_LOCK_TIMEOUT_PROPERTY,Integer.toString( DEFAULT_CACHE_LOCK_TIMEOUT ) ); 以下测试将模拟失败的数据库事务因此我们可以观察到READ_WRITE缓存如何仅在超时阈值到期后才允许写入。 首先我们将降低超时值以减少缓存冻结时间 properties.put(net.sf.ehcache.hibernate.cache_lock_timeout, String.valueOf(250)); 我们将使用自定义拦截器手动回滚当前正在运行的事务 Override protected Interceptor interceptor() {return new EmptyInterceptor() {Overridepublic void beforeTransactionCompletion(Transaction tx) {if(applyInterceptor.get()) {tx.rollback();}}}; } 以下例程将测试锁定超时行为 try {doInTransaction(session - {Repository repository (Repository)session.get(Repository.class, 1L);repository.setName(High-Performance Hibernate);applyInterceptor.set(true);}); } catch (Exception e) {LOGGER.info(Expected, e); } applyInterceptor.set(false);AtomicReferenceObject previousCacheEntryReference new AtomicReference(); AtomicBoolean cacheEntryChanged new AtomicBoolean();while (!cacheEntryChanged.get()) {doInTransaction(session - {boolean entryChange;session.get(Repository.class, 1L);try {Object previousCacheEntry previousCacheEntryReference.get();Object cacheEntry getCacheEntry(Repository.class, 1L);entryChange previousCacheEntry ! null previousCacheEntry ! cacheEntry;previousCacheEntryReference.set(cacheEntry);LOGGER.info(Cache entry {}, ToStringBuilder.reflectionToString(cacheEntry));if(!entryChange) {sleep(100);} else {cacheEntryChanged.set(true);}} catch (IllegalAccessException e) {LOGGER.error(Error accessing Cache, e);}}); } 运行此测试将生成以下输出 selectreadwritec0_.id as id1_0_0_,readwritec0_.name as name2_0_0_,readwritec0_.version as version3_0_0_ fromrepository readwritec0_ wherereadwritec0_.id1updaterepository setnameHigh-Performance Hibernate,version1 whereid1 and version0JdbcTransaction - rolled JDBC Connectionselectreadwritec0_.id as id1_0_0_,readwritec0_.name as name2_0_0_,readwritec0_.version as version3_0_0_ fromrepository readwritec0_ wherereadwritec0_.id 1Cache entry net.sf.ehcache.Element3f9a0805[keyReadWriteCacheConcurrencyStrategyWithLockTimeoutTest$Repository#1,valueLock Source-UUID:ac775350-3930-4042-84b8-362b64c47e4b Lock-ID:0,version1,hitCount3,timeToLive120,timeToIdle120,lastUpdateTime1432280657865,cacheDefaultLifespantrue,id0 ] Wait 100 ms! JdbcTransaction - committed JDBC Connectionselectreadwritec0_.id as id1_0_0_,readwritec0_.name as name2_0_0_,readwritec0_.version as version3_0_0_ fromrepository readwritec0_ wherereadwritec0_.id 1Cache entry net.sf.ehcache.Element3f9a0805[keyReadWriteCacheConcurrencyStrategyWithLockTimeoutTest$Repository#1,valueLock Source-UUID:ac775350-3930-4042-84b8-362b64c47e4b Lock-ID:0,version1,hitCount3,timeToLive120,timeToIdle120,lastUpdateTime1432280657865,cacheDefaultLifespantrue,id0 ] Wait 100 ms! JdbcTransaction - committed JDBC Connectionselectreadwritec0_.id as id1_0_0_,readwritec0_.name as name2_0_0_,readwritec0_.version as version3_0_0_ fromrepository readwritec0_ wherereadwritec0_.id 1 Cache entry net.sf.ehcache.Element305f031[keyReadWriteCacheConcurrencyStrategyWithLockTimeoutTest$Repository#1,valueorg.hibernate.cache.ehcache.internal.strategy.AbstractReadWriteEhcacheAccessStrategy$Item592e843a,version1,hitCount1,timeToLive120,timeToIdle120,lastUpdateTime1432280658322,cacheDefaultLifespantrue,id0 ] JdbcTransaction - committed JDBC Connection 第一个事务尝试更新实体因此在提交事务之前关联的第二级缓存条目已被锁定。 第一个事务失败它被回滚 持有锁因此接下来的两个连续事务将进入数据库而不用当前已加载的数据库实体状态替换Lock条目 在Lock超时期限到期后第三笔交易最终可以用Item缓存条目替换Lock 保持实体分解为水合状态 结论 READ_WRITE并发策略具有直写式缓存机制的优点但是您需要了解它的内部工作原理才能确定它是否适合您当前的项目数据访问要求。 对于繁重的写争用方案锁定结构将使其他并发事务进入数据库因此您必须确定同步高速缓存并发策略是否更适合这种情况。 代码可在GitHub上获得 。 翻译自: https://www.javacodegeeks.com/2015/05/how-does-hibernate-read_write-cacheconcurrencystrategy-work.html

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

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

相关文章

seo做的比较好的网站的几个特征夜月直播免费下载

ubuntu安装zsh、oh-my-zsh及常用配置 目前,ubuntu默认的shell是bash,但还有一种shell,叫做zsh它比bash更加强大,功能也更加完善,zsh虽说功能强大,但是配置比较复杂导致流行度不是很高 但是好东西终究是好…

主办单位性质与网站名称不符我在某网站网站做代理

400V功率放大器是一台非常实用的讯号放大器,它具有体积小、重量轻及操作方便,较高的电压输出(400Vp-p)以及较大的输出电流(2.8Ap-p)等优点。 HAP-4001连续输出直流电流量最大值达到0.5 A,电压放大增益40倍&#xff0c…

西宁网站制作哪里好北京网站关键字优化

一、ES数据基础类型 1、数据类型 字符串 主要包括: text和keyword两种类型,keyword代表精确值不会参与分词,text类型的字符串会参与分词处理 数值 包括: long, integer, short, byte, double, float 布尔值 boolean 时间 date 数组 数组类型不…

台州网站优化公司一级a做爰片迅雷网站

首先下载python地址: https://www.python.org/downloads/release/python-361/下载页面中有多个版本: web-based installer 是需要通过联网完成安装的 executable installer 是可执行文件(*.exe)方式安装 embeddable zip file 嵌入式版本,可…

食品 药品 监督 网站 源码 php全球设计师知识更新服务平台

一、引入 多关键字排序:假如现在有一个员工表。要求按照薪资排序,薪资相同的员工按照年龄排序。 先按照年龄进行排序,再按照薪资进行稳定的排序 按照这种思路我们对[32,13,94,52,17,54,93]排序: 先比较十位数的数字大小&#…

招远建网站专业营销网站开发

v-model 简介 官网是这样解释 v-model 的 v-model 的功能是&#xff0c;实现数据的双向绑定【本质上是 :value 和 input 语法糖】 如果是表单元素&#xff0c;下面两种写法是一样&#xff0c;这时v-model就是语法糖&#xff0c;帮你简化了操作 <input v-model"messag…

网站网络服务器是什么情况wordpress+去掉阅读

语言&#xff1a;C语言软件&#xff1a;Visual Studio 2022笔记书籍&#xff1a;数据结构——用C语言描述如有错误&#xff0c;感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列&#xff0c;对n>0&#xff0c;除第一元素无直接…

网站投资多少钱秦皇岛保障性住房官网

视频格式 关于视频格式的内容,在这里不进行赘述,详细学习可以参考视频格式 视频数据冗余 数据冗余的类型分为哪几种? 图像与视频在数字化过程,即模电转数电过程中会产生数据冗余。从数字信号的统计特征方面,一般将这些数据冗余分为空间冗余,时间冗余,信息熵冗余三大…

火烈鸟门户网站开发贸易类文章网站

迪米特法则的定义 迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何复杂都和我没关系,我就知道你的这些public方法,我就调用这么多,其他的我一概不关心. 迪米特法则对类的低耦…

有注入漏洞的网站源码网站建设公司 未来

2024.3.15 题目来源我的题解方法一 记忆化搜索&#xff08;自顶向下&#xff09;方法二 动态规划&#xff08;自底向上&#xff09; 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2312 我的题解 方法一 记忆化搜索&#xff08;自顶向下&#xff09; 用 f(x,y)表示当木…

站长统计软件沅江网站设计公司

过去一年&#xff0c;ChatGPT 和其他大语言模型&#xff08;LLMs&#xff09;的爆火也带动了向量数据库的发展。 许多用户在搭建检索增强生成&#xff08;RAG&#xff09;系统过程中选择了使用向量数据库 Zilliz Cloud &#xff0c;但 Zilliz Cloud 的功能不止于此&#xff0c;…

公司网站建设意见征集十堰网站搜索优化价格

转载自 学习 Spring Boot 知识看这一篇就够了 从2016年因为工作原因开始研究 Spring Boot &#xff0c;先后写了很多关于 Spring Boot 的文章&#xff0c;发表在技术社区、我的博客和我的公号内。粗略的统计了一下总共的文章加起来大概有六十多篇了&#xff0c;其中一部分是在…

做网站用啥软件好传奇世界页游

来源&#xff1a;http://u6.gg/sDMab前言每次都在网上看到别人说什么某某库性能是如何如何的好&#xff0c;碾压其他的库。但是百闻不如一见&#xff0c;只有自己亲手测试过的才是最值得相信的&#xff0c;本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。JSON不管是在…

网络网站推广首荐乐云seo计算机专业做网站运营

正题 题目大意 将nnn个数分为222个非空的集合&#xff0c;要求两个集合内数的乘积的gcdgcdgcd为111。求方案数 解题思路 拥有相同质因子的数一定要在同一组&#xff0c;枚举质因数然后将拥有的数都用并查集合并然后用联通块数量来求即可。 codecodecode #include<cstdio&…

网站被抄袭怎么投诉建设网站备案不通过怎么办

小波分析是近30年来发展起来的数学分支&#xff0c;是Fourier分析划时代发展的结果&#xff0c;由法国工程师Morlet首先提出&#xff0c;后广泛应用于信号处理、图像处理与分析、地震勘探、故障诊断、自动控制等领域&#xff0c;小波就是小的波形&#xff0c;所谓“小”是指它具…

品牌宣传型企业网站网站推广到底应该怎么做

分析原因 众所周知&#xff0c;在JavaScript中计算两个十进制数的和&#xff0c;有时候会出现令人惊讶的结果&#xff0c;主要原因是计算机将数据存储为二进制所引起的&#xff0c;所以这并不是javascript存在的缺陷&#xff0c;而在其他语言中也有类似的问题。 例如下面的例子…

网站分析软件phpwind wordpress

说明 在开发中分页功能几乎是必不可少的一项功能&#xff0c;使用beego框架开发时&#xff0c;就遇到了分页功能的需求。可能是之前版本并不支持&#xff0c;我发现有很多自己实现的分页功能的封装&#xff0c;在阅读了官方源码时&#xff0c;我发现了分页功能的封装&#xff0…

微信手机网站设计杭州市做外贸网站的公司

1.前提&#xff1a;将连续的动作图片制为图集。 2.在Hierarchy中选中含图集的sprites对象。 3.打开animator组件&#xff0c;点击create创建动画组件 4.添加property选择sprite 5.选择图集需要的部分加入animation。&#xff08;animation使用见animator&#xff09;

响应式网站建站系统qq刷赞网站推广快速

iqoo neo3在不高的价格上还保证了自己的品质&#xff0c;有很高的性能&#xff0c;很不错的屏幕。那么这款手机可以支持无线充电吗&#xff1f;小编为大家介绍关于iqoo neo3的充电方面。1.iqoo neo3可以支持无线充电吗iQOO Neo3 配备了 44W 超级闪充&#xff0c;属于小刀&#…

网站开发是否交印花税棋牌游戏平台

项目场景&#xff1a; uni-app; 获取code&#xff0c;后台解密手机号 问题描述&#xff1a; 每次第一次登陆&#xff0c;后台都会解密失败 原因分析&#xff1a; code获取错误&#xff1b;导致后台的解密key与code不对应 解决方案&#xff1a; 小程序获取手机号之前&#xf…