当前位置: 首页 > news >正文

淘宝网站所用编码合肥小程序开发公司哪家好

淘宝网站所用编码,合肥小程序开发公司哪家好,市场营销的三大战略四大策略,网站编辑人才队伍建设介绍 在我以前的文章中 #xff0c;我介绍了READ_ONLY CacheConcurrencyStrategy #xff0c;这是不可变实体图的显而易见的选择。 当高速缓存的数据可变时#xff0c;我们需要使用读写高速缓存策略#xff0c;本文将介绍NONSTRICT_READ_WRITE二级高速缓存的工作方式。 内… 介绍 在我以前的文章中 我介绍了READ_ONLY CacheConcurrencyStrategy 这是不可变实体图的显而易见的选择。 当高速缓存的数据可变时我们需要使用读写高速缓存策略本文将介绍NONSTRICT_READ_WRITE二级高速缓存的工作方式。 内部运作 提交Hibernate事务后将执行以下操作序列 首先在刷新期间在提交数据库事务之前缓存无效 当前的Hibernate事务 例如JdbcTransaction JtaTransaction 已刷新 DefaultFlushEventListener执行当前的ActionQueue EntityUpdateAction调用EntityRegionAccessStrategy的更新方法 NonStrictReadWriteEhcacheCollectionRegionAccessStrategy从基础EhcacheEntityRegion中删除缓存条目 提交数据库事务后将再次删除缓存条目 完成回调后当前的Hibernate Transaction被调用 当前会话将此事件传播到其内部ActionQueue EntityUpdateAction在EntityRegionAccessStrategy上调用afterUpdate方法 NonStrictReadWriteEhcacheCollectionRegionAccessStrategy调用基础EhcacheEntityRegion上的remove方法 不一致警告 NONSTRICT_READ_WRITE模式不是“ 直 写式”缓存策略因为缓存条目无效而不是被更新。 缓存无效化与当前数据库事务不同步。 即使关联的Cache区域条目两次无效在事务完成之前和之后当缓存和数据库可能分开时仍然存在一个很小的时间窗口。 以下测试将演示此问题。 首先我们将定义Alice事务逻辑 doInTransaction(session - {LOGGER.info(Load and modify Repository);Repository repository (Repository)session.get(Repository.class, 1L);assertTrue(getSessionFactory().getCache().containsEntity(Repository.class, 1L));repository.setName(High-Performance Hibernate);applyInterceptor.set(true); });endLatch.await();assertFalse(getSessionFactory().getCache().containsEntity(Repository.class, 1L));doInTransaction(session - {applyInterceptor.set(false);Repository repository (Repository)session.get(Repository.class, 1L);LOGGER.info(Cached Repository {}, repository); }); 爱丽丝加载一个存储库实体并在她的第一个数据库事务中对其进行修改。 为了在Alice准备提交时产生另一个并发事务我们将使用以下Hibernate Interceptor private AtomicBoolean applyInterceptor new AtomicBoolean();private final CountDownLatch endLatch new CountDownLatch(1);private class BobTransaction extends EmptyInterceptor {Overridepublic void beforeTransactionCompletion(Transaction tx) {if(applyInterceptor.get()) {LOGGER.info(Fetch Repository);assertFalse(getSessionFactory().getCache().containsEntity(Repository.class, 1L));executeSync(() - {Session _session getSessionFactory().openSession();Repository repository (Repository) _session.get(Repository.class, 1L);LOGGER.info(Cached Repository {}, repository);_session.close();endLatch.countDown();});assertTrue(getSessionFactory().getCache().containsEntity(Repository.class, 1L));}} } 运行此代码将生成以下输出 [Alice]: Load and modify Repository [Alice]: select nonstrictr0_.id as id1_0_0_, nonstrictr0_.name as name2_0_0_ from repository nonstrictr0_ where nonstrictr0_.id1 [Alice]: update repository set nameHigh-Performance Hibernate where id1[Alice]: Fetch Repository from another transaction [Bob]: select nonstrictr0_.id as id1_0_0_, nonstrictr0_.name as name2_0_0_ from repository nonstrictr0_ where nonstrictr0_.id1 [Bob]: Cached Repository from Bobs transaction Repository{id1, nameHibernate-Master-Class}[Alice]: committed JDBC Connection[Alice]: select nonstrictr0_.id as id1_0_0_, nonstrictr0_.name as name2_0_0_ from repository nonstrictr0_ where nonstrictr0_.id1 [Alice]: Cached Repository Repository{id1, nameHigh-Performance Hibernate} Alice获取存储库并更新其名称 调用定制的Hibernate Interceptor并启动Bob的事务 由于存储库已从缓存中逐出因此Bob会使用当前数据库快照加载第二级缓存 Alice事务提交但是现在缓存包含Bob刚刚加载的先前数据库快照 如果第三位用户现在将获取存储库实体则他还将看到与当前数据库快照不同的陈旧实体版本。 提交Alice事务后将再次逐出Cache条目并且任何后续实体加载请求都将使用当前数据库快照填充Cache 过时的数据与丢失的更新 当数据库和二级缓存可能不同步时 NONSTRICT_READ_WRITE并发策略会引入一个很小的不一致窗口。 尽管这听起来可能很糟糕但实际上即使我们不使用二级缓存也应始终设计应用程序来应对这些情况。 Hibernate通过其事务性的后台写式第一级缓存提供应用程序级可重复读取并且所有托管实体都将变得过时。 在实体加载到当前的持久性上下文中之后 另一个并发事务可能会对其进行更新因此我们需要防止陈旧数据升级为丢失更新 。 乐观并发控制是处理长时间对话中丢失的更新的有效方法该技术还可以缓解NONSTRICT_READ_WRITE不一致问题。 结论 NONSTRICT_READ_WRITE并发策略是大多数只读应用程序的理想选择如果由乐观锁定机制支持。 对于写密集型方案缓存无效机制将增加缓存未命中率 因此使该技术效率低下。 代码可在GitHub上获得 。 翻译自: https://www.javacodegeeks.com/2015/05/how-does-hibernate-nonstrict_read_write-cacheconcurrencystrategy-work.html
http://www.pierceye.com/news/336378/

