首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计缓存系统

设计缓存系统
EN

Software Engineering用户
提问于 2015-02-12 22:19:10
回答 1查看 815关注 0票数 0

我正在考虑创建自己的缓存系统,主要用于C#,但这更多地是一个设计问题,因此语言并不重要。

让我从一开始就开始,我有一个基本的web api,它使用ETag头来检查是否有什么变化。

这是ICachingProvider,它是所有缓存提供程序的基本接口。

代码语言:javascript
复制
public interface ICachingProvider {
    // Writes a caching entry
    void WriteCachingEntry<T>(string uri, string md5, T data);
    // Reads a caching entry sync
    Tuple<string, T> ReadCachingEntry<T>(string uri);
    // Reads a caching entry async
    Task<Tuple<string, T>> ReadCachingEntryAsync<T>(string uri);
    // Clears the cache
    void ClearCache();
    // The current storage size
    long Size { get; }
    // How much can be stored maximum
    long MaxSize { get; }
}

目前,我已经构建了一个MemoryCahingProvider和一个FileSystemCachingProvider,其中最后一个只是在隔离存储中存储JSON文件。

现在我的计划是,也实现一个数据库缓存系统,我希望更好的速度和更少的空间使用,也许我错了。

为了解决这个问题,我不确定应该使用哪种类型的数据库。首先,我想到的只是一个SQLlite数据库,但这并不是真正有效的,因为我有多个类型的元素,类似于Facebook。下一个目标是CouchDB或MongoDB,但我不想在客户端系统上安装比需要的更多的软件。

有人有这种缓存的经验吗?或者有人知道如何构建类似的缓存,以及使用哪种数据库类型?

EN

回答 1

Software Engineering用户

发布于 2015-02-12 22:58:40

您可能想看看MSDN上的System.Web.Caching文档。关于缓存数据,有一些很好的抽象想法,它们与任何系统都相关,包括在网站之外。

例如,CacheDependency类:

在存储在ASP.NET应用程序的缓存对象中的项与文件、缓存键、任意一个或另一个CacheDependency对象的数组之间建立依赖关系。CacheDependency类监视依赖关系,以便当其中任何关系发生变化时,缓存的项将被自动删除。

虽然您的缓存听起来与ASP.NET的缓存没有任何关系,但是在创建自己的缓存时遵循这个示例应该是有益的。

至于您的ICachingProviderOutputCacheProvider声明:

当您从OutputCacheProvider继承时,必须重写以下成员:. Add·Get·Remove·Set

我发现这是一个很好的实践,可以看到微软创建了什么以及他们为类似对象使用的命名约定,然后在我自己的类中重用这些想法。这是有益的,因为其他可能使用您的类并有使用Microsoft类似类的经验的程序员应该更容易实现您的解决方案。

下一个目标是CouchDB或MongoDB,但我不想在客户端系统上安装比需要的更多的软件。

如果您正在构建数据库缓存,那么它不应该关心后端是什么(除非是存储缓存的地方,但随后我问它如何比一般的数据库更快)。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/273072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档