如何使用 Azure Redis 缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 Azure Redis 缓存相关的知识,希望对你有一定的参考价值。

1.功能   Redis 是一种高级的键值存储,其中,键可以包含数据结构,例如字符串、哈希、列表、集合和有序集合。Redis 支持针对这些数据类型的一组原子操作。   Redis 还支持设置简单的主-从复制,具有非常快的非首先阻止同步、网络分割时自动重新连接等。   其他功能包括事务、发布/订阅、Lua 脚本、具有有限生存时间的键和配置设置,使 Redis 在行为上与缓存类似。   您可以通过当今最常用编程语言使用 Redis。   Azure Redis 缓存利用 Redis 身份验证并且还支持与 Redis 的 SSL 连接。      2.可复用黄色别墅   相比笔者之前写的文档:   Windows Azure Cloud Service (44) 使用Azure In-Role Cache缓存(1)Co-located Role Windows Azure Cloud Service (45) 使用Azure In-Role Cache缓存(2)Dedicated Role   以上的In-Role Cache只会被部署的Cloud Service独享的,如果新创建的其他Cloud Service Project想共享是无法实现的。   我们通过创建Azure Redis Cache以后,这个Redis Cache就是共享的,一个或者多个Azure Application就可以同时使用这个Azure Redis Cache   3.服务级别   Microsoft Azure Redis Cache分为两个级别:   (1)基本(Basic) - 单个节点。提供不同的大小。基本模式是没有SLA的。   (2)标准(Standard) - 双节点,主从模式。包括SLA和支持复制。提供多种大小。326电影网   (3)高级(Premium) - 企业级缓存服务。专为大规模并发设计。   Azure Redis Cache提供以下不同的服务级别:   基本(Basic,不包含SLA): 缓存名称 缓存大小 网络性能 客户端连接数 C0 250MB 低 256 C1 1GB 低 1000 C2 2.5GB 中等 2000 C3 6GB 中等性喜剧 5000 C4 13GB 中等 10000 C5 26GB 高 15000 C6 53GB 最高 20000      标准(Standard,支持SLA): 缓存名称 缓存大小 网络性能 客户端连接数 C0 250MB 低 256 C1 1GB 低 1000 C2 2.5GB 中等 2000 C3 6GB 中等 5000 C4 13GB 中等 10000 C5 26GB 高 15000 C6 53GB 最高 20000      高级(Premium): 缓存名称 缓存大小 网络性能 客户端连接数量 P1 6GB 中等 7500 P2 13GB 中等 15000 P3 26GB 高 30000 P4 53GB 最高 40000 326影视      4.高性能   Azure Redis 缓存帮助您的应用程序变得更具响应性(甚至在用户负载增加时也如此),以及利用 Redis 引擎的低延迟、高吞吐量功能。此单独的分布式缓存层允许数据层独立扩展以便更高效地利用应用程序层中的计算资源。 参考技术A 1.使用 Microsoft Azure 门户创建 Redis 缓存
在 Microsoft Azure 门户中,单击“新建”>“数据+存储”>“Redis 缓存”。
输入要创建的缓存的名称,选择要运行它的位置,然后单击“创建”。很快就可供使用了。
使用命令行创建 Redis 缓存
2.使用命令行创建 Redis 缓存
可使用以下命令,从 PowerShell 接口创建 Redis 缓存:
参考技术B   1.功能

  Redis 是一种高级的键值存储,其中,键可以包含数据结构,例如字符串、哈希、列表、集合和有序集合。Redis 支持针对这些数据类型的一组原子操作。

  Redis 还支持设置简单的主-从复制,具有非常快的非首先阻止同步、网络分割时自动重新连接等。

  其他功能包括事务、发布/订阅、Lua 脚本、具有有限生存时间的键和配置设置,使 Redis 在行为上与缓存类似。

  您可以通过当今最常用编程语言使用 Redis。

  Azure Redis 缓存利用 Redis 身份验证并且还支持与 Redis 的 SSL 连接。

  

  2.可复用黄色别墅

  相比笔者之前写的文档:

  Windows Azure Cloud Service (44) 使用Azure In-Role Cache缓存(1)Co-located Role

Windows Azure Cloud Service (45) 使用Azure In-Role Cache缓存(2)Dedicated Role

  以上的In-Role Cache只会被部署的Cloud Service独享的,如果新创建的其他Cloud Service Project想共享是无法实现的。

  我们通过创建Azure Redis Cache以后,这个Redis Cache就是共享的,一个或者多个Azure Application就可以同时使用这个Azure Redis Cache

  3.服务级别

  Microsoft Azure Redis Cache分为两个级别:

  (1)基本(Basic) - 单个节点。提供不同的大小。基本模式是没有SLA的。

  (2)标准(Standard) - 双节点,主从模式。包括SLA和支持复制。提供多种大小。326电影网

  (3)高级(Premium) - 企业级缓存服务。专为大规模并发设计。

  Azure Redis Cache提供以下不同的服务级别:

  基本(Basic,不包含SLA):

缓存名称 缓存大小 网络性能 客户端连接数
C0 250MB 低 256
C1 1GB 低 1000
C2 2.5GB 中等 2000
C3 6GB 中等性喜剧 5000
C4 13GB 中等 10000
C5 26GB 高 15000
C6 53GB 最高 20000
  

  标准(Standard,支持SLA):