相关文章:

  • 开发建设信息的网站广东省建设厅的注册中心网站首页
  • 用cms做的网站 的步骤有域名如何做网站
  • h5个人网站源码江苏启安建设集团有限公司网站
  • 网站开发net教程网站后台登陆路径
  • 织梦网站模板安装教程国外设计有名网站
  • 最专业企业营销型网站建设南充 网站开发
  • 国外有哪些网站做推广的比较好北京展览馆网站建设
  • 国外英语写作网站网站后台 刷新
  • 如何制作自己的网站详情页设计
  • 南京免费自助建站模板wordpress 增加侧边栏
  • 做信息分类网站难吗广告设计公司有哪些
  • 做seo网站优化多少钱网站开发客户哪里找
  • 做网站一定要云解析吗海南公司注册网站
  • 建站之家官网办公装修设计
  • 永康网站建设的公司wordpress 图片分类
  • 网站商务通弹出窗口图片更换设置wordpress4.9 多站点
  • 如何仿制一个网站注册商标设计
  • 网站建设属于什么岗位旅游网站设计模板
  • 自己做的网站怎么链接火车头采集软件开发模型是什么
  • 新网站怎么做才会被收录正品海外购网站有哪些
  • 广东手机网站建设品牌js制作网页计算器
  • 化隆网站建设公司学做网站多久
  • 网站域名如何查询上海室内设计公司哪家好
  • 电子书推送网站怎么做新做的网站如何
  • 网站建设图片怎么加水印电商平台网站建设功能介绍
  • 一个门户网站怎么做金坛网站建设哪家好
  • 大学网站建设图江苏廉政建设网站
  • 班级网站建设方案网页美工的设计要点
  • 微网站搭建流程做网站的广告语
  • 那个网站做外贸canvas做的网站