gpt4 book ai didi

asp.net - 缓存来自 sql 数据库的结果,还是每次查询?

转载 作者:行者123 更新时间:2023-12-01 08:17:20 25 4
gpt4 key购买 nike

我正在根据 sql 查询生成页面。

这是查询:

CREATEPROCEDURE sp_searchUsersByFirstLetter 
@searchQuery nvarchar(1)
AS
BEGIN
SET NOCOUNT ON;

SELECT UserName
FROM Users Join aspnet_Users asp on Users.UserId = asp.UserId
WHERE (LoweredUserName like @searchQuery + '%')

我可以为字母表中的每个字母调用此过程,并获取以该字母开头的所有用户。然后,我将这些用户放入我的一个页面上的列表中。

我的问题是:将用户列表缓存到我的网络服务器,而不是每次都查询数据库会更好吗?像这样:
HttpRuntime.Cache.Insert("users", listOfUsersReturnedFromQuery, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration);

如果用户列表过期一个小时,对我来说没问题。这会比每次查询数据库更有效吗?

最佳答案

最好在查询满足以下约束的情况下使用缓存:

  • 数据不是时间关键的,即确保缓存命中不会导致您的代码错过最近的数据更新而破坏您的应用程序。
  • 数据没有排序,即 A、B、C、D、E 被缓存,F 被另一个用户插入,您的用户插入 G 并命中缓存,导致 ABCDEG 而不是 ABCDEFG。
  • 数据变化不大。
  • 数据经常被查询和重用。

  • 大小并不是一个真正的因素,除非它真的会给你的 RAM 带来负担。

    我发现最好的缓存表之一是设置表,其中的数据实际上是静态的,几乎在每个页面请求上都会被查询,并且更改不必立即进行。

    对您来说最好的做法是测试哪些查询执行得最多,然后选择那些对数据库服务器造成最大负担的查询。其中,缓存任何你能负担得起的东西。您还应该查看调整最大缓存对象年龄。如果您每秒执行 100 次查询,只需将其缓存 1 秒,就可以将查询速度降低 99%,这在大多数实际情况下消除了更新延迟问题。

    关于asp.net - 缓存来自 sql 数据库的结果,还是每次查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7793746/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com