• 关于网上流行的缓存类提示错误 '80040001' 的解决办法


    今天看了一下原来是类中有bug,程序员思维不够严谨导致的错误,这个错误并非在所有服务器上都出现,这一点与服务器的IIS解析能力有关,但是不管是否提示错误,bug固然存在,只是出错时间早晚的问题,以下是我修改的无错版缓存类:

    <%
    '作用:缓存和缓存管理类
    '公有变量:OutTimes 过期时间(单位为分钟)缺省值为14400
    'CacheName 缓存组的总名称,缺省值为"Seven",如果一个站点中有超过一个缓存组,则需要外部改变这个值。
    '属性:Name 定义缓存对象名称,只写属性。
    '属性:value 读取和写入缓存数据。
    '函数:ObjIsEmpty()判断当前缓存是否过期。
    '方法:DelCahe(MyCaheName)手工删除一个缓存对象,参数是缓存对象的名称。
    Class DoCache
    Public OutTimes,CacheName
    Private LocalCacheName,CacheData,DelCount
    Private Sub Class_Initialize()
       OutTimes=14400
       CacheName="Seven"
    End Sub
    Private Sub SetCache(SetName,NewValue)
       Application.Lock
       Application(SetName) = NewValue
       Application.unLock
    End Sub
    Private Sub makeEmpty(SetName)
       Application.Lock
       Application(SetName) = Empty
       Application.unLock
    End Sub
    Public Property Let Name(ByVal vNewValue)
       LocalCacheName=LCase(vNewValue)
    End Property
    Public Property Let Value(ByVal vNewValue)
       If LocalCacheName<>"" Then
        CacheData=Application(CacheName&"_"&LocalCacheName)
        If IsArray(CacheData) Then
         CacheData(0)=vNewValue
         CacheData(1)=Now()
        Else
         ReDim CacheData(2)
         CacheData(0)=vNewValue
         CacheData(1)=Now()
        End If
        SetCache CacheName&"_"&LocalCacheName,CacheData
       Else
        Err.Raise vbObjectError + 1, "
    www.7di.net", " please change the CacheName."
       End If
    End Property
    Public Property Get Value()
       If LocalCacheName<>"" Then
        CacheData=Application(CacheName&"_"&LocalCacheName)
        If IsArray(CacheData) Then
         Value=CacheData(0)
        Else
         Err.Raise vbObjectError + 1, "
    www.7di.net", " The CacheData Is Empty."
        End If
       Else
        Err.Raise vbObjectError + 1, "
    www.7di.net", " please change the CacheName."
       End If
    End Property
    Public Function ObjIsEmpty()
       ObjIsEmpty=True
       CacheData=Application(CacheName&"_"&LocalCacheName)
       If Not IsArray(CacheData) Then
        ObjIsEmpty=False
        Exit Function
       End If  
       If Not IsDate(CacheData(1)) Then
        ObjIsEmpty=False
        Exit Function
       End If
       If DateDiff("s",CDate(CacheData(1)),Now()) > 60*OutTimes Then ObjIsEmpty=False
    End Function
    Public Sub DelCahe(MyCaheName)
       makeEmpty(CacheName&"_"&MyCaheName)
    End Sub
    End Class

    '调用方式

    Set MyCache=New DoCache
    MyCache.OutTimes=0.5     '定义过期时间(以分钟为单会)
    MyCache.Name="testcaches"    '定义缓存名
    IF MyCache.ObjIsEmpty() Then   '判断是否可用(包括过期,与是否为空值)
    Response.write "输出的内容是缓存后的数据:"&MyCache.Value
    Else
    BoardJumpList="xxx"
    MyCache.Value=BoardJumpList '写入内容
    Response.write "输出的内容是未缓存的数据:"&BoardJumpList
    End if

    'MyCache.DelCahe("testcaches") '用来清理缓存
    %>


  • 相关阅读:
    Function to use in Queries, Filters
    Dynamics AX 2012
    Job to Import Vendor/Customer Postal Address in Dynamics Ax2012
    To Find or Update customer primary Address in Ax 2012
    Importing Customers, Vendors and Products in AX 2012
    CobaltStrike安装教程
    kali安装dnsdict6
    查看windows端口被占用
    使用reGeorg打穿HTTP隧道代理
    windows建立隐藏用户
  • 原文地址:https://www.cnblogs.com/see7di/p/2239935.html
Copyright © 2020-2023  润新知