WEB开发网
开发学院WEB开发ASP 解决ASP MemCache组件的长度限制问题 阅读

解决ASP MemCache组件的长度限制问题

 2010-10-03 13:52:43 来源:WEB开发网   
核心提示:根据文章《ASP MemCache组件介绍》和《memcached for Win32 安装配置》的介绍,下载安装memcached for win32和asp Memcache组件都一切顺利,解决ASP MemCache组件的长度限制问题,但在使用过程中发现不能缓存大块内容,超过4096字节就会出错:codesky.

根据文章《ASP MemCache组件介绍》和《memcached for Win32 安装配置》的介绍,下载安装memcached for win32和asp Memcache组件都一切顺利,但在使用过程中发现不能缓存大块内容,超过4096字节就会出错:

codesky.aspmemcache 错误 '8000ffff' 

Max line length exceeded. 

遗憾,不支持大数据,但我要写来缓存搜索的结果数据,避免频繁的执行数据库搜索消耗大量资源。

既然他不支持大数字,那么我就将数据分节存储,每次存储指定大小的数字,读取时再将数据组合。也就是用ASP将最终数据按指定长度分段进行cache,并缓存一个分段位,读取时,先读取分段位,根据分段位的记录,再读取相应的分段数据,最终进行组合,还原原始数据。

针对以上需求,我分别写了三个函数用来控制cache的添加、读取和删除。

<%
'--------------------------------------------
' Memcache
'--------------------------------------------
public Function memcache_set(ByVal SID, ByVal STR, ByVal cacheTime)
	Dim MemCache,mmSize,mmLen,i
	mmSize = 3000	'按3000个字符分割 
	mmLen = 0
	Set MemCache = Server.CreateObject("codesky.aspmemcache")
	MemCache.connect "127.0.0.1:11211"
	If MemCache.get(SID) = "" Then
		If Len(STR) > mmSize Then
			For i=1 To len(str) Step mmSize
				mmLen = mmLen + 1
				MemCache.store SID & mmLen, Mid(STR,i,mmSize), cacheTime
			Next
		Else
			mmLen = mmLen + 1
			MemCache.store SID & mmLen, STR, cacheTime
		End If
		MemCache.store SID, mmLen, cacheTime
	End If
	memcache.close()
	memcache_set = True
End Function

Public Function memcache_get(ByVal SID)
	Dim MemCache,mmLen,i
	memcache_get = ""
	Set MemCache = Server.CreateObject("codesky.aspmemcache") 
	MemCache.connect "127.0.0.1:11211"
	mmLen = MemCache.get(SID)
	If mmLen = "" Then mmLen = 0
	For i = 1 To mmLen
		memcache_get = memcache_get & MemCache.get(SID & i)
	Next 
	memcache.close()
End Function

Public Function memcache_del(ByVal SID)
	Dim MemCache,mmLen,i
	Set MemCache = Server.CreateObject("codesky.aspmemcache") 
	MemCache.connect "127.0.0.1:11211"
	mmLen = MemCache.get(SID)
	For i = 1 To mmLen
		MemCache.delkey(SID & i)
	Next
	MemCache.delkey(SID)
	memcache.close()
End Function
%>

调用演示:

<!--#include file="memcache.asp"-->
<%
Dim SID,STR,STIME
SID = "44f10ca30fe602098eaa1429b38a40cc"
STR = "<html><head><title>iphone - 搜索 - WEB开发网</title> ... </html>"	'--内容较多就不全写了
STIME = 3600	'--缓存一小时

If memcache_get(SID) = "" Then
	'--当前缓存为空,设置缓存,并输出内容
	Call memcache_set(SID,STR,STIME)
	Response.Write STR
Else
	'--已经缓存,直接从缓存输出
	Response.Write memcache_get(SID)
End If
%>

希望能给需要的朋友带来一些思路,WEB开发网感谢大家的支持。

Tags:MemCache

编辑录入:coldstar [复制链接] [打 印]
赞助商链接