缓存名称 缓存大小 网络性能 客户端连接数
C0 250MB 低 256
C1 1GB 低 1000
C2 2.5GB 中等 2000
C3 6GB 中等 5000
C4 13GB 中等 10000
C5 26GB 高 15000
C6 53GB 最高 20000
  

  高级(Premium):

缓存名称 缓存大小 网络性能 客户端连接数量
P1 6GB 中等 7500
P2 13GB 中等 15000
P3 26GB 高 30000
P4 53GB 最高 40000
326影视

  

  4.高性能

  Azure Redis 缓存帮助您的应用程序变得更具响应性(甚至在用户负载增加时也如此),以及利用 Redis 引擎的低延迟、高吞吐量功能。此单独的分布式缓存层允许数据层独立扩展以便更高效地利用应用程序层中的计算资源。本回答被提问者采纳
参考技术C Azure Redis 缓存以常用的开放源 Redis 缓存为基础。这使你可以访问安全、专用的 Redis 缓存,该缓存由 Microsoft 托管并可从 Azure 内的任何应用程序进行访问。

Azure Redis 缓存在以下层级中提供:

基本级别 – 单个节点,多种大小,适用于开发/测试和非关键型工作负荷。基本级别没有 SLA。
标准级别 — 双节点主/辅助配置中的复制缓存,由 Microsoft 托管,具有高可用性 SLA。
高级级别 — 包含高可用性 SLA 在内的所有标准级别功能,以及优于基本和标准级别缓存的性能,更大的工作负荷,灾难恢复,更高的安全性等。
参考技术D 使用 Microsoft Azure 门户创建 Redis 缓存

在 Microsoft Azure 门户中,单击“新建”>“数据+存储”>“Redis 缓存”。
输入要创建的缓存的名称,选择要运行它的位置,然后单击“创建”。很快就可供使用了。

为啥与 Azure Redis 缓存的连接如此之高?

【中文标题】为啥与 Azure Redis 缓存的连接如此之高?【英文标题】:Why are connections to Azure Redis Cache so high?为什么与 Azure Redis 缓存的连接如此之高? 【发布时间】:2014-11-19 22:13:17 【问题描述】:

我在单台机器查询缓存的高负载场景中使用 Azure Redis 缓存。这台机器大约每秒获取和设置大约 20 个项目。白天增加,夜间减少。

到目前为止,一切正常。今天我意识到“连接的客户端”的指标非常高,尽管我只有 1 个客户端经常获取和设置项目。这是我的意思的指标的屏幕截图:

我的代码如下所示:

public class RedisCache<TValue> : ICache<TValue>

    private IDatabase cache;
    private ConnectionMultiplexer connectionMultiplexer;

    public RedisCache()
    
        ConfigurationOptions config = new ConfigurationOptions();
        config.EndPoints.Add(GlobalConfig.Instance.GetConfig("RedisCacheUrl"));
        config.Password = GlobalConfig.Instance.GetConfig("RedisCachePassword");
        config.ConnectRetry = int.MaxValue; // retry connection if broken
        config.KeepAlive = 60; // keep connection alive (ping every minute)
        config.Ssl = true;
        config.SyncTimeout = 8000; // 8 seconds timeout for each get/set/remove operation
        config.ConnectTimeout = 20000; // 20 seconds to connect to the cache

        connectionMultiplexer = ConnectionMultiplexer.Connect(config);
        cache = connectionMultiplexer.GetDatabase();
    

    public virtual bool Add(string key, TValue item)
    
        return cache.StringSet(key, RawSerializationHelper.Serialize(item));
    

我没有创建多个此类的实例,所以这不是问题。也许我误解了连接指标,它们的真正含义是我访问缓存的次数,但是,在我看来,这并没有什么意义。有什么想法,或者有类似问题的人吗?

【问题讨论】:

【参考方案1】:

StackExchange.Redis 存在竞争条件,在某些情况下可能会导致连接泄露。这已在版本 1.0.333 或更新版本中得到修复。

如果您想确认这是您遇到的问题,请获取客户端应用程序的故障转储并在调试器中查看堆上的对象。查找大量 StackExchange.Redis.ServerEndPoint 对象。

此外,一些用户的代码中存在导致连接对象泄漏的错误。这通常是因为他们的代码在看到失败或断开状态时会尝试重新创建 ConnectionMultiplexer 对象。实际上没有必要重新创建 ConnectionMultiplexer,因为它在内部具有根据需要重新创建连接的逻辑。只需确保在连接字符串中将 abortConnect 设置为 false。

如果您决定重新创建连接对象,请确保在释放对旧对象的所有引用之前处置旧对象。

以下是我们推荐的模式:


        private static Lazy lazyConnection = new Lazy(() => 
            return ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");
        );

        public static ConnectionMultiplexer Connection 
            get 
                return lazyConnection.Value;
            
        

【讨论】:

谢谢 JonCole,这就是问题所在。 1.0.333 的更新解决了这个问题。 看来问题又出在2.2.4版本了。 我可以确认。它又回到了 2.2.4。知道修复可能是什么吗?

以上是关于如何使用 Azure Redis 缓存的主要内容,如果未能解决你的问题,请参考以下文章

Azure Redis缓存开发

使用 Azure Redis 缓存配置 Gitlab 时出错

Azure在内存(IMemoryCache)或Redis(IDistributedCache)中使用的缓存模型

Azure Redis 缓存简单设置/获取

Azure Redis缓存授权标头

为啥与 Azure Redis 缓存的连接如此之高?