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

时间:2015-01-03 00:11:35

标签: c# azure asp.net-web-api redis

我正在尝试在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;
            }

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

1 个答案:

答案 0 :(得分:3)

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

  1. 使用压缩(理想情况下,只有在非常重要的情况下才能使用)
  2. 使用更密集的格式
  3. 供参考,在SE,我们使用gzip压缩的protobuf-net进行包装