redis進(jìn)階-分表分庫(kù)、讀寫分離、高可用

場(chǎng)景:假設(shè)如果我們有多臺(tái)內(nèi)存為8G的服務(wù)器,現(xiàn)在想存下64G的數(shù)據(jù),這個(gè)時(shí)候該如何設(shè)計(jì)呢?
解決方法:設(shè)置多臺(tái)redis服務(wù)器,將數(shù)據(jù)分別存在這些服務(wù)器中。

一、分表分庫(kù)-模擬啟動(dòng)多個(gè)redis服務(wù)器

前面我們介紹了根據(jù)配置文件來(lái)啟動(dòng)redis服務(wù)器

redis-server conf-path  #conf-path為配置文件的路徑
  • 1、從默認(rèn)配置中復(fù)制出3個(gè)配置文件,命名為6380.conf、6381.conf、6382.conf,并將配置文件中的port修改為文件名


    準(zhǔn)備好配置文件
  • 2、分別根據(jù)這3個(gè)配置文件啟動(dòng)服務(wù)器


    6380服務(wù)啟動(dòng)
  • 3、實(shí)現(xiàn)Redis服務(wù)網(wǎng)關(guān)

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
/**
 * @author Martin
 * @version 1.0
 * @date 2020/3/23 7:36 下午
 */
public class RedisSpit {
    // 服務(wù)器列表
    public static List<String> servers = new ArrayList<>();
    static {
        servers.add("127.0.0.1:6380");
        servers.add("127.0.0.1:6381");
        servers.add("127.0.0.1:6382");
    }
    public static void main(String[] args) throws IOException {
        /**
         * redis服務(wù)器網(wǎng)關(guān) 客戶端統(tǒng)一連接該網(wǎng)關(guān)
         */
        ServerSocket serverSocket = new ServerSocket(12530);
        Socket socket;
        while ((socket = serverSocket.accept())!= null){
            try {
                while (true){
                    InputStream inputStream =  socket.getInputStream();
                    byte[] request = new byte[1024];
                    inputStream.read(request);
                    String req = new String(request);
                    String[] params = req.split("\r\n");
                    int keyLength = Integer.parseInt(params[3].split("\\$")[1]);
                    // 根據(jù)鍵長(zhǎng)選擇服務(wù)器
                    int mod = keyLength % servers.size();
                    String[] serverInfo = servers.get(mod).split(":");
                    // 連接實(shí)際的redis服務(wù)器
                    Socket client = new Socket(serverInfo[0],Integer.parseInt(serverInfo[1]));
                    // 數(shù)據(jù)轉(zhuǎn)發(fā)
                    client.getOutputStream().write(request);
                    byte[] response = new byte[1024];
                    client.getInputStream().read(response);
                    client.close();
                    // 數(shù)據(jù)回寫
                    socket.getOutputStream().write(response);
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

這個(gè)根據(jù)鍵長(zhǎng)對(duì)服務(wù)器數(shù)量取模來(lái)進(jìn)行分庫(kù),很方便的完成了對(duì)大數(shù)據(jù)的處理

二、讀寫分離

讀寫分離應(yīng)用到了主從數(shù)據(jù)庫(kù)的知識(shí),通過配置主從數(shù)據(jù)庫(kù),來(lái)實(shí)現(xiàn)讀寫分離

如何配置redis的主從數(shù)據(jù)庫(kù)呢?答案是利用配置文件中的slaveof,配置主節(jié)點(diǎn)

格式為  slaveof server port (如果conf里面沒有添加即可)
  • 主服務(wù)器


    主服務(wù)器6380
  • 從服務(wù)器


    從服務(wù)器6381

三、高可用

未完待續(xù)...
原理:及時(shí)心跳主服務(wù)器,如果主服務(wù)器掛了,及時(shí)使用從服務(wù)器充當(dāng)主服務(wù)器。

一、redis 入門(一)

二、redis 入門(二)

三、手寫redis客戶端

四、redis 讀寫分離、高可用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章大綱 一、基礎(chǔ)知識(shí)學(xué)習(xí)二、Redis常見的幾種架構(gòu)及優(yōu)缺點(diǎn)總結(jié)三、Redis之Redis Sentinel(哨...
    故事愛人c閱讀 1,246評(píng)論 3 12
  • 本文將要介紹的哨兵,它基于 Redis 主從復(fù)制,主要作用便是解決主節(jié)點(diǎn)故障恢復(fù)的自動(dòng)化問題,進(jìn)一步提高系統(tǒng)的高可...
    java成功之路閱讀 2,262評(píng)論 0 4
  • Redis主從復(fù)制是什么? 行話:也就是我們所說的主從復(fù)制,主機(jī)數(shù)據(jù)更新后根據(jù)配置和策略, 自動(dòng)同步到備機(jī)的mas...
    coding樂猿閱讀 782評(píng)論 0 0
  • 王一和繼續(xù)著手上的動(dòng)作,雙唇一邊從倩倩的唇上移到她的脖子鎖骨再到胸前,他低頭悄然含住柔軟之處的粉嫩凸起,倩倩一陣輕...
    一生愨閱讀 1,605評(píng)論 0 0
  • 我躺在床上,盯著天花板發(fā)呆。 一根戲如發(fā)絲的黑線穿過房頂,朝我伸過來(lái)。 我居然有一種熟悉的感覺。 我任由這根黑線穿...
    引誠(chéng)閱讀 301評(píng)論 0 0

友情鏈接更多精彩內(nèi)容