标签: azure-redis-cache

Azure Redis缓存会话状态提供程序中的会话超时未滑动

通过多个实例扩展Web应用程序是azure cloud的最大优势之一.为了实现对我们的Web角色云应用程序的多个VM支持,我们正在实施Azure Redis缓存.我们使用RedisSessionStateProvider提供程序来维护会话状态.以下是web.config文件中会话管理的配置设置.

<authentication mode="Forms">
  <forms loginUrl="~/Login" slidingExpiration="true" timeout="20" defaultUrl="~/Default" />
</authentication>
<sessionState timeout="20" mode="Custom" customProvider="MySessionStateStore">
  <providers>
     <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider"
        host = "dummy.redis.cache.windows.net" 
        port = "6380" 
        accessKey = "dummysecretkey" 
        ssl = "true" 
        throwOnError = "true" 
        retryTimeoutInMilliseconds = "5000" 
        databaseId = "0" 
        applicationName = "" 
        connectionTimeoutInMilliseconds = "5000" 
        operationTimeoutInMilliseconds = "1000" 
        connectionString = ""/>  
  </providers>
Run Code Online (Sandbox Code Playgroud)

我们的问题是会话超时没有随着用户的回发而延长,假设我们的用户在上午10:00登录应用程序,那么他的会话数据将在绝对时间上午10:20到期.如果用户在上午10:15回发,那么会话应该在上午10:35到期,但这不会发生,它将在10:20 AM绝对到期.

以下是登录按钮的点击事件中的代码

 protected void Button1_Click(object sender, EventArgs e)
 {
   FormsAuthentication.SetAuthCookie(TextBox1.Text.Trim(), true);
   ConnectionMultiplexer connection = ConnectionMultiplexer.Connec("dummy.redis.cache.windows.net,ssl=true,password=dummysecretkey");
   IDatabase cache = connection.GetDatabase();
   Session["UserName"] = TextBox1.Text;
   Response.Redirect("Default.aspx");
 }
Run Code Online (Sandbox Code Playgroud)

如果能让我知道在滑动模式下获得会话超时需要做什么,我将不胜感激.最好的祝福, …

azure session-timeout redis azure-redis-cache

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

到期时,Azure Redis缓存是否刷新项目

我有一个方案,我计划设置Azure Redis缓存条目的过期时间,以确保我们不保留在特定时间点之后没有任何价值的数据,例如

cache.StringSet(this.cacheId, this.Serialize(), expiry);
Run Code Online (Sandbox Code Playgroud)

同样,其目的是通过包含比实际使用的条目更多的条目来防止Redis缓存性能受到任何影响。

Azure Redis是在条目达到定义的过期时间时刷新条目,还是仅在受到压力以减少内存占用量和后端持久存储时才这样做?

redis azure-redis-cache

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

带有Azure的StackExchange.Redis:LockRelease表示已释放锁,但似乎没有

在这本书的结尾处,我略有结束:)我有一个原型(太大而无法共享太多依赖项),出于多种原因使用了Redis-其中之一是存储序列化值,并控制更新通过使用带有LockTake/Release单独键的保护锁来获得该值。

整个应用看起来像这样(注意:此代码段无法重现我的问题!):

