我一直在使用缓存。我们根据某些密钥存储数据,并在需要时从缓存中获取数据。我知道StackOverflow和许多其他网站严重依赖缓存。我的问题是,他们总是使用键值机制进行缓存,还是在缓存中形成一些类似sql的查询?例如,我想查看上周的报告。该报告的内容每天都会有所不同。我是否需要针对每天存储不同的报告(将日期作为关键字)或者是否可以通过形成一些跨不同密钥汇总结果的查询来获得此结果?是否有任何缓存产品(如redis)提供此功能?
提前致谢
答案 0 :(得分:1)
缓存始终作为键值哈希表完成。这就是它保持这么快的方式。如果你正在进行查询,那么你就不会进行缓存。
您可能要问的是......您可以在数据库中包含一个包含已公布的报告数据的表。您可以查询预先计算的表格。
答案 1 :(得分:1)
缓存(例如memcached)快速的原因之一是其数据访问和查询协议的简单性。 您添加的功能越多,您在效率部分就必须做出更多权衡。一个完整的SQL引擎,在一个"缓存"数据库不是一个好的设计。虽然您可以利用面向数据结构的数据库(如Redis)来设计缓存数据以满足您的查询需求。例如:每个日期一个集合或一个散列。
更进一步,您可以使用像MongoDb或memsql这样的数据库,这些数据库速度非常快,并且具有丰富的查询支持。因此,聚合报告偶尔会成为一个问题。 但是,作为设计决策,您必须接受他们的缓存吞吐量不会像memcached或redis那样多。