Redis 代理( Twemproxy 或 Redis Proxy)

news2025/1/13 23:50:07

文章目录

  • Twemproxy
    • Twemproxy 的主要特性
    • Twemproxy 的部署架构
    • Twemproxy 的配置示例
        • 安装 Twemproxy
        • 配置文件(YAML 示例)
        • 启动 Twemproxy
      • Twemproxy 的优缺
        • 优点
        • 缺点
  • Redis Proxy
    • Redis Proxy 的主要特性
    • Redis Proxy 的部署架构
    • Redis Proxy 的配置和使用
      • Twemproxy 和 Redis Proxy 的对比
      • 总结

  • Redis 代理(如 TwemproxyRedis Proxy)是 Redis 集群的中间层,用于简化客户端与 Redis 集群之间的交互,提供负载均衡、分片、连接池管理等功能。以下是关于 TwemproxyRedis Proxy 的详细介绍:

Twemproxy

  • Twemproxy 是由 Twitter 开发的一款高性能中间代理层,支持 Redis 和 Memcached。它的核心功能是对分布式 Redis 进行透明的代理,客户端只需要连接到 Twemproxy 而无需关心分片或密码管理。

Twemproxy 的主要特性

  1. 分片支持
    • 客户端与 Twemproxy 交互,Twemproxy 自动将请求分配到不同的 Redis 实例。
    • 支持一致性哈希算法,保证数据分片的均匀分布。
  2. 连接池管理
    • 客户端到 Twemproxy 是短连接,而 Twemproxy 到 Redis 实例是长连接,减少 Redis 的连接压力。
  3. 负载均衡
    • 根据配置分配请求到多个 Redis 实例,实现负载均衡。
  4. 简单配置
    • 通过 YAML 文件配置 Redis 集群和分片规则。
  5. 高性能
    • 使用 C 语言编写,单线程处理,性能接近于 Redis 原生连接。

Twemproxy 的部署架构

客户端  <-->  Twemproxy  <-->  Redis 实例 1
                        <-->  Redis 实例 2
                        <-->  Redis 实例 3

客户端只需连接到 Twemproxy,所有请求由 Twemproxy 分发到对应的 Redis 实例。


Twemproxy 的配置示例

假设有 3 个 Redis 实例,地址分别为 127.0.0.1:6379127.0.0.1:6380127.0.0.1:6381,每个实例配置不同的密码。

安装 Twemproxy
  1. 下载并安装 Twemproxy:
    git clone https://github.com/twitter/twemproxy.git
    cd twemproxy
    autoreconf -fvi
    ./configure
    make
    sudo make install
    
  2. 检查安装:
    nutcracker --version
    
配置文件(YAML 示例)

/etc/nutcracker.yml 中创建如下配置文件:

redis_pool:
  listen: 127.0.0.1:22121  # Twemproxy 监听的地址和端口
  hash: fnv1a_64          # 使用的哈希算法
  distribution: ketama    # 一致性哈希
  timeout: 2000           # 请求超时时间(毫秒)
  redis: true             # 是否为 Redis(true 表示支持 Redis 协议)
  servers:
    - 127.0.0.1:6379:1 redis_auth=password1 # 第一个 Redis 实例,密码 password1
    - 127.0.0.1:6380:1 redis_auth=password2 # 第二个 Redis 实例,密码 password2
    - 127.0.0.1:6381:1 redis_auth=password3 # 第三个 Redis 实例,密码 password3
  • listen:客户端连接 Twemproxy 的地址和端口。
  • servers
    • 每个 Redis 实例的地址和端口,格式为 host:port:weight redis_auth=密码
    • weight 表示分片权重,通常为 1。
启动 Twemproxy

启动命令:

nutcracker -c /etc/nutcracker.yml

测试是否运行成功:

redis-cli -p 22121

连接成功后,Twemproxy 会根据分片规则自动分发请求到后端的 Redis 实例。


Twemproxy 的优缺

优点
  1. 透明分片:客户端无需感知分片规则。
  2. 密码管理:支持每个 Redis 实例独立的密码认证。
  3. 高性能:C 语言实现,延迟低,资源占用小。
  4. 部署简单:只需配置一个代理层,不需要修改 Redis 实例。
缺点
  1. 单线程:Twemproxy 是单线程的,如果客户端并发过高,可能成为性能瓶颈。
  2. 不支持 Redis Cluster:Twemproxy 仅支持分片模式,不支持 Redis 官方的 Cluster 模式。
  3. 功能有限:不支持复杂的 Redis 命令(如 WATCHMULTI 等事务命令)。

Redis Proxy

  • Redis Proxy 是一种较新的 Redis 代理方案,专门设计用于解决 Twemproxy 的一些局限性。它支持更多 Redis 特性,例如 Redis Cluster 和事务。

Redis Proxy 的主要特性

  1. 支持 Redis Cluster:原生支持 Redis Cluster 模式,可以自动处理分片和节点迁移。
  2. 多线程支持:支持多线程,解决了 Twemproxy 的单线程性能瓶颈问题。
  3. 全命令支持:支持 Redis 的所有命令,包括事务、脚本等。
  4. 灵活认证:支持对每个 Redis 实例单独配置密码。
  5. 高性能:使用高效的网络模型,性能更接近于原生 Redis。