using Nito.AsyncEx;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RedisAzureLockingTest
{
    class Program
    {
        static void Main(string[] args)
        {
            AsyncContext.Run(async () =>
            {

                var cm = await ConnectionMultiplexer.ConnectAsync("blah:6379,ssl=false,password=blah,defaultDatabase=1,syncTimeout=5000");
                var db = cm.GetDatabase();

                // store key
                RedisKey key = "thisisourtest";
                await db.StringSetAsync(key, "initial value", flags: CommandFlags.DemandMaster); // SET

                // acquire lock
                RedisKey lockkey = "thisisourtest.lock";
                string locktoken = Guid.NewGuid().ToString();
                bool success = await db.LockTakeAsync(lockkey, locktoken, TimeSpan.FromDays(1), CommandFlags.DemandMaster);
                if (!success) throw new …
Run Code Online (Sandbox Code Playgroud)

c# azure redis stackexchange.redis azure-redis-cache

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

已达到Azure Redis缓存最大连接数

我使用Azure Redis缓存来存储一些快速查找数据,这个缓存由​​10个客户端应用程序读取/连接.所有应用程序都是用.NET 4.6编写的,这包括ASP.NET MVC Web应用程序,Web API以及每1秒运行一次的工作者角色.所有客户端都使用StackExchange.Redis连接到Cache.但是,我得到间歇性超时,我发现在Azure门户中,最大连接数已达到1000(对于我的定价层).由于我只有10个客户端应用程序,而且这些应用程序都不是多线程的,因此可以创建与缓存的1000个连接?

我可以为缓存客户端提供哪些最佳实践?

c# caching azure redis azure-redis-cache

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

Azure Redis缓存中的数据

有没有一种简单的方法可以查看Azure上Redis缓存中的内容?我的意思是某种工具?

我知道如何以编程方式进行操作,但是有时在编写代码时,我希望能够快速查看Redis缓存中的内容而不必切换到其他代码。

azure-redis-cache

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

从不同的微服务读取相同的缓存

我使用 spring-data-redis(2.1.5.RELEASE) 和 jedis(2.10.2) 客户端从作为 spring-boot 应用程序运行的不同服务连接到我的 azure redis 实例。

通过实现以下配置,两个服务具有相同的缓存方法并指向相同的缓存。我面临的问题是,当一个服务尝试读取另一服务创建的缓存值时,会发生反序列化异常。

例外:

org.springframework.data.redis.serializer.SerializationException:无法反序列化;嵌套异常是 org.springframework.core.serializer.support.SerializationFailedException:无法反序列化有效负载。字节数组是DefaultDeserializer相应序列化的结果吗?嵌套异常是 org.springframework.core.NestedIOException:无法反序列化对象类型;嵌套异常是 java.lang.ClassNotFoundException

注意:我仅使用 redis 来缓存从数据库读取的数据。

微服务1的Redis缓存配置

public RedisCacheWriter redisCacheWriter(RedisConnectionFactory connectionFactory) {
    return RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);
}

@Bean
public RedisCacheManager cacheManager() {
    Map<String, RedisCacheConfiguration> cacheNamesConfigurationMap = new HashMap<>();
    cacheNamesConfigurationMap.put("employers", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(90000)));
    cacheNamesConfigurationMap.put("employees", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(90000)));

    RedisCacheManager manager = new RedisCacheManager(redisCacheWriter(), RedisCacheConfiguration.defaultCacheConfig(), cacheNamesConfigurationMap);
    manager.setTransactionAware(true);
    manager.afterPropertiesSet();

    return manager;
}
Run Code Online (Sandbox Code Playgroud)

微服务2的Redis缓存配置

public RedisCacheWriter redisCacheWriter(RedisConnectionFactory connectionFactory) {
    return RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);
}

@Bean
public RedisCacheManager cacheManager() {
    Map<String, RedisCacheConfiguration> cacheNamesConfigurationMap = new HashMap<>();
    cacheNamesConfigurationMap.put("employees", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(90000)));

    RedisCacheManager manager …
Run Code Online (Sandbox Code Playgroud)

spring-data-redis spring-boot azure-redis-cache

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

将 35GB Redis 从一个实例复制到另一个实例的最快方法(在 Azure 标准中)

我们在 Azure 上有两个 Azure Redis 实例。源位于 Azure 中的“标准”设置。我们需要将所有 35GB 从标准版本复制到高级版本(而不是迁移)。

最好的方法是什么?数据应该是静态的。您无法以标准方式导出数据,也无法进行分片。我们已经达到了最大大小,需要迁移到支持分片的大小。

azure redis azure-redis-cache

4
推荐指数
1
解决办法
4119
查看次数

Redis缓存 - 何时可以触发大规模驱逐?

我们在Azure上有一个Redis缓存Standard 2.5gb.我们观察到以下行为:

在此输入图像描述

我们时不时地观察到内存使用率大幅下降.似乎有很多资源被驱逐.

注意事项:

  • 驱逐政策是LRU
  • 可用的缓存大小为2.5GB
  • 没有能够驱逐如此大量内存的应用程序代码(最大的对象大约是80kb,大多数都要小得多)
  • 观察到的内存丢失代表了数万个密钥
  • 我们很少在缓存的对象上使用明确的到期日期,当我们这样做时,它们总是<1小时.

我的问题是,除了明确驱逐密钥的应用程序逻辑外,还有其他任何情况Redis会驱逐大量的密钥吗?

azure redis azure-redis-cache

4
推荐指数
1
解决办法
325
查看次数

可靠的Redis缓存TTL过期钩子

Azure Redis 缓存是否允许我设置一个函数,以便在缓存中的某个键过期时可靠地触发?

redis-cache azure-redis-cache

4
推荐指数
1
解决办法
2733
查看次数

StackExchange.Redis - 无法解释的超时异常问题

我们在 .NET Core 3.1 与 Azure Redis 缓存的集成中遇到了问题。抛出的异常是

执行请求时发生未处理的异常。","@l":"错误","@x":"StackExchange.Redis.RedisTimeoutException: 等待响应超时(出站 = 1403KiB,入站 = 5657KiB,已过去 15000 毫秒,超时为15000ms),command=EVAL,下一个:EVAL,inst:0,qu:0,qs:709,aw:True,rs:ReadAsync,ws:写入,in:0,serverEndpoint:redis-scr-mns-dev.redis .cache.windows.net:6380,mc:1/1/0,mgr:10 个可用,共 10 个可用,clientName:xxxxxxxxxxxx,IOCP:(忙碌 = 0,空闲 = 1000,最小 = 4,最大 = 1000),工作人员: (Busy=7,Free=32760,Min=4,Max=32767), v: 2.1.58.34321(请查看这篇文章,了解一些可能导致超时的常见客户端问题: https://stackexchange.github .io/StackExchange.Redis/超时

是的,我已经阅读了这篇文章,我们正在使用 StackExchange.Redis NuGet 包,最新版本可用。我们已经采取的步骤是

  • 使用多个值设置最小线程池计数 (ThreadPool.SetMinThreads(short.MaxValue, short.MaxValue);)
  • Redis超时值从默认的 5 秒增加到 15 秒(老实说,更高的值并不能解决这个问题,因为您将进一步阅读:))

你问的设置是什么?

  • .NET Core 3.1 REST API在最新的 IIS 上运行,在具有 16GB RAM 的 4 核 Windows 服务器上设置 3 个工作线程(在有关 CPU 或内存的监控中没有看到任何极端情况)
  • 连接到Azure Redis 缓存。目前正在运行具有高网络带宽和 23GB 内存的Basic C5 …

c# redis stackexchange.redis azure-redis-cache .net-core

4
推荐指数
1
解决办法
3246
查看次数