标签: azure-redis-cache

ASP.net MVC中的Azure Redis StackExchange.Redis ConnectionMultiplexer

我已经读过,为了连接到Azure Redis缓存,最好遵循以下做法:

private static ConnectionMultiplexer Connection { get { return LazyConnection.Value; } }

    private static readonly Lazy<ConnectionMultiplexer> LazyConnection =
        new Lazy<ConnectionMultiplexer>(
            () =>
            {
                return
                    ConnectionMultiplexer.Connect(connStinrg);
            });
Run Code Online (Sandbox Code Playgroud)

根据Azure Redis文档:

Azure Redis缓存的连接由ConnectionMultiplexer类管理.此类旨在在整个客户端应用程序中共享和重用,并且不需要基于每个操作创建.

那么在我的ASP.net MVC应用程序中共享ConnectionMultiplexer的最佳实践是什么?它应该在Global.asax中调用,还是应该每个Controller初始化一次,或者smth.别的?

我也有服务,负责与应用程序通信,所以如果我想在服务内部与Redis通信,我应该将ControlMultiplexer的实例发送到控制器的服务,还是应该在我的所有服务中初始化它,或者?

你可以看到我在这里有点迷失,所以请帮忙!

c# asp.net-mvc redis stackexchange.redis azure-redis-cache

7
推荐指数
1
解决办法
2397
查看次数

SignalR无法连接到SSL上的Azure Redis

我目前在Azure上托管我的redis缓存服务器,并使用以下信号依赖signalR作为主干...

GlobalHost.DependencyResolver.UseRedis( "服务器",港口, "密码", "eventKey");

这可以在端口6379(非SSL)上找到,但是当我尝试连接到Azure Redis服务器的SSL端口(6380)时,我的聊天应用程序中断了,并且集线器从未启动过.这个问题可能是什么原因?或者我做错了什么?

这是我的浏览器net :: ERR_CONNECTION_RESET中/ signalr/connect上出现的错误

redis signalr signalr-hub signalr-backplane azure-redis-cache

6
推荐指数
1
解决办法
1692
查看次数

Redis连接可能无法使用c#关闭

