解决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开发网感谢大家的支持。
- ››解决AssetsLibrary无法获取本地所有相册
- ››memcache与memcached的区别与安装
- ››解决ASP MemCache组件的长度限制问题
- ››memcached for Win32 安装配置
- ››memcached的最新状态
- ››memcached 和 Grails,第 1 部分:安装和使用 mem...
- ››memcache支持 for v 7.5
- ››解决ASP导出查询结果到Excel中的身份证号问题
- ››解决ASP.NET 的进程帐户没有访问 IIS的权限
- ››解决ASP脚本运行超时的方法
- ››解决asp.net安装后无法访问oracle数据库问题
- ››解决ASP.NET的进程帐户没有访问 IIS的权限
更多精彩
赞助商链接