我正在实现一个缓存,它将文本文件的内容存储在Web服务器中。当传入的请求到来时,文件的内容将从缓存中流式传输。
在缓存节点中存储文件内容的好方法是什么 - 我应该使用字符串还是字节数组?请讨论每个选项的优缺点。还有其他更好的选择吗?
答案 0 :(得分:0)
它们是文本文件,因此以文本格式存储内容是有意义的。
因此,我建议将文件内容存储为字符串,每个字符串都可以填充File.ReadAllText()
。
这样,访问缓存将产生与文件作为文本加载时相同的结果。
缓存本身最明智的集合可能类似ConcurrentDictionary<string,string>
,您可以键入文件名(或您正在加载的文件的其他唯一标识符)。
典型的文件缓存实现可能是这样的:
public class FileCache
{
private readonly ConcurrentDictionary<string,string> fileContentsCache
= new ConcurrentDictionary<string, string>();
public string ReadAllText(string filePath)
{
return fileContentsCache.GetOrAdd(filePath, File.ReadAllText);
}
}
用法是:
var cache = new FileCache();
var fileText = FileCache.ReadAllText(requestedFilePath);
缓存会将文本拉出(如果它已经在缓存中),或者加载文件并返回字符串(如果不是)。
请注意,如果您希望整个应用程序使用1个全局文件缓存,则可以使FileCache类(及其所有成员)保持静态。