用application控制cache,不重新查找数据我先自我批评一下,好不好?我原写这个的原因是想给一些初学者一点思路,结果招来大家的一片批评声,等过短时间悄悄的剪下你们的脑瓜子,哈哈哈,不开玩笑了,确实写的不好,阅读性也不是太好的说,哈哈哈,下面我改了一下,说说我的一点思路吧.
先看源码,如果你不能理解的话就看这段
一般的说,要调用的东西是少变换的,但,一些比如首页帖子调用等还是要用缓存提高显示速度的嘛,问题是说不定数据库一年不更新,说不定10秒更新一次,如果设置固定的更新时间的话,我认为这是不太明智的,哈哈哈,你想想这样有多少次的浪费查询或者错过更新的最好时期?我想了一下,认为这样是可以做的:我们设置一个application值,如果这个值是1的话就更新数据库读到缓存中,不是的话就就读取缓存中的老值,.但是,像经典论坛这样的大型论坛,如果这样做有点奢侈,虽然可以判断发帖量超过一定数量时才改application,然后读缓存,这么麻烦还不如定期更新得了.................这是一点我说的,另外,,我也用用GetRows这个数组操作吧,这厮让我不挨了不少........不过确实是个好东西,okok,我就公布源码,当然,还不完善,谁像完善就请继续吧,可看性也变了变,很干净...............
源码:
<% Dim strDbPath
Dim connstr
strDbPath = "data\db.mdb"
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
connstr = connstr & Server.MapPath(strDbPath)
Set conn = Server.CreateObject("Adodb.Connection")
conn.open connstr
function CloseConn()
If IsObject(conn) Then
conn.close
End If
Set conn = nothing
End Function
sub updatedata(size_n)
If isNumeric(application("cachecheck")) = 0 Then
Application.Lock
application("cachecheck") = 1
Application.UnLock
End If
response.write(application("cachecheck"))
If application("cachecheck")=1 Or application("cachecheck")="" Then
Application.Lock
application("cachecheck") =0
Application.UnLock
response.write("更新缓存:"&application("cachecheck"))
sql="select top "&size_n&" * from szd_data"
Set rs=conn.execute(sql)
dim data
If Rs.Eof Then
data="no data"
Else
data=Rs.GetRows()
rs.close
set rs=Nothing
CloseConn()
Application.Lock
application("data") =data
Application.UnLock
End If
End if
data=application("data")
intber=UBound(data)
For ii=0 To intber
response.write(ii+1&"<hr/>")
For i=0 To size_n-1
response.write(data(ii,i)&"<br/>")
Next
Next
End sub
%>
<%Call updatedata(10)%>
再次说明,更新application("cachecheck")才读取数据库更新数据,至于更新application("cachecheck")就看你的需要和方式了.
我做好了心理准备,来吧....................谢谢观赏.
天气:大雨,ccdot发表于2005-10-13 12:46:08,阅读了602次,共有个0回复.