c# – 我们应该缓存原始对象还是已排序的对象?

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

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

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

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

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

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

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

点赞