Redis Proxy 的部署架构

  • Redis Proxy 的架构与 Twemproxy 类似,但支持更多特性:
客户端  <-->  Redis Proxy  <-->  Redis Cluster
                          <-->  Redis 实例 1
                          <-->  Redis 实例 2
                          <-->  Redis 实例 3
  • 客户端连接 Redis Proxy,所有请求由 Proxy 自动分发到 Redis 实例或 Cluster 中的节点。

Redis Proxy 的配置和使用

  • Redis Proxy 的部署依赖于具体实现(如 KeyDB Proxy),以下是 KeyDB Proxy 的简单配置示例:
  1. 安装 KeyDB Proxy

    • 下载并安装 KeyDB(KeyDB 是 Redis 的一个分支,提供 Proxy 功能)。
    wget https://download.keydb.dev/keydb-6.3.2.tar.gz
    tar -xvzf keydb-6.3.2.tar.gz
    cd keydb-6.3.2
    make
    
  2. 配置文件

    • 配置文件支持 Redis 实例的地址、密码和 Cluster 支持。示例:
    bind 127.0.0.1
    port 6379
    
    # 配置后端 Redis 实例
    replicaof 127.0.0.1 6379 requirepass password1
    replicaof 127.0.0.2 6380 requirepass password2
    replicaof 127.0.0.3 6381 requirepass password3
    
  3. 启动 KeyDB Proxy

    ./src/keydb-server /path/to/your/config.conf
    
  4. 测试连接:使用 redis-cli 连接代理服务,测试其分片和密码管理功能。


Twemproxy 和 Redis Proxy 的对比

特性TwemproxyRedis Proxy
分片支持基于一致性哈希支持 Redis Cluster 原生分片
多线程支持单线程支持多线程
全命令支持不支持复杂命令(事务、脚本等)支持 Redis 全命令
部署复杂度简单(支持分片模式)稍复杂(适用于 Redis Cluster 模式)
性能高效,但单线程可能成为瓶颈更高效,适用于高并发场景
适用场景传统分片场景,不适用 Redis Cluster 场景分布式高性能场景,适合 Redis Cluster

总结

  • 如果你的 Redis 集群是分片模式,且功能需求简单,建议使用 Twemproxy
  • 如果你的 Redis 集群是 Cluster 模式,或对性能和复杂命令支持有更高要求,建议选择 Redis Proxy(如 KeyDB Proxy)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机组成原理(1)

系统概述 计算机硬件基本组成早期冯诺依曼机现代计算机 计算机各部分工作原理主存储器运算器控制器计算机工作过程 此文章的图片资源获取来自于王道考研 计算机硬件基本组成 早期冯诺依曼机 存储程序是指将指令以二进制的形式事先输入到计算机的主存储器&#xff0c;然后按照…

基于element UI el-dropdown打造表格操作列的“更多⌵”上下文关联菜单

<template><div :class"$options.name"><el-table :data"tableData"><el-table-column type"index" label"序号" width"60" /><!-- 主要列 BEGIN---------------------------------------- --&g…

Oracle 表分区简介

目录 一. 前置知识1.1 什么是表分区1.2 表分区的优势1.3 表分区的使用条件 二. 表分区的方法2.1 范围分区&#xff08;Range Partitioning&#xff09;2.2 列表分区&#xff08;List Partitioning&#xff09;2.3 哈希分区&#xff08;Hash Partitioning&#xff09;2.4 复合分…

罗永浩再创业,这次盯上了 AI?

罗永浩&#xff0c;1972年7月9日生于中国延边朝鲜族自治州的一个军人家庭&#xff0c;是一名朝鲜族人&#xff1b;早年在新东方授课&#xff0c;2004年当选 “网络十大红人” &#xff1b;2006年8月1日&#xff0c;罗永浩创办牛博网&#xff1b;2008年5月&#xff0c;罗永浩注册…

自然语言处理基础:全面概述

自然语言处理基础&#xff1a;全面概述 什么是NLP及其重要性、NLP的核心组件、NLU与NLG、NLU与NLG的集成、NLP的挑战以及NLP的未来 自然语言处理&#xff08;NLP&#xff09;是人工智能&#xff08;AI&#xff09;中最引人入胜且具有影响力的领域之一。它驱动着我们日常使用的…

WPF系列八:图形控件Path

简介 Path控件支持一种称为路径迷你语言&#xff08;Path Mini-Language&#xff09;的紧凑字符串格式&#xff0c;用于描述复杂的几何图形。这种语言通过一系列命令字母和坐标来定义路径上的点和线段&#xff0c;最终绘制出想要的图形。 绘制任意形状&#xff1a;可以用来绘…

计算机图形学【绘制立方体和正六边形】

工具介绍 OpenGL&#xff1a;一个跨语言的图形API&#xff0c;用于渲染2D和3D图形。它提供了绘制图形所需的底层功能。 GLUT&#xff1a;OpenGL的一个工具库&#xff0c;简化了窗口创建、输入处理和其他与图形环境相关的任务。 使用的函数 1. glClear(GL_COLOR_BUFFER_BIT |…

