缓存依赖

java——Spring 中循环依赖 三级缓存 直接循环依赖:两个Bean互相依赖,例如Bean A依赖于Bean B,同时Bean B也依赖于Bean A。间接循环依赖:通过多个Bean形成一个依赖链,最终回到起点,形成一个闭环。一级缓存(singletonObjects):存储已经完全初始化和实例化的Bean对象。这个缓存的目的是确保Bean只初始化一次(是单例的),避免多次实例化相同的Bean对象,提高性能。二级缓存(earlySingletonObjects):存储尚未完成属性注入和初始化的“半成品”Bean对象。 阅读详情

 

   缓存依赖主要由3个核心类来实现:CacheDependency、AggregateCacheDependency、SqlCacheDependency。CacheDependency 类是 AggregateCacheDependency 类和 SqlCacheDependency 类的父类。
    CacheDependency 类  
    在存储于 ASP.NET 应用程序的 Cache 对象中的项与文件、缓存键、文件或缓存键的数组或另一个 CacheDependency 对象之间建立依附性关系。CacheDependency 类监视依附性关系,以便在任何这些对象更改时,该缓存项都会自动移除。例如,假设您基于 XML 文件中的数据创建一个 DataSet 对象。可以利用使 DataSet 依赖于 XML 文件的 CacheDependency 对象将该 DataSet 添加到缓存中。如果该 XML 文件发生更改,则 DataSet 从缓存中移除。可以用 Add 和 System.Web.Caching.Cache.Insert 方法向应用程序缓存中添加具有依赖项的项。
    CacheDependency类用于实现自定义缓存依赖,它有9个构造函数,2个属性,6个方法,具体参考MSDN。
    AggregateCacheDependency类
    组合 ASP.NET 应用程序的 Cache 对象中存储的项和 CacheDependency 对象的数组之间的多个依赖项。无法继承此类。    
    备注:AggregateCacheDependency 类监视依赖项对象的集合,以便在任何依赖项对象更改时,该缓存项都会自动移除。数组中的对象可以是 CacheDependency 对象、SqlCacheDependency 对象、从 CacheDependency 派生的自定义对象或这些对象的任意组合。AggregateCacheDependency 类与 CacheDependency 类的不同之处在于前者允许您将不同类型的多个依赖项与单个缓存项关联。例如,如果您创建一个从 SQL Server 数据库表和 XML 文件导入数据的页,则可创建一个 SqlCacheDependency 对象来表示数据库表的依赖项,以及一个 CacheDependency 来表示 XML 文件的依赖项。可创建 AggregateCacheDependency 类的一个实例,将每个依赖项添加到该类中,而不是为每个依赖项调用 Cache.Insert 方法。然后,可使用单个 Insert 调用使该页依赖于AggregateCacheDependency 实例。
    SqlCacheDependency类
    在以下两者之间建立关系:一是在 ASP.NET 应用程序的 Cache 对象中存储的项;二是特定 SQL Server 数据库表或 SQL Server 2005 查询的结果。无法继承此类。
    备注:SqlCacheDependency 类在所有受支持的 SQL Server 版本 (7.0, 2000, 2005) 上监视特定的 SQL Server 数据库表,以便在该表发生更改时,自动从 Cache 中删除与该表关联的项。
    数据库表发生更改时,将自动删除缓存项,并向 Cache 中添加新版本的项。
    在使用 SQL Server 2005 数据库时,SqlCacheDependency 类还支持与 System.Data.SqlClient.SqlDependency 类进行集成。使用 SQL Server 2005 的查询通知机制来检测使 SQL 查询结果无效的数据更改。与 SQL 查询关联的任何缓存项都将从 System.Web.Caching.Cache 中移除。
    在使用 SQL Server 2005 时,可以使用 SqlCacheDependency 类向应用程序的 Cache 添加依赖于 SQL Server 数据库表或 SQL 查询的项。还可以将此类与 @ OutputCache 指令一起使用,以生成依赖于 SQL Server 数据库表的输出缓存的页或用户控件。最后,在使用 SQL Server 2005 时,可以将 SqlCacheDependency 类与 @ OutputCache 页指令一起使用,以生成依赖于 SQL 查询结果的输出缓存的页。对于用户控件,@ OutputCache 指令不支持使用 SQL Server 2005 的查询通知。
    注意:为使此类在使用基于表的通知时正常工作,必须为数据库及要设置依赖项的任何表启用通知。可通过使用 SqlCacheDependencyAdmin 类的方法或 Aspnet_regsql.exe 命令行工具启用通知。同时,应用程序的 Web.config 文件中必须包含正确的配置设置。将 SqlCacheDependency 对象与 SQL Server 2005 查询通知一起使用不需要任何显式配置。开发人员应参考 SQL Server 2005 联机丛书,以了解使用查询通知时允许的 Transact-SQL 查询类型的限制。
    下面是一个 ASP.NET Web.config 文件示例,该文件对 SQL Server 数据库表启用了基于表的依赖项。


