0%

redis分库分表,读写分离

文章字数:238,阅读全文大约需要1分钟

原文

分库分表

  1. 开启多个redis服务
  2. 建立路由网关
  3. 在网关里设立规则,使不同的键分发到各个redis
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    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 {
    // 服务器列表
    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服务器网关 客户端统一连接该网关
    */
    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]);
    // 根据键长选择服务器
    int mod = keyLength % servers.size();
    String[] serverInfo = servers.get(mod).split(":");
    // 连接实际的redis服务器
    Socket client = new Socket(serverInfo[0],Integer.parseInt(serverInfo[1]));
    // 数据转发
    client.getOutputStream().write(request);
    byte[] response = new byte[1024];
    client.getInputStream().read(response);
    client.close();
    // 数据回写
    socket.getOutputStream().write(response);
    }
    }catch (Exception e){
    e.printStackTrace();
    }
    }
    }
    }

读写分离

使用配置文件中的slaeof server port配置主节点,实现主从的读写分离