Redis实现分表分库

Redis压力测试

在这里插入图片描述
指令:./redis-benchmark -h 127.0.0.1

Redis实现分表分库

Redis数据压力
在这里插入图片描述

如果mysql压力不够,使用mycat
如果tomcat压力不够,使用nginx
如果redis内存不够呢?
这时我们可以使用分表分库。

分库思路

在这里插入图片描述

  • 不管数据库还是客户的缓存都找代理(网关)
  • 对Key进行路由(这里是通过Key的长度取模)
  • 把数据存到相应Redis服务器

代码解析
在这里插入图片描述
redis默认端口6379,在这里我们增添6380、6381两个端口

package com.zyc.split;

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

/**
 * Redis分库
 */
public class RedisProxy {
    
    
	private static List<String> servers = new ArrayList<String>();
	//初始化
	static {
    
    
		servers.add("127.0.0.1:6379");
		servers.add("127.0.0.1:6380");
		servers.add("127.0.0.1:6381");
	}

	// 最简单的代理实现负载均衡
	public static void main(String[] args) throws Exception {
    
    
		// 监听端口
		ServerSocket serverSocket = new ServerSocket(19000);
		Socket socket;
		while ((socket = serverSocket.accept()) != null) {
    
    
			try {
    
    
				
				while(true) {
    
    

					System.out.println("一个链接....");
					InputStream inputStream = socket.getInputStream();
					byte[] request = new byte[1024];
					inputStream.read(request);
					// 解析请求 RESP
					String req = new String(request);
					System.out.println("收到请求:");

					System.out.println(req);
					
					String[] params = req.split("\r\n");
					// 获取key的长度
					int keyLenth = Integer.parseInt(params[3].split("\\$")[1]);
					// 根据key长度取模
					int mod = keyLenth % servers.size();
					// 根据取模结果获取地址
					System.out.println("根据算法选择服务器:" + servers.get(mod));
					//127.0.0.1:6380
					String[] serverInfo = servers.get(mod).split(":");
					// 处理请求
					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);

					System.out.println("##############打印结束");
					System.out.println();
				
				}
			}catch (Exception e) {
    
    
			}
			
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_47723535/article/details/109318832