在 Redis Azure 中存储较大的 (2MB) 对象
本文关键字:2MB 对象 Redis Azure 存储 | 更新日期: 2023-09-27 18:35:55
我正在尝试在Azure中使用Redis在我的应用程序中缓存。我的每个密钥每个密钥可能超过 2-4MB。当我在本地计算机上针对 Redis 运行我的应用程序时,一切都很好,但是当在 Azure 上运行性能很糟糕时,检索密钥通常需要 8-10 秒,实际上对我来说,从原始源重新获取这些数据比从缓存中更快。
所以我想第一个问题是,我的钥匙是不是太大了?我只是用Redis吠错了树吗?
如果没有,有什么想法为什么这么慢吗?应用程序是 Azure 网站,网站和 redis 实例位于同一可用区。我正在使用 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;
}
网页 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进行包装