1. 程式人生 > >Redis學習筆記~Redis主從伺服器,讀寫分離

Redis學習筆記~Redis主從伺服器,讀寫分離

回到目錄

Redis這個Nosql的儲存系統一般會被部署到linux系統中,我們可以把它當成是一個數據伺服器,對於併發理大時,我們會使用多臺伺服器充當Redis伺服器,這時,各個Redis之間也是分散式的,而Redis與WWW之間也是一種分散式,對於各個redis之間的分散式不需要我們去幹預,它是由我們的redis客戶端去負責連結的,你當時鏈到哪臺伺服器,完全由客戶端去控制,redis這種模式我們通常稱為“主從模式”,即一個主伺服器,主要負責寫入資料,多臺從伺服器,負責資料的讀取,而它們之前的資料同步,也是redis自已為我們實現的,我們不需要去幹預它,這種模式通常會稱為“多級伺服器叢集架構”,它大大改善了程式的效能!

下面我們分別開啟主redis和從redis,如圖

對於配置從伺服器,我們主要設定port,bind和slaveof這三個引數就可以了,port是埠,bind是從伺服器的ip地址,slaveof是主伺服器的地址和埠,程式碼如下

port 6380
bind 127.0.0.1
slaveof  127.0.0.1 6379 

例項:在主伺服器寫入一個字串,在從伺服器讀取字串

首先對redisConfig進行相關配置,我加了一些說明

    /// <summary>
    /// redis主要資訊的配置引數
    /// </summary>
    public
sealed class RedisConfigInfo : ConfigurationSection { public static RedisConfigInfo GetConfig() { RedisConfigInfo section = (RedisConfigInfo)ConfigurationManager.GetSection("RedisConfig"); return section; } public static RedisConfigInfo GetConfig(string
sectionName) { RedisConfigInfo section = (RedisConfigInfo)ConfigurationManager.GetSection("RedisConfig"); if (section == null) throw new ConfigurationErrorsException("Section " + sectionName + " is not found."); return section; } /// <summary> /// 負責寫入的Redis連結地址,一般為一個伺服器,我們稱為主伺服器 /// </summary> [ConfigurationProperty("WriteServerList", IsRequired = false)] public string WriteServerList { get { return (string)base["WriteServerList"]; } set { base["WriteServerList"] = value; } } /// <summary> /// 負責讀的Redis連結地址,它一般由多個伺服器元件,一般稱為從伺服器(slave),各個伺服器之間用逗號分開 /// </summary> [ConfigurationProperty("ReadServerList", IsRequired = false)] public string ReadServerList { get { return (string)base["ReadServerList"]; } set { base["ReadServerList"] = value; } } /// <summary> /// 最大寫連結數 /// </summary> [ConfigurationProperty("MaxWritePoolSize", IsRequired = false, DefaultValue = 5)] public int MaxWritePoolSize { get { int _maxWritePoolSize = (int)base["MaxWritePoolSize"]; return _maxWritePoolSize > 0 ? _maxWritePoolSize : 5; } set { base["MaxWritePoolSize"] = value; } } /// <summary> /// 最大讀連結數 /// </summary> [ConfigurationProperty("MaxReadPoolSize", IsRequired = false, DefaultValue = 5)] public int MaxReadPoolSize { get { int _maxReadPoolSize = (int)base["MaxReadPoolSize"]; return _maxReadPoolSize > 0 ? _maxReadPoolSize : 5; } set { base["MaxReadPoolSize"] = value; } } /// <summary> /// 自動重啟 /// </summary> [ConfigurationProperty("AutoStart", IsRequired = false, DefaultValue = true)] public bool AutoStart { get { return (bool)base["AutoStart"]; } set { base["AutoStart"] = value; } } /// <summary> /// 本地快取到期時間(超時時間),單位:秒 /// </summary> [ConfigurationProperty("LocalCacheTime", IsRequired = false, DefaultValue = 36000)] public int LocalCacheTime { get { return (int)base["LocalCacheTime"]; } set { base["LocalCacheTime"] = value; } } /// <summary> /// 是否記錄日誌,該設定僅用於排查redis執行時出現的問題,如redis工作正常,請關閉該項 /// </summary> [ConfigurationProperty("RecordeLog", IsRequired = false, DefaultValue = false)] public bool RecordeLog { get { return (bool)base["RecordeLog"]; } set { base["RecordeLog"] = value; } } }

而配置檔案中,我們可以把redis讀伺服器和寫伺服器進行配置,多個伺服器使用逗號分開(redis本身就是支援讀寫分離的)

