日期:2014-05-20  浏览次数:20974 次

一个缓存的疑惑
web的那个Cache是不是只能用于web开发,如果我的一个dll即可用于cs,也用于bs,是不是要另外自己写一个缓存?

我这样来实现缓存是不是合理?,24小时重读一次

VB.NET code

    Private Shared org As New Dictionary(Of String, Organization)
    Private Shared timer As New Timer(Sub()
                                          org.Clear()
                                      End Sub, Nothing, 0, 1000 * 60 * 60 * 24)

    Public Shared Function GetOrganization(ByVal id As String) As Organization

        If Not org.ContainsKey(id) Then

            org.Add(id, 查询数据库得到Organization )

        End If

        Return org(id)

    End Function



------解决方案--------------------
探讨
mark..

谁删我沙发谁木有小JJ

------解决方案--------------------
可以参考下 MS 的 Enterprise Library 的 Caching Application Block
------解决方案--------------------
缓存时间是个问题
------解决方案--------------------
5.1啦,大家怎么玩
------解决方案--------------------
web的那个Cache是不是只能用于web开发,

不是

--------------------

如果我的一个dll即可用于cs,也用于bs,是不是要另外自己写一个缓存?


是否重写要看具体需要(缓存策略), 重写的 定制性、可扩展性要好。

--------------------


我这样来实现缓存是不是合理?,24小时重读一次


时间是否合理要看应用场景,要结合实际制定缓存策略。 但写死在代码中肯定是不合理的,可配置是必须的。
------解决方案--------------------
System.Web.Caching.Cache 类不能在 ASP.NET 应用程序外使用。它是为在 ASP.NET 中用于为 Web 应用程序提供缓存而设计和测试的。

而且在公共类库中引用System.Web.dll是不明智的...

至于缓存策略,空口说都是不合理的...例如天气预报24小时更新就可以,要是新浪的新闻24小时更新新浪早关门了...
------解决方案--------------------
System.Web.HttpRuntime.Cache 是可以在非web项目中使用的,只是不推荐(公共类库中引用System.Web.dll是不明智的)。
------解决方案--------------------
这个东西和 自己的业务有密切的关系。最合适的自己业务的缓存就是最好的。
------解决方案--------------------
System.Web.HttpRuntime.Cache 是可以在非web项目中使用的,我们的企业windows service服务器系统就是使用它支持十几种终端应用程序对服务器的通讯查询时的(本地)数据缓存。
------解决方案--------------------
缓存并不复杂,自己写都可以,.Net自带的缓存也是靠sql触发器实现的,
不过你的24小时,有点长了....
------解决方案--------------------
就lz这个代码来说,我不认为这是缓存,因为缺乏“依赖控制”这个基本特征。

至于24小时是否合适,你只要分析一下有没有更需要缓存的数据、所有这些数据加起来是不是滥用了内存就行了。如果有,那么24小时肯定太长了。

缓存依赖控制主要不是靠时间。时间只是一个上限(最长周期)。当数据编程肮脏的,就应该清除掉。比如csdn的帖子首页列表(比如是一个DataTable或者List<帖子>类型的对象实例)可以缓存,但是当有人提交了回复或者发了新帖子,那么这个就应该自动从缓存中清除掉。而且好的依赖控制方式是用声明的方式而不是编程方式,比如说写:

org.Add(id, 查询数据库得到Organization ,"abcd");

声明为这个缓存单元依赖于某个数据库表abcd的修改事件,或者系统预先设计的通知列表中的abcd这个项目的改变(当这个数据改变时会自动清除成百上千个缓存单元)。
------解决方案--------------------
我觉得楼主说的是可以的

合理的话,就不好说了
------解决方案--------------------
不太明白,微软为什么要把这个缓存类放到System.Web里呢
------解决方案--------------------
缓存如何依赖要看业务了,楼主用dll就要考虑版本的问题了