asp緩存類代碼

至於緩存的作用,我想我也不用再多說了,它的作用已經很明顯,特別是對於信息量非常大或是全數據庫頁面的網站,他能很好地利用主機的內存資源,加速ASP的執行效率,減輕服務器的.負擔,而動網在這一方面做得是最突出的,像他現在的dvbbs7.1.0版,更是在緩存的利用上更上一層樓,前後臺大多的操作都和緩存有關,而現在動網裏用的也就是迷城浪子的緩存類,下面列出動網的三大高手寫的ASP緩存類

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")'刪除緩存