我正在根据 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。
- 数据变化不大。
- 数据被频繁查询和重复使用。
大小并不是一个真正的因素,除非它真的会消耗你的内存。
我发现最好的缓存表之一是设置表,其中数据实际上是静态的,几乎每个页面请求都会被查询,并且更改不必立即进行。
您要做的最好的事情是测试哪些查询执行得最多,然后选择那些对数据库服务器负担最高的查询。其中,缓存任何你能负担得起的东西。您还应该考虑调整最大缓存对象年龄。如果您每秒执行 100 次查询,则只需将其缓存 1 秒即可将查询速度降低 99%,从而消除了大多数实际情况下的更新延迟问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)