1. 应用程序缓存
我们在做程序的时候,有时候要经常的读取一些不怎么会改变,
不怎么会更新的内容 , 比如:用户资料信息
这时候我们可以用缓存,把这些信息用某种Key的Cache保存在服务器端,
当有用户要读取关于跟这个Key相关的信息时,用户就不用再去读数据据,
直接从Cache读取,这样就可以减少数据库的读取次数,大大提高应用程序的性能.
代码: VB.Net(比如我们要把一个用户的信息保存在Cache里, 假设用户信息在dt里)
Dim sqls as String = "select * from Userinfo where username='XXX' "
Dim dt as DataTable = XClass.getDataTableBySql(sqls) (相信可以看得懂,看不懂,英语再去读几个月)
''''''''''''''''Cache''''''''''''''''
Imports System
Imports System.Data
Public Class WebClass
Inherits System.Web.UI.Page
'全局page
private page As System.Web.UI.Page
Public Sub New()
End Sub
'创建一个返回DataTable的方法
Public Function GetUserInfo(user As String,page As Page) As DataTable
Me.page = page
Dim sqls as String = "select * from Userinfo where username='XXX' "
Dim dt as DataTable
If page.Cache("DBUserInfo" & user) Is Nothing Then
dt = XClass.getDataTableBySql(sqls)
Dim callBack As CacheItemRemovedCallback = New CacheItemRemovedCallback(AddressOf onRemove)
Me.page.Cache.Add("DBUserInfo" & user, dt, Nothing, DateTime.Now.AddHours(1), TimeSpan.Zero,
CacheItemPriority.High, callBack)
Else
dt = CType(Me.page.Cache("DBUserInfo" & user), DataTable)
End If
return dt
End Function
Public Sub onRemove(ByVal key As String, ByVal val As Object, ByVal reason As CacheItemRemovedReason)
Dim callBack As CacheItemRemovedCallback = New CacheItemRemovedCallback(AddressOf onRemove)
Me.page.Cache.Add(key, val & "*", Nothing, DateTime.Now.AddHours(-1), TimeSpan.Zero,
CacheItemPriority.Default, callBack)
End Sub
End Class
'好了,格式就是这样. 如果有个用户第一次访问这个user的信息,就会在服务器创建个key为"DBUserInfo" & user 的Cache
'下次有新用户访问这个用户(user)信息,而且时间又没过期的话,就会直接从Cache去读取,而不用读数据库.
Add 与 Insert 使用情况:
Add:
将指定项添加到 Cache 对象,该对象具有依赖项、过期和优先级策略以及一个委托(可用于在从 Cache 移除插入项时通知应用程序)。如果
Cache 中已保存了具有相同 key 参数的项,则对此方法的调用将失败。若要使用相同的 key 参数改写现有的 Cache 项,请使用 Insert 方法
。
Insert:
向 Cache 对象插入项。使用此方法的某一版本改写具有相同 key 参数的现有 Cache 项。
//////////////////////////////////////////////////////////////////////////////////////////////
2. 页面输出缓存 (挺好用的)
用法: <%@ OutputCache Duration="10000" VaryByParam="page;classid" %>
Duration: 过期时间 (有相对跟绝对之分)
VaryByParam: 最关键的就是这个了(依赖于URL参数: http://domain.com/xx.aspx?page=3&classid=5 )
{
1) 如果这个页是固定的VaryByParam="None" 没事,可以正常运行, 就是说这个页面不依赖于某个URL参数改变而改的情况.
2) 如果这个页面是个列表页, 这个页面依赖的URL参数可能有page,classid等
如果这时候你也写成VaryByParam="None", 不论你点第几页,显示出来都是你第一次访问的页的第几页的页面.
VaryByParam="page: 如果你只是这样写:那你访问的时候,页面数可以改变, 但是呢,classid是不变的.
}
此方法可以用于.aspx页,也可以用于.ascx(用户控件)
<%@ OutputCache Duration="#ofseconds" Location="Any | Client | Downstream | Server | None" Shared="True | False"
VaryByControl="controlname" VaryByCustom="browser | customstring" VaryByHeader="headers" VaryByParam="parametername" %>
其余可以自己去研究.