在 Redis Azure 中存储更大 (2MB) 的对象
Storing Larger (2MB) objects in Redis Azure
我正在尝试使用 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);
从评论来看,问题似乎出在带宽上...所以:使用更少的带宽。想法:
- 使用压缩(理想情况下只有在非平凡大小等情况下)
- 使用更密集的格式
作为参考,在 SE 我们使用 gzip 压缩的 protobuf-net 进行打包
我正在尝试使用 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);
从评论来看,问题似乎出在带宽上...所以:使用更少的带宽。想法:
- 使用压缩(理想情况下只有在非平凡大小等情况下)
- 使用更密集的格式
作为参考,在 SE 我们使用 gzip 压缩的 protobuf-net 进行打包