Skip to content

chaohona/redis-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

代理支持多种工作模式,可以起多个进程通过一个端口同时对外提供服务
1、twemproxy
代理可以取代twemproxy,比twemproxy性能更高(接近2倍)
一个代理只能管理一个集群
2、cluster
代理可以管理redis原生的集群,支持在线扩缩容

支持Redis虚拟化,一个Redis进程支持上千个使用实例。

测试报告

怎么使用
make
make release
cd release
sh tiny_run.sh
启动之后可以通过界面"http://ip:8888/redis"申请,释放,清空Redis

yaml解析库为0.6.0版本

Redis协议特点

  • 请求与相应的映射关系靠的是顺序的一一对应,没有回调数据,先发送的请求先响应
  • 协议头没有协议的整体字节长度信息,只有一个字符一个字符的解析协议,才能知道协议的边界在哪

代码主流程

  • main->GR_Run->GR_MasterProcess(监控进程)
  • main->GR_Run->GR_StartNewChild(启动工作进程)->GR_Proxy::WorkLoop

GR_Proxy:进程管理类

GR_Epoll: epoll网络事件管理类

GR_Event: 网络事件基类,redis和client的连接都继承自它

GR_AccessMgr: 客户端管理类

  • GR_AccessMgr::CreateListenEvent 启动监听端口
  • GR_AccessMgr::CreateClientEvent 创建客户端连接GR_AccessEvent

GR_AccessEvent: 客户端连接

  • m_ReadCache 消息接收buffer
  • m_ReadMsg 消息解析器,用于解析收到的redis协议的消息
  • m_pRoute Redis连接管理,客户端消息路由处理类
  • m_pWaitRing 等待响应的请求等待队列
  • GR_AccessEvent::Read->ProcessMsg处理从客户端过来的消息
    • m_pRoute->Route 将消息路由给对应的Redis
  • GR_AccessEvent::DoReply 处理从redis响应的消息
    • GR_AccessEvent::Sendv 向客户端发送收到的响应

GR_RedisEvent:Redis连接

  • m_ReadCache 消息接收buffer
  • m_ReadMsg 消息解析器,用于解析收到的redis协议的消息
  • m_pWaitRing 等待响应的请求等待队列
  • GR_RedisEvent::Sendv 向Redis发送收到的客户端的请求
  • GR_RedisEvent::Read->ProcessMsg 处理从Redis过来的消息
    • pIdenty->GetReply 将响应返回给客户端

GR_Route:Redis连接管理基类,处理请求到Redis的路由

  • GR_ClusterRoute Redis原生集群的消息路由处理类
  • GR_TwemRoute Twem模式的消息路由处理类

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •