至于缓存的作用,我想我也不用再多说了,它的作用已经很明显,特别是对于信息量非常大或是全数据库页面的网站,他能很好地利用主机的内存资源,加速ASP的执行效率,减轻服务器的.负担,而动网在这一方面做得是最突出的,像他现在的dvbbs7.1.0版,更是在缓存的利用上更上一层楼,前后台大多的操作都和缓存有关,而现在动网里用的也就是迷城浪子的缓存类,下面列出动网的三大高手写的ASP缓存类
木鸟写的
复制代码 代码如下:
'***
'vbsCache类
'
'属性valid,是否可用,取值前判断
'属性name,cache名,新建对象后赋值
'方法add(值,到期时间),设置cache内容
'属性value,返回cache内容
'属性blempty,是否未设置值
'方法makeEmpty,释放内存,测试用
'方法equal(变量1),判断cache值是否和变量1相同
'方法expires(time),修改过期时间为time
'木鸟2002.12.24
'
'***
classCache
privateobj'cache内容
privateexpireTime'过期时间
privateexpireTimeName'过期时间application名
privatecacheName'cache内容application名
privatepath'uri
privatesubclass_initialize()
path=ervariables("url")
path=left(path,instrRev(path,"/"))
endsub
privatesubclass_terminate()
endsub
publicpropertygetblEmpty
'是否为空
ifisempty(obj)then
blEmpty=true
else
blEmpty=false
endif
endproperty
publicpropertygetvalid
'是否可用(过期)
ifisempty(obj)ornotisDate(expireTime)then
valid=false
elseifCDate(expireTime)<nowthen
valid=false
else
valid=true
endif
endproperty
publicpropertyletname(str)
'设置cache名
cacheName=str&path
obj=application(cacheName)
expireTimeName=str&"expires"&path
expireTime=application(expireTimeName)
endproperty
publicpropertyletexpires(tm)
'重设置过期时间
expireTime=tm
application(expireTimeName)=expireTime
ck
endproperty
publicsubadd(var,expire)
'赋值
ifisempty(var)ornotisDate(expire)then
exitsub
endif
obj=var
expireTime=expire
application(cacheName)=obj
application(expireTimeName)=expireTime
ck
endsub
publicpropertygetvalue
'取值
ifisempty(obj)ornotisDate(expireTime)then
value=null
elseifCDate(expireTime)<nowthen
value=null
else
value=obj
endif
endproperty
publicsubmakeEmpty()
'释放application
application(cacheName)=empty
application(expireTimeName)=empty
ck
obj=empty
expireTime=empty
endsub
publicfunctionequal(var2)
'比较
iftypename(obj)<>typename(var2)then
equal=false
elseiftypename(obj)="Object"then
ifobjisvar2then
equal=true
else
equal=false
endif
elseiftypename(obj)="Variant()"then
ifjoin(obj,"^")=join(var2,"^")then
equal=true
else
equal=false
endif
else
ifobj=var2then
equal=true
else
equal=false
endif
endif
endfunction
endclass
木鸟类例子vbsCache类
'
'属性valid,是否可用,取值前判断
'属性name,cache名,新建对象后赋值
'方法add(值,到期时间),设置cache内容
'属性value,返回cache内容
'属性blempty,是否未设置值
'方法makeEmpty,释放内存,
'方法DelCahe,删除内存
'方法equal(变量1),判断cache值是否和变量1相同
'方法expires(time),修改过期时间为time
'用法
setmyCache=NewCache
="BoardJumpList"'定义缓存名
dthen'判断是否可用(包括过期,与是否为空值)
e'输出
else
................
BoardJumpList=xxx
oardJumpList,dateadd("n",60,now)'写入缓存内容,过期时间
eBoardJumpList'输出
endif
Empty()释放内存
ahe()删除缓存
迷城浪子写的
复制代码 代码如下:
ClassCls_Cache
Rem==================使用说明====================
Rem=本类模块是动网先锋原创,作者:迷城浪子。如采用本类模块,请不要去掉这个说明。这段注释不会影响执行的速度。
Rem=作用:缓存和缓存管理类
Rem=公有变量:Reloadtime过期时间(单位为分钟)缺省值为14400
Rem=MaxCount缓存对象的最大值,超过则自动删除使用次数少的对象。缺省值为300
Rem=CacheName缓存组的总名称,缺省值为"Dvbbs",如果一个站点中有超过一个缓存组,则需要外部改变这个值。
Rem=属性:Name定义缓存对象名称,只写属性。
Rem=属性:value读取和写入缓存数据。
Rem=函数:ObjIsEmpty()判断当前缓存是否过期。
Rem=方法:DelCahe(MyCaheName)手工删除一个缓存对象,参数是缓存对象的名称。
Rem========================
PublicReloadtime,MaxCount,CacheName
PrivateLocalCacheName,CacheData,DelCount
PrivateSubClass_Initialize()
Reloadtime=14400
CacheName="Dvbbs"
EndSub
PrivateSubSetCache(SetName,NewValue)
Application(SetName)=NewValue
ck
EndSub
PrivateSubmakeEmpty(SetName)
Application(SetName)=Empty
ck
EndSub
PublicPropertyLetName(ByValvNewValue)
LocalCacheName=LCase(vNewValue)
EndProperty
PublicPropertyLetValue(ByValvNewValue)
IfLocalCacheName<>""Then
CacheData=Application(CacheName&"_"&LocalCacheName)
IfIsArray(CacheData)Then
CacheData(0)=vNewValue
CacheData(1)=Now()
Else
ReDimCacheData(2)
CacheData(0)=vNewValue
CacheData(1)=Now()
EndIf
SetCacheCacheName&"_"&LocalCacheName,CacheData
Else
evbObjectError+1,"DvbbsCacheServer","pleasechangetheCacheName."
EndIf
EndProperty
PublicPropertyGetValue()
IfLocalCacheName<>""Then
CacheData=Application(CacheName&"_"&LocalCacheName)
IfIsArray(CacheData)Then
Value=CacheData(0)
Else
evbObjectError+1,"DvbbsCacheServer","TheCacheDataIsEmpty."
EndIf
Else
evbObjectError+1,"DvbbsCacheServer","pleasechangetheCacheName."
EndIf
EndProperty
PublicFunctionObjIsEmpty()
ObjIsEmpty=True
CacheData=Application(CacheName&"_"&LocalCacheName)
IfNotIsArray(CacheData)ThenExitFunction
IfNotIsDate(CacheData(1))ThenExitFunction
IfDateDiff("s",CDate(CacheData(1)),Now())<60*ReloadtimeThen
ObjIsEmpty=False
EndIf
EndFunction
PublicSubDelCahe(MyCaheName)
makeEmpty(CacheName&"_"&MyCaheName)
EndSub
EndClass
迷城浪子类例子
SetWydCache=NewCls_Cache
adtime=0.5'定义过期时间(以分钟为单会)
eName="pages"'定义缓存名
sEmpty()Then''判断是否可用(包括过期,与是否为空值)
e
Else
..................
BoardJumpList=xxx
e=BoardJumpList'写入内容
eBoardJumpList
Endif
ahe("缓存名")删除缓存
slightboy写的'========================
复制代码 代码如下:
'
'========================
'==begin:2004-6-2621:51:47
'==copyright:slightboy(C)1998-2004
'
'========================
'========================
'DimApplication(2)
'Application(0)Counter计数器
'Application(1)dateTime放置时间
'Application(2)Content缓存内容
PublicPREFIX
PublicPREFIX_LENGTH
PrivateSubClass_Initialize()
PREFIX="Cached:"
PREFIX_LENGTH=7
EndSub
PrivateSubClass_Terminate
EndSub
'设置变量
PublicPropertyLetCache(ByRefKey,ByRefContent)
DimItem(2)
Item(0)=0
Item(1)=Now()
IF(IsObject(Content))Then
SetItem(2)=Content
Else
Item(2)=Content
EndIF
ck
Application(PREFIX&Key)=Item
EndProperty
'取出变量计数器++
PublicPropertyGetCache(ByRefKey)
DimItem
Item=Application(PREFIX&Key)
IF(IsArray(Item))Then
IF(IsObject(Item))Then
SetCache=Item(2)
Else
Cache=Item(2)
EndIF
Application(PREFIX&Key)(0)=Application(PREFIX&Key)(0)+1
Else
Cache=Empty
EndIF
EndProperty
'检查缓存对象是否存在
PublicPropertyGetExists(ByRefKey)
DimItem
Item=Application(PREFIX&Key)
IF(IsArray(Item))Then
Exists=True
Else
Exists=False
EndIF
EndProperty
'得到计数器数值
PublicPropertyGetCounter(ByRefKey)
DimItem
Item=Application(PREFIX&Key)
IF(IsArray(Item))Then
Counter=Item(0)
EndIF
EndProperty
'设置计数器时间
PublicPropertyLetdateTime(ByRefKey,ByRefSetdateTime)
DimItem
Item=Application(PREFIX&Key)
IF(IsArray(Item))Then
Item(1)=SetdateTime
EndIF
EndProperty
'得到计数器时间
PublicPropertyGetdateTime(ByRefKey)
DimItem
Item=Application(PREFIX&Key)
IF(IsArray(Item))Then
dateTime=Item(1)
EndIF
EndProperty
'重置计数器
PublicSubResetCounter()
DimKey
DimItem
ck
ents
IF(Left(Key,PREFIX_LENGTH)=PREFIX)Then
Item=Application(Key)
Item(0)=0
Application(Key)=Item
EndIF
Next
EndSub
'删除某以缓存
PublicSubClear(ByRefKey)
ve(PREFIX&Key)
EndSub
'清空没有使用的缓存
PublicSubClearUnused()
DimKey,Keys,KeyLength,KeyIndex
ents
IF(Left(Key,PREFIX_LENGTH)=PREFIX)Then
IF(Application(Key)(0)=0)Then
Keys=Keys&VBNewLine&Key
EndIF
EndIF
Next
Keys=Split(Keys,VBNewLine)
KeyLength=UBound(Keys)
ck
ForKeyIndex=1ToKeyLength
ve(Keys(KeyIndex))
Next
EndSub
'清空所有缓存
PublicSubClearAll()
DimKey,Keys,KeyLength,KeyIndex
ents
IF(Left(Key,PREFIX_LENGTH)=PREFIX)Then
Keys=Keys&VBNewLine&Key
EndIF
Next
Keys=Split(Keys,VBNewLine)
KeyLength=UBound(Keys)
ck
ForKeyIndex=1ToKeyLength
ve(Keys(KeyIndex))
Next
EndSub
EndClass
slightboyn类例子SetWyd=NewJayCache
Time("Page")=时间
ts("Page")Then
e("Page")'输出
Else
e("Page")=xxx写入
exxx
EndIF
r("page")'删除缓存