<configuration>
  <connectionStrings>
    <add name="Pubs" connectionString="Data Source=(local); Initial Catalog=pubs; Integrated Security=true"; providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <caching>
      <sqlCacheDependency enabled = "true" pollTime = "60000" >
        <databases>
          <add name="pubs" 
            connectionString = "pubs"
            pollTime = "9000000"
            />
        </databases>
      </sqlCacheDependency>
    </caching>
  </system.web>
</configuration>

   3.3      SqlCacheDependency将应用程序数据缓存对象、页面输出缓存、数据源控件等与指定SQL Server数据库表或Sql Server 2005 查询结果之间建立缓存依赖关系,在表发生更改(Sql Server 2005 行级别更改)时,自动从缓存中删除和重新添加与该表关联的缓存对象。一般而言:

                    SqlCacheDependency (SqlCommand)       用于SQL SERVER 2005

                    SqlCacheDependency (数据库名, 表名)       用于SQL SERVER 7.0/2000

 

vs2005中启用数据库缓存依赖
aspnet_regsql.exe -S localhost -U sa -P sa -d hnfms -ed

aspnet_regsql.exe -S localhost -U sa -P sa -d hnfms -t Applys -et

数据库端启用缓存依赖

ALTER DATABASE hnfms SET ENABLE_BROKER;    

数据库端查询是否启用缓存依赖

  Select DATABASEpRoPERTYEX('hnfms','IsBrokerEnabled')           -- 1 表示已经启用 0 表示没有启用

Web.config中配置

<caching>
    <sqlCacheDependency enabled="true" pollTime="1000">
      <databases>          
      <!--这里配置缓存依赖数据库的连接,
      如果库名填写与实际的库名不正确的话
      会出现"调用的目标发生异常"的错误-->
      <add name="hnfms" connectionStringName="hnfmsConnectionString"/>
     </databases>
    </sqlCacheDependency>
   </caching>

 

Gload.asxm中配置

void Application_Start(object sender, EventArgs e) 
    {
        // 在应用程序启动时运行的代码
        System.Data.SqlClient.SqlDependency.Start(System.Configuration.ConfigurationManager.ConnectionStrings["hnfmsConnectionString"].ConnectionString);
    }
    
    void Application_End(object sender, EventArgs e) 
    {
        // 在应用程序关闭时运行的代码
        System.Data.SqlClient.SqlDependency.Stop(System.Configuration.ConfigurationManager.ConnectionStrings["hnfmsConnectionString"].ConnectionString);
    }
       

 

Spring如何通过三级缓存解决循环依赖 什么是循环依赖 什么是循环依赖?比如如下一个例子 public class A{ private B b; } public class B{ private A a; } 这个例子存在的问题:理论上spring创建A的时候依赖了B,然后spring就会去加载B,但是这个时候B又依赖了A,spring又去加载A,就会陷入一个死循环,但我们在实际使用spring的时候并没有出现这样的循环,这是因为spring设计之初就考虑了这个问题,那么spring是如何解决的呢?我们先要明确的是spring对循环依 阅读详情

相关推荐

缓存依赖.ppt

关于 缓存依赖

Spring大白话--三级缓存解决循环依赖问题

在使用Spring 开发过程中,我们需要对定义后的bean 通过构造方法,或者bean 注入的方式注入到某个类中进而使用改bean 对应的方法,在此过程中就会出现一个类中注入了n多个bean,几个类中bean 相互注入,出现 A 依赖B,B依赖C,C又依赖A/B 这种循环情况的出现。提示:以下是本篇文章正文内容,下面案例可供参考。

拽着尾巴的鱼儿的博客 4909

缓存(依赖文件)

缓存源码 此例子演示的是依赖文件的缓存 例子是一个xml文件

Spring如何解决缓存依赖