  <RedisConfig WriteServerList="192.168.2.71:6379" ReadServerList="192.168.2.71:6379,192.168.2.71:6380" MaxWritePoolSize="60" MaxReadPoolSize="60" AutoStart="true" LocalCacheTime="180" RecordeLog="false">
  </RedisConfig>

下面我們向主伺服器加個物件

using (var test = redisClient.GetTypedClient<string>())
                        {
                            test.Lists["Test"].Add("資訊被新增");

                        }
               

當沒有呼叫save方法時,物件只儲存在記憶體中,資料不會被同步到從伺服器,而呼叫了save方法後,資料才會被同步到各個從伺服器中

下面我們添加了這個save方法之後,在從伺服器上就會有資訊同步了

      using (var redisClient = RedisManager.GetClient())
            {
                using (var test = redisClient.GetTypedClient<string>())
                {

                    test.Lists["bobo"].Add("info");
                    test.Save();
                }
            }

如圖所示

 

對於裝有防火牆的伺服器來說,當然要把對應的埠開放一下,否則客戶端也是不能連結上的,呵呵

設定好之事,我們可以在命令列上測試一下從伺服器的資料,如圖

相關推薦

Redis學習筆記~Redis主從伺服器分離

回到目錄 Redis這個Nosql的儲存系統一般會被部署到linux系統中,我們可以把它當成是一個數據伺服器,對於併發理大時,我們會使用多臺伺服器充當Redis伺服器,這時,各個Redis之間也是分散式的,而Redis與WWW之間也是一種分散式,對於各個redis之間的分散式不需要我們去幹預,它是由我們的r

Redis主從複製分離主從切換

當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。 redis提供了一個master,多個slave的服務。 準備三個redis服務,依次命名資料夾子maste

Redis主從同步分離設定

本文介紹使用Redis的主從同步功能(master, slave),使程式實現讀寫分離,避免io瓶頸,提高資料讀寫效率。 Redis支援一個master伺服器對多個slave伺服器同步,同步使用釋出/訂閱機制。 1個master對多個slave,還可以進行分

Redis叢集之主從複製分離(上)(五)

前言:隨著web2.0的進一步發展,網民的生產力進一步提升,儲存總量開始增加。 此時雖然仍然是讀多寫少的模式,但寫入量已經大大提升。 原有的快取技術不能緩解寫入壓力,而且原有的空間也受硬碟限制,因此開始出現分庫分表,實現讀寫分離。 集中模式的資料庫就這樣開始逐漸

redis主從複製分離主從切換

當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。 redis提供了一個master,多個slave的服務。 準備三個redis服務,依次命名資料夾子master,slave1,slave2.這裡為在

Redis叢集之主從複製分離(下)(六)

上一次呢我們講到了redis的叢集,還有redis的主從複製,讀寫分離的一些配置,那麼接下來就接著上次還未完結的內容 上一次呢講的是在正常的情況下redis服務在各個主機上的執行情況,那麼接下來就是要介紹不正常的情況了。 假如說我們的redis的主庫掛了或者

redis主從複製分離主從切換 哨兵

當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。 redis提供了一個master,多個slave的服務。 準備三個redis服務,依次命

redis 主從複製分離

redis的主從複製,讀寫分離,可以避免單點故障,而且可以提高伺服器的負載能力. 可以簡單實現下面如圖所示的主從結構: A(master) / \ B(slave1) C(slave2) 1 開啟終端,開啟一個redis 服務程序,預

mysql主從配置分離

忽略 數據緩存 get 抓狂 mysql主從配置 sudo ignore win8.1 這不 Mysql主從配置,實現讀寫分離 大型網站為了軟解大量的並發訪問,除了在網站實現分布式負載均衡,遠遠不夠。到了數據業務層、數據訪問層,如果還是傳統的數據結構,或者只是單單靠一

mysql開啟bin-log日誌實習主從配置分離

一、什麼是主從複製 至少兩臺資料庫伺服器,可以分別設定主伺服器和從伺服器,對主伺服器的任何操作(更新)都會同步到從伺服器上 二、實現原理 mysql中有一種日誌,叫做bin日誌(二進位制日誌),會記錄下所有修改過資料庫的sql語句

SpringBoot微服務 +tomcat叢集+Ngnix負載均衡+Mysql主從複製分離(4)

四:mysql主從複製,讀寫分離 1.首先把mysql原始碼包檔案拷到兩臺linux伺服器上,然後在兩臺伺服器上安裝Mysql資料庫 安裝 MySQL 1 安裝 ncurses Ncurses 提供字元終端處理庫,包括面板和選單。它提供了

CentOS6.5搭建MySQL主從複製分離(冷月宮主親自整理最簡單明瞭)

CentOS6.5搭建MySQL主從複製,讀寫分離MySQL主從複製的優點:1、 如果主伺服器出現問題, 可以快速切換到從伺服器提供的服務,保證高可用性2、 可以在從伺服器上執行查詢操作, 降低主伺服器的訪問壓力3、 可以在從伺服器上執行備份, 以避免備份期間影響主伺服器的服

mysql叢集技術:主從複製分離

伺服器端讀寫分離的具體技術 1: 資料庫叢集技術 叢集由 3 個概念 sql 節點 sql node 資料節點 data node 管理節點 ndb managerment Sql 語句傳送 “1sql 節點 “, “1sq

MySQL搭建主從伺服器分離的實現

一 丶為什麼要搭建主從伺服器和實現讀寫分離 1.總結起來就一點,實現併發吞吐和負載能力。通過搭建主從伺服器實現讀寫分離,提高MySQL的負載能力 2.主從的基本實現原理 (本例 主伺服器ip: 192.168.2.187,後面簡稱 master;從伺服器ip: 192.168

9.redis學習筆記-客戶端&伺服器.md

12. 客戶端 12.1. 客戶端屬性 客戶端狀態包含的屬性可以分為兩類: 通用屬性,很少與特定功能相關,無論客戶端執行什麼工作,都要用到這些屬性 與特定功能相關的屬性,比如操作資料庫要用到的db屬性和dictid屬性 12.1.1. 套接字描述 客戶端狀

Redis哨兵模式(sentinel)學習總結及部署記錄(主從複製、分離主從切換)

Redis的叢集方案大致有三種:1)redis cluster叢集方案;2)master/slave主從方案;3)哨兵模式來進行主

