缓存技术
来源:互联网 发布:java释放内存空间 编辑:程序博客网 时间:2024/05/21 13:59
如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差。而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能。这样无论有多少人访问都只访问一次数据库,数据库压力不变。
缓存(Cache)是一种用空间换取时间的技术,存在于计算机中很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取。比如CPU二级缓存、内存、windows文件读取缓存。
缓存存在失效的问题:为了保证从缓存中读取数据和慢速数据(数据库)中数据一致,则需要在慢速数据(数据库)中对应的数据发生变化的时候,清除缓存中相应的数据(缓存依赖)。
缓存是改进网站性能的第一个手段,就像索引是改进数据库性能的第一个手段一样。ASP.net缓存主要分为:页面缓存(中庸)、数据源缓存(最不灵活的)、数据缓存(灵活)这三种主要类型。
页面缓存
给页面添加<%@ OutputCache Duration=“15” VaryByParam=“none”%>标签就可以启用页面缓存,这样整个页面的内容都会被缓存,页面中的ASP.Net代码、数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容Duration表示缓存时间,以秒为单位,超过这个时间则缓存失效,再次生成以后会再缓存15秒,以此类推。在Page_Load处设置断点、修改数据库数据测试。这个缓存是在服务器缓存的,不是在客户端,因为用HttpWatch还是能看到向服务器提交的请求的,只不过服务器看到有缓存就没有再执行页面类。一般只有看帖、看新闻、看视频的页面才缓存,CUD的页面没必要缓存。
缓存是针对所有这个页面的访问者。这样1个访问者和1万个访问者、一次访问和100万次访问对数据库的压力是一样的。对于看新闻页面来讲,如果如上设置的话,则会缓存在第一个看到的新闻,因为?id=2、?id=3只是页面的不同参数而已,为了能让不同的新闻各自缓存,因此可以设置VaryByParam=“id”,表示对于相同页面的不同的id参数进行单独缓存。如果有多个确定缓存的参数,则将参数名用分号隔开即可,比如VaryByParam=“id;number”。测试。缓存可能会有过期数据的问题,因此根据需求选用。如果想让任何不同的查询字符串都创建不同的缓存,则设VaryByParam ="*",一般情况下设置“*”就足够。在WebUserControl中也可以像页面缓存一样设置控件的缓存。
数据源缓存
设定ObjectDataSource的CacheDuration(缓存时间:秒),EnableCaching=true。这样每隔CacheDuration指定的时间段才调用
SelectMethod指定的方法来执行数据库查询,其他时候都是直接返回缓存的数据。取数据的过程缓存,在缓存期间,绑定控件向
ObjectDataSource要数据, ObjectDataSource直接将缓存的数据返回给控件,不再去向TypeName指向的类要数据。
缓存依赖
依赖于文件内容 CacheDependency cDep = new CacheDependency(filePath);
依赖于数据库内容(轮询机制/通知机制)一:轮询机制 –fw主动到数据库检查数据是否改变
1.使用C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727中的aspnet_regsql.exe: 注册:aspnet_regsql -S . -E -ed -d
数据库名 -et -t 表名 删除:aspnet_regsql -S . -E -d 数据库名 -dt -t 表名 取消数据库缓存依赖:
aspnet_regsql -S . -E -dd 数据库名 数据库名 列出已注册表:aspnet_regsql -S . -E -d 数据库名 -lt
2.配置web.config(见备注) 3.数据库依赖对象 SqlCacheDependency cDep = new SqlCacheDependency("GSSMS", "Students");
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- 缓存技术
- POJ1458--Common Subsequence
- System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本 解决
- Spring3.x教程(一) Spring及Spring IoC介绍
- SQL学习笔记4
- VS2010 Addins 外接程序(插件)开发
- 缓存技术
- POJ3624--Charm Bracelet--0-1背包
- 高度不够高(站得高才能看的远)
- 如何在12周内由零基础成为一名程序员
- eclipse设置字体大小
- Lock obtain timed out: Lock@的解决方法(lucene)
- fedora下一些与网络配置相关的文件和命令
- 浅析Python中的Python全局变量
- 类的静态成员