一 服务端缓存
1 Redis
Redis是Key/Value的内存数据库
作用:
缓解数据库的压力将一些不经常变化的而又读取频繁的数据存入redis缓存
Redis支持主从同步。
思路:
首先判断缓存中是否存在,如存在直接从Redis缓存中获取。
如果Redis缓存中不存在,实时读取数据库数据,同时写入缓存(并设定缓存失效的时间)。
缺点:
如果直接修改了数据库的数据而又没有更新缓存,在缓存失效的时间内将导致读取的Redis缓存是错误的数据。
![](/qrcode.jpg)
获取值
RedisClient redisClient = new RedisClient("172.16.147.121",
Console.WriteLine(redisClient.Get<string>("city"));
2 Cache
Cache 是分配在服务器上的一个公共的内存片, 面向的是所有用户.
Cache有时间限制,能存放所有对象,
Insert添加, Remove移除,Cache.Get(key)或索引器获取。
可设置依赖性,优先级,到期管理,效率更高
数据缓存失效控制方法(cache可以指定过期时间)以及数据缓存依赖管理。
缓存依赖:指当事先设定的依赖关系发生变化时,cache 将会失效
1 文件缓存依赖:当磁盘上的一个文件发生变化时自动让cache失效
2当有多个cache信息之间互相关联时,一个cache信息的变化将会引起其它cache的失效
CacheDependency fileDependency =new CacheDependency(Server.MapPath("errors.xml"));
过期策略:从创建cache开始,一段时间后自动过期。
3 传统缓存( Session状态管理:)
InProc:它的数据存储在aspnet_wp.exe 进程中,数据会因为IIS的重启而丢失。
:StateServer :它可以存储于不同的服务器中.
InProc StateServer SQLServer
存储的物理位置: IIS(内存) Windows服务进程(内存) SQLServer数据库(磁盘)
存储的类型限制: 无限制 可以序列化的类型
存储的大小限制: 无限制
使用范围: 当前请求上下文、每用户独立
生命周期: 第一次访问网站创建,超时或Abandon时销毁
安全性: 高(因为存放在服务器端)
优点: 速度快
缺点: 序列化与反序列化消耗CPU资源
SQLServer:
它的数据存储在数据库中,数据不会因为IIS的重启而丢失数据。
后两种方法与InProc最大的区别在于,我们要确保缓存的数据是可序列化的,否则只能用于第一种方式
4 application
存储的物理位置:服务器端内存。
存储的类型限制:任意类型,Application对象可以存放其它对象。所有用户
状态使用的范围:整个应用程序。
存储的大小限制:任意大小。
生命周期:应用程序开始时创建,应用程序结束时销毁。
安全与性能:安全性较高(因为存放在服务器端),不能存放大量数据。
缺点:application不可以指定过期时间,只能通过人工使用Remove或RemoveAll或RemoveAt方法或者关闭应用程序 移除
5 Profile
Profile提供用户个性化设置的机制
Profile可以和Membership结合起来,存储用户自定义数据。在Profile中可以存储各种类型的数据,包括最基本的int、double类型,也可以是复杂的用户自定义类型,比如购物车、用户信息等。
1 先在web.config配置profile节点
2 配置完毕,可以使用Profile类,直接通过类名调用属性(非ajax)
3 AJAX使用Sys.Services.ProfileService.load
二 页面缓存
- OutputCache:页面缓存在内存
<%@ OutputCache Duration="60" VaryByParam="none" %>
2Cookies、ViewState、Hidden]:
1 Cookie的特性:
存储的物理位置:客户端,如果是临时Cookie,存在于浏览器的内存中。如果是永久Cookie,存在于客户端的Cookies文件夹内。
存储的类型限制:字符串。
状态使用的范围:当前请求的上下文都能访问到Cookie,Cookie对每一用户独立。
存储的大小限制:不能大于4k。
生命周期:超过过期时间后失效。
安全与性能:安全性低(因为存放在客户端),对于敏感数据需要考虑加密。可用于长期保存用户设置。
2 ViewState(Asp.net webForm)的特性:
存储的物理位置:客户端表单隐藏字段。
存储的类型限制:可序列化类型。
状态使用的范围:当前页面(控件),对每一用户独立。
存储的大小限制:存储过多的数据会导致提交和打开页面缓慢。
生命周期:于页面生存周期相同。
提供了验证和加密。避免存储大量数据以影响性能。
它比隐藏控件更加安全性,所有的值都是经过hash处理的.
3 隐藏控件 Hidden fields:
<input id="myHiddenField" type="hidden" value="Shubhabrata" />
缓存分类
1 客户端缓存,服务端缓存,很少改动
2 静态缓存,动态缓存。
缓存机制
应用程序缓存:允许开发者将程序生成的数据或报表业务对象放入缓存中。
页输出缓存: 页面缓存在内存
动态缓存主要有以下几种手段:
Ø 传统缓存方式
Ø 页面输出缓存。
Ø 页面局部缓存。
Ø 利用.NET提供的System.Web.Caching 缓存。
Ø 缓存依赖。
缓存能够帮忙我们提到服务质量的三个重要方面:
性能:缓存数据达到数据重用.避免了重复的物理数据加载.
可量测性:数据缓存后,减少了从服务器端加载数据。
实用性:如果其它的系统或者是数据库发生死机,那么仍然可以从缓存中取得数据不受局部硬件的影响。