【Redis】集群NetCore實戰

来源:https://www.cnblogs.com/WilsonPan/archive/2020/04/11/12677478.html
-Advertisement-
Play Games

環境準備 1. Redis集群(Windows集群搭建) 啟動Redis集群,給每個節點加上Title start "Redis - 6379" /min redis-server.exe redis.6379.conf start "Redis - 6380" /min redis-server. ...


環境準備

1. Redis集群(Windows集群搭建

啟動Redis集群,給每個節點加上Title

start "Redis - 6379" /min redis-server.exe redis.6379.conf
start "Redis - 6380" /min redis-server.exe redis.6380.conf
start "Redis - 6381" /min redis-server.exe redis.6381.conf
start "Redis - 6382" /min redis-server.exe redis.6382.conf
start "Redis - 6383" /min redis-server.exe redis.6383.conf
start "Redis - 6384" /min redis-server.exe redis.6384.conf

2. 安裝StackExchange.Redis包

dotnet add package StackExchange.Redis

 

連接Redis

var configString = "127.0.0.1:6379";
var options = ConfigurationOptions.Parse(configString);
options.ReconnectRetryPolicy = new ExponentialRetry(5000);
var client = ConnectionMultiplexer.Connect(options);

這裡只需要提供一個節點就能訪問整個集群

ConnectionMultiplexer 連接Redis可以使用ConfigurationOptions,或者直接字元串初始化(裡面實現也是調用ConfigurationOptions.Parse轉換)

這裡要說一下是他的重連重試機制,在第一次創建連接的時候,StackExchange.Redis會創建一個心跳檢測

internal static IDisposable Create(ConnectionMultiplexer connection)
{
    var token = new TimerToken(connection);
    var timer = new Timer(Heartbeat, token, MillisecondsPerHeartbeat, MillisecondsPerHeartbeat);
    token.SetTimer(timer);
    return timer;
}

使用System.Threading.Timer每秒鐘檢查一次。

StackExchange.Redis 實現兩種重試策略,當然我們也可以實現自己的重現策略,實現IReconnectRetryPolicy介面

  •  ExponentialRetry(指數)

   根據指定時間,根據重試次數不斷增大隨機數範圍

  • LinearRetry(線性)

   根據指定時間固定時間間隔重試

常用數據結構操作

字元串(String)操作

 

static void RedisStringOperation(ConnectionMultiplexer client)
{
    var db = client.GetDatabase();

    //單個Key操作
    db.StringSet("Key", "Wilson");
    Console.WriteLine($"Get Key : {db.StringGet("Key")}");

    db.StringSet("Nums", 1);
    db.StringIncrement("Nums");
    Console.WriteLine($"Get Nums : {db.StringGet("Nums")}");

    db.StringDecrement("Nums");
    Console.WriteLine($"Get Nums : {db.StringGet("Nums")}");

    //多個Key操作
    db.StringSet(new KeyValuePair<RedisKey, RedisValue>[]
    {
        new KeyValuePair<RedisKey, RedisValue>("{user}Name","Wilson"),
        new KeyValuePair<RedisKey, RedisValue>("{user}Age",30)
    });

    foreach (var value in db.StringGet(new RedisKey[] { "{user}Name", "{user}Age" }))
    {
        Console.WriteLine($"{value}");
    }
}

 

哈希(Hash)操作

 

static void RedisHashOperation(ConnectionMultiplexer client)
{
    var db = client.GetDatabase();

    db.HashSet("person", "name", "Wilson");
    Console.WriteLine(db.HashGet("person", "name"));

    db.HashSet("person", new HashEntry[]
    {
        new HashEntry("name","Wilson"),
        new HashEntry("sex",1)
    });
    Console.WriteLine(string.Join("\n", db.HashGet("person", new RedisValue[] { "name", "sex" })));

    Console.WriteLine(string.Join("\n", db.HashGetAll("person")));
}

 

列表(List) 操作

 

static void RedisListOperation(ConnectionMultiplexer client)
{
    var db = client.GetDatabase();

    db.ListLeftPush("list", 100);
    db.ListLeftPush("list", 200);
    db.ListLeftPush("list", 300);
    db.ListRightPush("list", 400);
    db.ListRightPush("list", 500);

    Console.WriteLine(db.ListLeftPop("list"));
    Console.WriteLine(db.ListRightPop("list"));
    Console.WriteLine(string.Join("\t", db.ListRange("list", 0, 2)));
    Console.WriteLine(db.ListLength("list"));
}

 

集合(Set)

 

static void RedisSetOperation(ConnectionMultiplexer client)
{
    var db = client.GetDatabase();

    db.SetAdd("user", "Wilson");
    db.SetAdd("user", "Wilson");
    db.SetAdd("user", "Alice");

    Console.WriteLine(db.SetLength("user"));
    Console.WriteLine(db.SetPop("user"));
    Console.WriteLine(string.Join("\n", db.SetMembers("user")));
}

 

有序集合(Sorted Set)

 

static void RedisSortedSetOperation(ConnectionMultiplexer client)
{
    var db = client.GetDatabase();

    db.KeyDelete("user");

    db.SortedSetAdd("user", "Wilson", 90);
    db.SortedSetAdd("user", "Alice", 85);
    db.SortedSetAdd("user", "Trenary", 12);
    db.SortedSetAdd("user", "Nixon", 30);

    Console.WriteLine(db.SortedSetLength("user"));
    Console.WriteLine(db.SortedSetRemove("user", "Wilson"));
    Console.WriteLine(string.Join("\n", db.SortedSetRangeByRank("user", 0, 2)));
}

 

轉發請標明出處:https://www.cnblogs.com/WilsonPan/p/12677478.html

示例代碼: https://github.com/WilsonPan/Net.Demos/tree/master/Demo.RedisCluster

參考文章

StackExchange.Redis | General purpose redis client


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ECC是“Error Correcting Code”的簡寫,ECC能夠實現錯誤檢查和糾正,含有ECC功能的記憶體一般稱為ECC記憶體,使用了ECC記憶體的系統在穩定性和可靠性上得到很大提升。相比前幾代不帶ECC的i.MXRT10xx型號,新一代i.MXRT1170在ECC上做了全面武裝,從eFuse到F... ...
  • 本人雲伺服器,裝的cent os7.6,在cent os7.6已裝了docker,沒裝的可以借鑒 https://www.cnblogs.com/xiaoyige/p/12673076.html 1.先下載一個docker鏡像: docker pull centos 2.創建docker容器記得寶塔 ...
  • 1、安裝環境 此處在Centos7進行安裝,可以使用以下命令查看CentOS版本 lsb_release -a 在 CentOS 7安裝docker要求系統為64位、系統內核版本為 3.10 以上,可以使用以下命令查看 uname -r 2、用yum源安裝 2.1 查看是否已安裝docker列表 我 ...
  • 如何在vue裡面實現一個簡單的中國地圖,並且實現一些簡單的個性化修改。 下麵是最終實現的效果圖。透明的地圖加一個背景圖。 1、在你的項目里安裝echarts的依賴 npm install echarts -s (使用淘寶鏡像安裝也行) 2、引入echarts 全局引入和局部引入根據自己的情況來定 全 ...
  • 當上傳是高安全模式時,我們大可不必非要用上傳滲透實現對伺服器的攻擊,我們可以換一種方式。 1.實驗環境 目標靶機:OWASP_Broken_Web_Apps_VM_1.2 "下載地址" 我們還需要 和`kali`這兩個工具,把所有的殺毒軟體關了,不然中國菜刀可能會被殺毒軟體和諧。 實驗原理及危害 2 ...
  • 問題:同一區域網,Mac(使用Microsoft Remote Desktop)無法遠程連接win7 之前需要兩臺電腦配置的我就不詳細說了,網上有很多。 報錯: 解決辦法: win7 1.運行 -> gpedit.msc 2.電腦配置->管理模版->網路->網路連接->windows防火牆->標準 ...
  • 電力巡檢機器人 電力巡檢人有什麼用?長什麼樣? 炎熱的夏天室外氣溫實在是高,由於陽光的暴曬,設備區的溫度甚至讓人窒息;而下雨天又影響視線,傳統的人工巡檢需要在各種天氣下進行。 而智能電力巡檢機器人的出現,就是為瞭解決以上的難題。電力巡檢機器人身材都比較嬌小,可以在變電站內隨意的穿梭。 頂部的一對大眼 ...
  • Vi/Vim 可以說是文本編輯中的一代傳奇人物,直至現在,它仍然在高級程式員的武器庫中占有一席之地。每個 Linux 發行版預設都包含Vim ,而且即使你不是 Linux 系統用戶,你也可以安裝 Vim 。 為什麼到現在還來講這款古老的軟體?因為它牛逼啊!它包含幾乎所有功能的輕量級鍵盤快捷鍵、內置表 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...