Redis學習筆記-----Redis數據過期策略詳解

登錄 及其 可能 ger 方式 處理方式 base 持久化數據 簡單的   本文對Redis的過期機制簡單的講解一下  講解之前我們先拋出一個問題,我們知道很多時候服務器經常會用到redis作為緩存,有很多數據都是臨時緩存一下,可能用過之後很久都不會再用到了(比如暫存ses

Redis學習筆記--Redis客戶端(三)

本機 -c trace 圖形 tro cli family 毫秒 ati 1.Redis客戶端 1.1 Redis自帶的客戶端   (1)啟動   啟動客戶端命令:[root@kwredis bin]# ./redis-cli -h 127.0.0.1 -p 6379

Mysql DBA 高級運維學習筆記-生產場景mysql主從復制分離授權方案及實戰

pin 同時 row rpo from 可能 change sql sla 當配置好MySQL主從復制以後所有對數據內容的更新就必須在主庫上進行。那麽為什麽所有的更新都要在主服務器上進行呢?這是因為數據復制時單向的,只有在主庫上更新,才能避免用戶對主服務器上數據庫內容的更新

Redis學習筆記——Redis的基本操作

之前介紹過如何在ubuntu安裝Redis伺服器:https://www.cnblogs.com/zifeiy/p/9062738.html 接下來,我們在Redis上進行一些基本的操作。 所縣使用命令:redis-cli登陸Redis命令列。 然後執行下面的指令進行測試與學習: 字串型別的增刪改查 #