我们应该缓存原始对象还是排序对象?

时间:2017-05-30 11:00:59

标签: c# caching memcached

我们需要按字母顺序向客户列出城市列表。

我们是否应该缓存从数据库返回的列表(未排序),或者在对列表进行排序后将其缓存(因为它将返回给客户端)?

2 个答案:

答案 0 :(得分:1)

如上所述,最好在数据库中进行排序。除此之外,假设它没有按数据库排序,你应该对它进行排序,然后对其进行缓存或缓存未排序,并在每次从缓存中检索它时对其进行排序吗?

您应该在将其放入缓存之前对其进行排序。将缓存视为不仅存储数据而且存储工作。向客户提供城市列表的工作包括从数据库中检索城市并对其进行排序。

无论一个流程是涉及从数据库还是某个外部API检索数据,或者即使它需要一些应用程序内部长时间运行的流程,也是如此。过程可能会产生一些包含该工作结果的对象,而不仅仅是数据。由您决定是否应缓存某些内容以及持续多长时间。但总的来说,值得考虑的是,您是否可以缓存整个流程的输出而不仅仅是数据检索。

您还可以缓存流程的某些部分。例如,假设您有一个电话,可以返回您公司的前100个产品的实时可用性。也许结果无法缓存,或者只能在短时间内缓存,因为它应该是"实时"数据。但也许计算前100种产品的过程需要更长的时间,并且可以缓存该步骤。现在,您的实时通话只需检查预先计算的产品列表中的可用性。

两个例外: 如果列表真的很短,那么差异可能是微不足道的。 此外,如果您支持多语言应用程序,则排序顺序可能取决于用户的语言。字母顺序因字母而异。在这种情况下,您可能需要根据给定的请求文化对列表进行排序。

答案 1 :(得分:0)

您应该尽可能在服务器端进行排序。 (见Here

然后返回排序列表,以便完成艰苦的工作。然后,您需要决定是否应该缓存信息。缓存允许更快地访问数据,然后每次调用服务器/数据库。

缓存问题是您每次调用都会获得新/新数据。因此,您需要决定是否经常更新此列表。

如果它是表单上的下拉列表,则会定期填充,然后缓存。 如果它是一个注册表单,他们再也不会使用,不要打扰缓存。