我正在连接到Azure Redis,并且它们向我显示了与我的Redis服务器的打开连接数。我有下面的c#代码,其中包含我所有的Redis集和获取。这应该是泄漏的连接吗?

       using (var connectionMultiplexer = ConnectionMultiplexer.Connect(connectionString))
        {

            lock (Locker)
            {
                redis = connectionMultiplexer.GetDatabase();
            }

            var o = CacheSerializer.Deserialize<T>(redis.StringGet(cacheKeyName));
            if (o != null)
            {
                return o;
            }
            lock (Locker)
            {
                // get lock but release if it takes more than 60 seconds to complete to avoid deadlock if this app crashes before release
                //using (redis.AcquireLock(cacheKeyName + "-lock", TimeSpan.FromSeconds(60)))

                var lockKey = cacheKeyName + "-lock";
                if (redis.LockTake(lockKey, Environment.MachineName, TimeSpan.FromSeconds(10)))
                {
                    try
                    {
                        o = CacheSerializer.Deserialize<T>(redis.StringGet(cacheKeyName));
                        if (o == null)
                        {
                            o …
Run Code Online (Sandbox Code Playgroud)

azure redis servicestack.redis azure-redis-cache

6
推荐指数
1
解决办法
2680
查看次数

Azure应用服务:如何确定哪个进程正在消耗大量CPU?

更新:我想通了。请参阅此问题的结尾。


我有一个运行四个站点的Azure应用服务。除主要站点外,其中一个站点还有两个部署插槽。最近,我发现整个App Service计划的CPU使用率确实很高。

CPU百分比以深橙色显示。

深橙色线显示CPU百分比。这只是在重新启动所有站点之后,它已降至此级别。

但是,当我查看每个站点报告的CPU使用率时,确实很低。

在此处输入图片说明

较深的蓝线显示CPU时间,基本上没有显示。我在所有网站上都这样做,所有图形看起来都一样。基本上,似乎没有我的网站引起此问题。

一些站点有网络作业,因此我看了一下日志,但那里的一切运行正常。作业每隔几个小时运行几秒钟。

所以我的问题是:如何确定此CPU利用率的来源?任何指针将不胜感激。


更新:由于下面的答复,我能够更详细地了解正在发生的事情。我最终从SCM / Kudu工具获得了所需的东西。您可以通过转到Azure中的Web应用并从侧面导航中选择“高级工具”来到达此处。从Kudu仪表板中,选择Process Explorer。Total CPU Time列中的值不是直接有用的,因为它是该进程自启动以来已经运行的时间(以秒为单位),可能是几分钟或几天前。

但是,如果您间隔记录一次值,则可以查看随时间的变化,并且可能会跳出一个过程。就我而言,这是我的WebJobs流程。每60秒,仅在一个环境中,这一进程就消耗大约10秒的处理器时间。

此Kudu仪表板的妙处在于,如果您可以在实际发生问题时及时发现问题,则可以单击Start Profiling按钮并捕获诊断会话。然后,您可以在Visual Studio中打开它,并获得一些有关CPU时间的花费的详细信息。

万一其他人看到类似的问题,我将提供有关我的特定案例的更多详细信息。正如我提到的,我的WebJobs exe是罪魁祸首,我发现所有CPU时间都花在StackExchange.Redis.SocketManager上,后者管理与Azure Redis缓存的连接。在我的主要Web应用程序中,按照建议,我仅创建一个连接。但是由于我的Web作业每隔一段时间才运行一次,因此我每次创建一次与Azure Redis Cache的新连接,这显然会导致问题。我更改了代码,以在WebJob进程启动时创建一次Redis Cache连接,并在运行任何单独的WebJob时使用现有连接。

时间会证明这是否真的可以解决问题,但我认为会解决。发生问题时,它总是符合相同的模式:经过几天的正常运行,我的CPU将在大约12小时的时间内缓慢上升。我的想法是,每次运行WebJob时,它都会创建一个连接对象,起初不会产生麻烦,但是随着WebJobs每隔一两个小时运行一次,逐渐增加了工作量,直到最终达到某个关键阈值并占用了CPU使用率会起飞。

希望这可以帮助某人。最好的祝愿!

azure azure-web-sites azure-redis-cache azure-app-service-plans

6
推荐指数
1
解决办法
3391
查看次数

redis 的理想值大小范围是多少?100KB 是不是太大了?

Redis 中为特定键存储的值的建议大小是否有上限?

100KB 是不是太大了?

azure redis azure-redis-cache

6
推荐指数
1
解决办法
1万
查看次数

Azure Cache Redis 性能较慢而不是 DB 查询

我们已经为我们的项目实施了 Azure Cache Redis。但问题是 Azure 缓存查询性能比数据库查询慢。对于查询,Redis 响应平均为 115 毫秒,而数据库查询平均为 60 毫秒。对于另一个查询,Redis 响应平均为 200 毫秒,数据库查询平均为 210 毫秒。我预计 Redis 查询对于所有请求都会返回大约 50 毫秒。这是正常现象还是我们遗漏了什么?也许速度并不总是如此?

azure azure-redis-cache

6
推荐指数
1
解决办法
1282
查看次数

无法通过 StackExchange.Redis 重新连接到 Azure Redis

警告:好的,所以这是一个奇怪的地方,我不确定 SO 是否是正确的地方。

我有一个连接到 Azure Redis 缓存实例的 Azure 网站。(使用 StackExchange.Redis)

一切都很好,然后有一天 - 该网站无法连接到 Redis。

错误:

无法连接到 redis 服务器;要创建断开连接的多路复用器,请禁用 AbortOnConnectFail。PING 上的 SocketFailure

这是我的连接字符串:

mycache.redis.cache.windows.net,ssl=true,password=xxxxxx,syncTimeout=5000

以下是我的诊断步骤:

  1. 尝试从本地连接到 Azure Redis。结果:成功(所以代码很好?)
  2. 尝试启动新的 Azure Redis 实例,从 Azure 连接。结果:失败(网站无法连接到任何 azure Redis 实例?)
  3. Spinup 新 Azure 网站,代码与错误代码相同,指向现有的 Redis 缓存。结果:成功(嗯,什么?)
  4. 新建MVC网站,添加StackExchange.Redis,部署到新的Azure网站,连接Redis。结果:成功(所以 Redis 好?)
  5. 将上面的 vanilla MVC 网站部署到现有的Azure 网站(因此与 4 相同的代码,连接到相同的 Redis,唯一的区别是它使用旧的 Azure 网站物理机/网络)。结果:失败(wtf??)

所以 - 我在想 Redis 已将 Azure 网站“列入黑名单”?(这甚至可能吗?)我知道客户端(我的代码)不会尝试继续重新连接,但我已经多次访问该站点,但它无法重新连接到 Redis。

启动一个新的Azure 网站,使用相同的代码连接到同一个 Redis 实例会成功,这一事实告诉我,Azure/Redis 中出现了某种黑名单/路由问题。

有任何想法吗? …

.net redis stackexchange.redis azure-redis-cache azure-web-app-service

5
推荐指数
1
解决办法
2457
查看次数

Azure Redis 缓存 StackExchange.Redis.RedisConnectionException:没有可用连接来服务此操作:EVAL

Asp.net mvc 5 应用程序 web 配置文件是

   sessionState mode="Custom" customProvider="RedisSessionProvider">
      providers>
add name="RedisSessionProvider" type="Microsoft.Web.Redis.RedisSessionStateProvider" port="6380" host="XXX.redis.cache.windows.net" accessKey="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" ssl="true" />
 providers>
    sessionState>
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时出现错误

Server Error in '/' Application.
No connection is available to service this operation: EVAL
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: StackExchange.Redis.RedisConnectionException: No connection is available to service this operation: EVAL
Source Error: …
Run Code Online (Sandbox Code Playgroud)

caching azure redis azure-caching azure-redis-cache

5
推荐指数
2
解决办法
1万
查看次数

用于中间/临时存储的 Azure cosmos db 与 blob 存储

我们在 WebAPI 中有要求,以 JSON 的形式从外部 API 提取有效负载,清理并将其发布到 Azure Sql 中。对于此要求,我们目前依赖于 blob 存储,将 json 有效负载存储到 azure blob 中,并将其检索到 UI 中以进行数据清理活动。用户可以花费大量时间来验证数据并根据需要进行修改。用户可能会起草几天,并在完成所有清理后单击“导入”按钮。现在,我观察到,在这些草稿期间,blob 只是被检索并反序列化到对象列表中,以找到要更新的相应属性。一旦更新完成,当用户单击“草稿”时,同一列表将被序列化为 json 并存储回 blob。序列化/反序列化的过程似乎很昂贵。相反,我正在考虑用 Cosmos DB 替换 blob。这真的会即兴表演吗?建议 Azure Sql Json 支持是否比所有这些选项更可行?我什至想到了 Redis 缓存?决策的主要因素也是成本效益。

json azure azure-redis-cache azure-blob-storage azure-cosmosdb

5
推荐指数
1
解决办法
1万
查看次数

RedisConnectionException:没有可用的连接来服务这个操作:EVAL

我正在尝试在 ASP.NET WebForms 应用程序 (4.7.2) 中实现 Redis。我从https://github.com/Azure/aspnet-redis-providers下载了 SessionProvider 源代码。我正在使用 StackExchange.Redis 2.0+ 。

执行登录后,抛出此错误:

在此处输入图片说明

显然,尝试了eval一些Lua脚本,但失败了(这是StackExchange.Redis相关问题关闭的结论)。

所以,假设这个假设是正确的,我提取了有问题的脚本,并redis-cli --eval与键和参数一起运行它。

local retArray = {} 
local lockValue = ARGV[1] 
local locked = redis.call('SETNX',KEYS[1],ARGV[1])        
local IsLocked = true

if locked == 0 then
    lockValue = redis.call('GET',KEYS[1])
else
    redis.call('EXPIRE',KEYS[1],ARGV[2])
    IsLocked = false
end

retArray[1] = lockValue
if lockValue == ARGV[1] then retArray[2] = redis.call('HGETALL',KEYS[2]) else retArray[2] = '' end

local SessionTimeout = redis.call('HGET', KEYS[3], 'SessionTimeout')
if SessionTimeout ~= false …
Run Code Online (Sandbox Code Playgroud)

redis stackexchange.redis azure-redis-cache

5
推荐指数
0
解决办法
1798
查看次数