循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。这里说的不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。Spring中循环依赖场景主要有以下两种:(1)field属性的循环依赖(2)构造器的循环依赖(3)DependsOn循环依赖。

weixin_54087697的博客 246

Verilog数字钟

使用Verilog语言进行的数字钟的编写,FPGA开发板亲测正常 大学生一个,第一次自己做的东西,写出来分享在这里插入代码片一下,有不对的地方请大家批评指正。 这次的做的题是:设计一个数字钟,该数字钟能进行正常的时,分计时功能,且能对数字钟的时间进行调整。 该数字钟有3个按键,按键1为功能键,用于数字钟在“正常计时”,“时调整”,“分调整”这三个功能之间切换;按键2,3用于调整时间,仅当数字钟处于...

bin_bin_bun的博客 6149

NRF24L01模块的5个常见问题及解决方案:从信号干扰到功耗优化

本文深入探讨NRF24L01无线模块在STM32开发中的5大常见问题及解决方案,包括通信距离优化、数据丢失排查、电源噪声抑制、SPI通信故障处理以及低功耗设计。通过代码示例和电路图分析,提供实用的优化策略,帮助开发者提升无线通信的稳定性和效率。

weixin_28256233的博客 226

一文了解Gradle 依赖管理(五)- 依赖管理&缓存依赖

假设我们开发的App中, Retrofit 2.9.0 依赖 OkHttp 4.9.0,但我们在版本目录中指定了更新的 OkHttp 4.9.3,版本目录是 Gradle 7.0 引入的一项功能,它提供了一种集中管理依赖版本和依赖组的强大方式,尤其适合多模块项目。依赖锁定和版本目录可以很好地结合使用,这种组合确保您既有集中的版本管理,又有确切的依赖锁定,提供最大的可重复性和控制。将依赖图"冻结"在特定的时间点,记录解析的确切版本,确保后续构建使用相同的依赖版本,即使新版本发布。

成长的烧年 1569

VPI与Matlab协同仿真:相干光通信接收端DSP算法全解析

本文详细解析了如何利用VPI与Matlab协同仿真,构建完整的相干光通信接收端DSP算法处理闭环。重点介绍了从VPI导出数据后,在Matlab中实现时钟恢复、偏振解复用和载波相位估计等核心算法的步骤与原理,并阐述了如何通过误码率计算完成仿真验证,为相干光通信系统算法研究与验证提供了高效实用的方法。

ll5678的博客 609

Spring 循环依赖及三级缓存

Spring在启动过程中,使用到了三个map,称为三级缓存。 Spring启动过程大致如下: 1.加载配置文件 2.解析配置文件转化beanDefination,获取到bean的所有属性、依赖及初始化用到的各类处理器等 3.创建beanFactory并初始化所有单例bean 4.注册所有的单例bean并返回可用的容器,一般为扩展的applicationContext 一级缓存 在第三步中,所有单例的bean初始化完成后会存放在一个Map(singletonObjects)中,beanName为key,单例

u012098021的博客 6万+

Robocup 仿真2D 学习笔记(二) 球队代码编译和上场

环境的一些问题 最近在使用rcssserver 和 rcssmonitor时可能会遇到./configure失败的问题,可以检查一下文件夹是否有makefile文件,如果是编译后的包直接sudo make install,如果还不行,还可以源码下载编译 rcssserver: https://sourceforge.net/projects/sserver/files/rcssserver/...

markchalse的博客 6014

Neo4j:入门基础(二)之导入CSV文件

导入CSV文件的方式  主要的两种方式如下:   1、使用 Cypher 命令LOAD CSV,这种方式可以处理中小型数据(可达10 million条记录)   2、使用批量导入工具neo4j-admin ,用来直接导入大数据集 三、上述方式具体导入过程   1、Cypher 命令LOAD CSV 参数 1、USING PERIODIC COMMIT 300 使用批量提交,每满300条提交一次,防止内存溢出 2、WITH HEADERS 从文件中读取第一行作为参数名,...

Puzzle的博客 3万+

php缓存依赖的内容,什么是yii2的缓存依赖?如何使用缓存依赖?

本篇文章给大家带来的内容是介绍什么是yii2的缓存依赖?如何使用缓存依赖?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。概述缓存是Yii2的强大特性之一,合理使用缓存技术可以有效地减小服务器的访问压力。Yii2最基本的缓存包括数据缓存、片段缓存、页面缓存和HTTP缓存,这部分内容在官方文档中有更加详细的说明,这里不再赘述,如有需要可以参考Yii2官方开发文档中的缓存部分。页面缓存数...

