文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

自研高性能的Redis中间件

2024-12-03 02:27

关注

本文转载自微信公众号「漫漫技术路」,作者刘莅。转载本文请联系漫漫技术路公众号。  

接口请求量越来越大,为了缩短服务的响应时间、减轻数据库的压力,我们通常会在数据库前架设Redis。

但是单台Redis的内存有限,所以我们需要部署多个Redis节点。在业务里,我们可以根据key,将读写请求转发到不同的Redis节点,或者业务直连一个代理Proxy,请求路由规则由Proxy处理。

Proxy对于客户端来说,就相当于一个Redis,客户端连接到Redis上和连接到Proxy上,从本质上没什么区别。

目前业界有很多Redis Proxy,比如鼎鼎大名的Codis。用别人的产品多少会感觉内心不爽。作为一个爱造的程序员,当然也要自己写一个Redis Proxy了。

本文就为大家介绍一个笔者自研的Redis Proxy——Nedis。

架构图

特点

无状态,Nedis节点可水平扩展

数据分片、读写分离

支持多种路由

基于Netty开发,性能良好、轻量级

实现原理

我们从架构图中可以看到,Nedis主要由两大组件组成,netty-client和netty-server。

netty-client作用如下

Redis的客户端,如Jedis、redis-cli可以直接连接到Nedis。准确的说,Redis客户端连接到Nedis的netty-client组件,netty-client组件是处理Redis客户端发送的请求,然后对请求进行简单的解码,解析到key以后,根据key的hash值,将请求转发到相应的netty-server上。

netty-server作用如下

netty-server起到一个承上启下的作用。上承netty-client,接收Redis客户端的请求,下接Redis读写分离集群,将Redis客户端的请求发送给Redis,Redis的响应给netty-server,netty-server再把数据通过channel返回给Redis客户端。

Nedis启动后,会启动多个netty-server,每个netty-server会连接到一个Redis读写分离集群中。Nedis的端口、Redis读写分离集群的信息,都在配置文件中进行配置。

下面给大家演示一下吧

信息
IP
端口
角色
redis1
127.0.0.1
6379
redis-server
redis2
127.0.0.1 6381 redis-server
Nedis
127.0.0.1
6380
proxy

启动了两个Redis,端口分别是6379和6381,然后启动Nedis连接这两个Redis,Nedis端口是6380。通过redis-cli分别连接redis和Nedis,然后在连接Nedis的客户端输入命令,可以在monitor中看到,达到了根据key的hash值,对数据分片。

一些小细节

遇到keys命令怎么办?

对于数据库的Proxy,分库分表中间件MyCat、Shardingsphere等,我们通过分表字段,比如userId、主键,是很容易查到我们想要的数据。但是通过非分表字段,如user_name,create_time,查询需要扫描全部数据。

对于Redis的Proxy也一样,如keys命令、info命令等,需要查全部Redis节点,然后把数据汇总后返回给客户端。

在Nedis里,是禁止keys等命令的。如果Nedis收到keys等命令,Nedis会随机选择一台Redis,将单台Redis的数据返回给客户端。

单台Nedis扛不住怎么办?

Jedis等客户端连接一个Nedis节点,如果一个Nedis节点性能不足,可以将Nedis分散步部署多台,水平扩展提高Nedis集群性能和可用性。

未来规划

总的来说,Nedis还有很多功能需要完善。

支持读写分离

配置热更新

支持指定key路由到指定Redis上

 

支持多种路由规则,如一致性哈希,减少由于Redis扩容或缩容,导致缓存穿透问题

 

来源:漫漫技术路内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