在 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);

在 Redis Azure 中存储较大的 (2MB) 对象

从评论中,听起来问题是带宽...所以:使用更少的带宽。想法:

  1. 使用压缩(理想情况下,仅当非平凡的大小等)
  2. 使用更密集的格式

作为参考,在SE,我们使用gzip压缩的protobuf-net进行包装