有限元分析学习——Anasys Workbanch第一阶段笔记(10)桌子载荷案例分析_实际载荷与均布载荷的对比

目录 0 序言 1 桌子案例 2 模型简化 3 方案A 前处理 1&#xff09;分析类型选择 2&#xff09;材料加载 3&#xff09;约束、载荷及接触 4&#xff09;控制网格(网格大小需要根据结果不断调整) 初始计算结果 加密后计算结果 4 方案B、C 前处理 1&#xff09;分析…

Docker compose 使用 --force-recreate --no-recreate 控制重启容器时的行为【后续】

前情&#xff1a;上一篇实际是让AI工具帮我总结了一下讨论的内容&#xff0c;这里把讨论的过程贴出来&#xff0c;这个讨论是为解决实际问题 前文https://blog.csdn.net/wgdzg/article/details/145039446 问题说明&#xff1a; 我使用 docker compose 管理我的容器&#xff0…

Mysql--基础篇--多表查询(JOIN,笛卡尔积)

在MySQL中&#xff0c;多表查询&#xff08;也称为联表查询或JOIN操作&#xff09;是数据库操作中非常常见的需求。通过多表查询&#xff0c;你可以从多个表中获取相关数据&#xff0c;并根据一定的条件将它们组合在一起。MySQL支持多种类型的JOIN操作&#xff0c;每种JOIN都有…

postgresql|数据库|利用sqlparse和psycopg2库批量按顺序执行SQL语句(psyconpg2新优化版本)

一、 旧版批量执行SQL脚本的python文件缺点&#xff0c;优点&#xff0c;以及更新内容 书接上回&#xff0c;postgresql|数据库开发|python的psycopg2库按指定顺序批量执行SQL文件(可离线化部署)_python sql psycopg2-CSDN博客 这个python脚本写了很久了&#xff0c;最近开始…

5个不同类型的数据库安装

各种社区版本下载官方地址&#xff1a;MySQL :: MySQL Community Downloads 一、在线YUM仓库&#xff08;Linux&#xff09; 选择 MySQL Yum Repository 选择对应版本下载仓库安装包&#xff08;No thanks, just start my download.&#xff09; 下载方法1&#xff1a;下载到本…

shell基础使用及vim的常用快捷键

一、shell简介 参考博文1 参考博文2——shell语法及应用 参考博文3——vi的使用 在linux中有很多类型的shell&#xff0c;不同的shell具备不同的功能&#xff0c;shell还决定了脚本中函数的语法&#xff0c;Linux中默认的shell是 / b in/ b a s h &#xff0c;流行的shell…

Spring Data Elasticsearch简介

一、Spring Data Elasticsearch简介 1 SpringData ElasticSearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎。它底层封装了Lucene框架,可以提供分布式多用户的全文搜索服务。 Spring Data ElasticSearch是SpringData技术对ElasticSearch原生API封装之后的产物,它通…

【巨实用】Git客户端基本操作

本文主要分享Git的一些基本常规操作&#xff0c;手把手教你如何配置~ ● 一个文件夹中初始化Git git init ● 为了方便以后提交代码需要对git进行配置&#xff08;第一次使用或者需求变更的时候&#xff09;&#xff0c;告诉git未来是谁在提交代码 git config --global user.na…

有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗

近期&#xff0c;有多名开发者反馈&#xff0c;收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞&#xff0c;写给AppStore的投诉邮件。 邮件内容主要说的是&#xff0c;腾讯注册了【水印相机】这四个字的商标&#xff0c;所以你们这些在AppStore上的app&…

导出文件,能够导出但是文件打不开

背景&#xff1a; 在项目开发中&#xff0c;对于列表的查询&#xff0c;而后会有导出功能&#xff0c;这里导出的是一个excell表格。实现了两种&#xff0c;1.导出的文件&#xff0c;命名是前端传输过去的&#xff1b;2.导出的文件&#xff0c;命名是根据后端返回的文件名获取的…

Redis 源码分析-内部数据结构 dict

Redis 源码分析-内部数据结构 dict 在上一篇 Redis 数据库源码分析 提到了 Redis 其实用了全局的 hash 表来存储所有的键值对&#xff0c;即下方图示的 dict&#xff0c;dict 中有两个数组&#xff0c;其中 ht[1] 只在 rehash 时候才真正用到&#xff0c;平时都是指向 null&am…

010:传统计算机视觉之大津算法初探

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一节学习了利用 Canny 算法来完成一个图片的边缘检测&#xff0c;从而可以区分出图像的边缘。 本节再了解一个计算机视觉中更常见的应用&#xff0c;那就是把图片的前景和…

使用Cilium/eBPF实现大规模云原生网络和安全

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 抽象 1 Trip.com 云基础设施 1.1 分层架构 1.2 更多细节 2 纤毛在 Trip.com 2.1 推出时间表 2.2 自定义 2.3 优化和调整 2.3.1 解耦安装 2.3.2 避免重试/重启风暴 2.3.3 稳定性优先 2…