在JScript中使用缓存技术的实际代码
2023-06-13 09:14:00 时间
在使用VBScript时,我们可以用Application缓存数组来实现缓存,例:
程序代码:
复制代码代码如下:
程序代码:
Dim rs,arr
rs.Open conn,sql,1,1
arr=rs.GetRows()
Application.Lock()
Application("cache")=arr
Applicatoin.UnLock()
在VBScript里,数组是可以存到Application对象里的,但是如果ASP的语言选择为JScript的话,那么就有些不妙了,我们在使用Application储存一个数组时,会出现以下错误:
引用内容:
Application object, ASP 0197 (0x80004005)
Disallowed object use
Cannot add object with apartment model behavior to the application intrinsic object.
在微软的知识库可以找到具体原因如下:
引用内容:
JScript arrays are considered to be "Apartment" COM components. Only Component Object Model (COM) components that aggregate the Free Threaded Marshaler (FTM) can be assigned to Application scope within an Internet Information Server (IIS) 5.0 ASP page. Because an "Apartment" component cannot aggregate the FTM (it cannot allow a direct pointer to be passed to its clients, unlike a "Both with FTM" object), JScript arrays do not aggregate the FTM. Therefore, JScript arrays cannot be assigned to Application scope from an ASP page.
以上描述引用自:PRB: Error When You Store a JScript Array in Application Scope in IIS 5.0
因此,为了解决这个问题,在Google里找了一大会,终于找到了一篇文章《Application对象的Contents和StaticObjects做Cache的一些结论》,解决了这个问题,方法就是使用Application.StaticObject存放一个Scripting.Dictionary对象,然后再使用Scripting.Dictionary对象来存放需要缓存的数据。
据此,写了一个操作缓存的类,实现put、get、remove和clear方法,使用之前,需要在global.asa中添加一个object:
程序代码:
<object id="xbsCache" runat="server" scope="Application" progid="Scripting.Dictionary"></object>
类的实现如下:
<script language="JScript" runat="server">
/**
Title: cache operate class
Description: operate system cache
@Copyright: Copyright (c) 2007
@Author: xujiwei
@Website: http://www.xujiwei.cn/
@Version: 1.0
@Time: 2007-06-29 12:03:45
**/
var xbsCache = {
get: function(key) {
return Application.StaticObjects("xbsCache").Item("Cache."+key);
},
put: function(key, data) {
Application.Lock();
Application.StaticObjects("xbsCache").Item("Cache."+key)=data;
Application.UnLock();
},
remove: function(key) {
Application.Lock();
Application.StaticObjects("xbsCache").Remove("Cache."+key);
Application.UnLock();
},
clear: function() {
Application.Lock();
Application.StaticObjects("xbsCache").RemoveAll();
Application.UnLock();
}
}
</script>
相关文章
- 说真的,不如用ESLint插件替代掉部分技术文档
- Oracle实现全文索引的技术研究(全文索引oracle)
- Linux系统教学:为您开启技术之旅(linux教学)
- Linux IP欺骗技术:防范网络安全的有效手段(linuxip欺骗)
- Redis的序列化技术:增强数据保护(redis序列化作用)
- 用法Redis从库技术指南(redis从库)
- Linux环境下UPnP技术及其应用(linuxupnp)
- NVIDIA将向开源驱动项目Nouveau提供技术文档
- 《软件架构》缓存技术
- SQL Server掩码技术——管理数据泄露风险(sqlserver 掩码)
- 苹果CMS开启Redis缓存技术,极速驱动网站性能(苹果cms开redis)
- 缓存技术Redis现实优势提升性能效率(缓存redis优点)
- 2019年MySQL面试之旅探索技术之路(2019mysql面试)
- 技术基于tp5Redis的最佳并发技术实践(tp5 redis并发)
- 使用SSM框架实现缓存技术Redis的应用(ssm怎么使用redis)
- 实现单项目缓存管理基于Redis的技术探索(单项目redis)
- 哪些情况下值得使用Redis缓存技术(哪些需要做redis缓存)
- 红色的快乐redis缓存技术处理高并发操作(redis缓存高并发操作)
- Redis缓存技术构建数据库基础(redis缓存数据库基础)
- 红色闪电Redis缓存技术的原理(redis缓存技术原理)
- 王健林搅局区块链?万达:先与Centrality技术合作,不牵扯任何ICO
- asp磁盘缓存技术使用的代码
- ASP.NET2.0缓存(Cache)技术深入理解