weixin_39980347的博客 165

XCP实战系列介绍01-测量与标定底层逻辑介绍

XCP-测量与标定底层代码实现介绍,通过对相关API调用关系介绍加深开发人员对其功能的了解。

initiallizer的博客 1万+

Spring 解决循环依赖为什么需要三级缓存,而不是两级缓存?

本文探讨了Spring框架处理循环依赖的机制,特别是为什么采用三级而非两级缓存。分析了三级缓存如何优雅解决依赖注入和代理问题,确保Bean生命周期的一致性和应用的稳定性。

有来技术 8213

渗透测试面试题

渗透测试面试题 一.思路流程 1.信息收集 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 网站指纹识别(包括,cms,cdn,证书等),dns记录 whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等) 子域名收集,旁站,C段等 google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等 扫描网站目录结构,爆后台,网站banner,测试文件,...

千寻的博客 12万+

ABAP CDS HAVING 全解析:聚合之后的精准过滤、最佳实践与可运行示例

摘要: 本文针对具备ABAP与CDS基础的开发者,详解HAVING在ABAP CDS中的核心用法。HAVING专用于过滤GROUP BY后的聚合结果(如SUM、COUNT),与WHERE的分工明确:前者处理聚合值,后者过滤原始记录。通过销售额阈值、质量分析、财务对账三类典型场景,结合性能优化建议(如优先使用WHERE索引过滤),说明实际应用。文中提供经典CDS View与View Entity两种实现代码,并附Open SQL消费示例,帮助开发者快速落地。常见误区(如聚合条件误写至WHERE)与规避方法亦被

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 219

缓存之数据库缓存依赖

更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能。但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据就是老的数据,从而导致数据的不一致。那有没有办法做到,数据如果不变化,用户就一直从缓存中取数据,一旦数据变化,系统能自动更新缓存中的数据,从而让用户得到更好的用户体验。 答案是肯定的...

weixin_30398227的博客 191

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Yii2缓存依赖

yii2缓存的5种依赖方式: 1:DbDependency 将SQL语句直接作为依赖条件。当数据库查询出的内容发生变化时候,缓存即会受到影响。 $cache = Yii::$app->cache; $dependency_sql = 'SELECT COUNT(*) FROM table '; //依赖sql文的select必须只能是一个值 $dependency = new DbDependency( ['sql' => $dependency_sql] ); $cache-&g.

日常博客 533

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SQL 缓存依赖

SQL 缓存依赖 作用: 使用SQL 缓存依赖技术,可以实现当应用程序中对应的数据库中的数据发生改变时 才清除应用程序中对应的缓存,最大化的提高程序的性能。 实现方法: 一、创建数据库 a) 数据库不能为动态附加的模式 b) 启用数据库中的消息传送功能 alter database CacheDependencyTest set ena...

atg0518的博客 154

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring三级缓存解决循环依赖问题

解析理解在互相依赖的 Bean 是单例的、依赖注入的方式不都是构造注入的前提下如何使用三级缓存解决Spring中的循环依赖的问题。

trong_ 的烂笔头 6227

缓存依赖、数据库缓存依赖学习以及在LinQ当中使用缓存依赖

导读: ◆缘起 ◆缓存简述 ◆缓存依赖简述 ◆自定义缓存依赖分析 ◆数据库缓存依赖学习 ◆LINQ缓存依赖实现 ◆文档更新说明 ◆附:缓存依赖研究项目源码(包括数据库) ◆参考资料 一、缘起 (本文发布于csdn,作者在优快云的博客地址是:http://blog.csdn.net/xpnew/,由于转载会造成图片、格式丢失,以及不能获得文档的最后更新,所以在此特别声

xpnew的技术blog 1038

SQL数据缓存依赖

1.检查当前数据库是否启动SQL Server Service Broker,检测方法: SELECT is_broker_enabled FROM sys.databases WHERE name = '数据库名' 或者 Select DATABASEpRoPERTYEX('数据库名','IsBrokerEnabled') --(1为已启用,0为未启用) 如果当前数据库没有启动SQL Server Service Broker,可以执行:...

ASP.NET 504
上一篇: ASP.Net缓存总结
下一篇: SQL语法大全
beichen_
博客等级 码龄19年 17粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值