【发布时间】:2015-01-03 10:06:31
【问题描述】:
我正在尝试使用 Azure 中的 Redis 在我的应用程序中进行缓存。我的每个密钥都可能超过 2-4MB。当我在本地计算机上针对 Redis 运行我的应用程序时,一切都很好,但是当在 Azure 上运行时性能很差,检索密钥通常需要 8-10 秒,实际上我从原始计算机中重新获取这些数据更快来源而不是来自缓存。
所以我想第一个问题是,我的钥匙是不是太大了?我是不是在使用 Redis 时完全找错了树?
如果不是,任何想法为什么它这么慢?应用是一个Azure网站,网站和redis实例在同一个zone。我正在使用 stackexchange redis 客户端并在 global.asax 文件中创建多路复用器作为单例,以避免重新创建它,代码如下:
Global.asax:
redisConstring = ConfigurationManager.ConnectionStrings["RedisCache"].ConnectionString;
if (redisConstring != null)
{
if (RedisConnection == null || !RedisConnection.IsConnected)
{
RedisConnection = ConnectionMultiplexer.Connect(redisConstring);
}
RedisCacheDb = RedisConnection.GetDatabase();
Application["RedisCache"] = RedisCacheDb;
}
Web API 控制器:
IDatabase redisCache = System.Web.HttpContext.Current.Application["RedisCache"] as IDatabase;
string cachedJson = redisCache.StringGet(id);
if (cachedJson == null)
{
cachedJson=OutfitFactory.GetMembersJson(id);
redisCache.StringSet(id, cachedJson, TimeSpan.FromMinutes(15));
}
return OutfitFactory.GetMembersFromJson(cachedJson);
【问题讨论】:
-
是的,这不是特别小——不过应该不会很糟糕;您是否使用本地服务器内存作为缓存之前点击redis?
-
@MarcGravell no 目前我只使用redis(主要原因是我想为流行的查询做一些缓存的预加载)但如果需要,我可以在尝试之前做使用 Redis 我用的是本地内存。
-
你衡量过时间花在哪里了吗?是带宽吗?还是反序列化时间?
-
我很确定它是带宽,只是使用 Redis 桌面工具访问一个值也很慢。我刚刚将它切换为用于内存缓存,它的速度要快得多,但并不理想。
标签: c# azure asp.net-web-api redis