【发布时间】:2013-01-02 09:20:28
【问题描述】:
在 EF 5.x 和 MVC3 中使用 MYSQL。我有一张大约有 320 万行的表格,其中包含城市、国家/地区组合。我在客户端有一个自动完成文本框,它接受城市的搜索词并使用 jQuery/ajax 发回建议。
我面临的挑战是,当它第一次使用时,我将这张表缓存到我的内存中:
CityData = DataContext.Citys.OrderBy(v => v.Country).ToList();
if (CityData.Any())
{
// Put this data into the cache for 30 minutes
Cache.Set("Citys", CityData, 30);
}
即使我将 db-context 超时设置为 5 分钟,它也会超时。当我使用 MySQL 客户端对数据库运行此 SQL 时,大约需要 3 分钟来提取所有行。
将这些数据读入缓存的最佳方法是什么,或者我应该做些什么不同的事情? 如果可以,我可以将表直接缓存到 MySQL 缓存中吗?或者我应该将术语搜索直接发送到数据库,而不是使用缓存中的数据。
【问题讨论】:
-
如果是为了自动完成,你不会有一个使用搜索词并且只获取相关结果的查询吗?还是您希望搜索查询运行缓存数据?
-
@MikeSmithDev 提出了一个很好的观点,你最好将单个查询缓存到数据库中。您可以将查询缓存很长一段时间,这样一段时间后,您的大部分搜索将不会进入数据库。您还可以选择将生成的 json 缓存为文件,这样一收到这样的请求就可以返回 json 文件。
-
是的,搜索词与缓存数据不符
-
在实际表中搜索您的搜索词是否有问题,因此需要缓存版本?表是否被索引?如果您在 SQL 客户端中的查询需要 3 分钟...那就有点麻烦了。
-
我认为没有必要缓存。像这样的简单数据库查询需要 1ms 左右。不值得优化。
标签: c# mysql asp.net-mvc entity-framework caching