찾다
데이터 베이스RedisGo에서 Redis 읽기-쓰기 분리를 구현하는 방법

    왜 RESP 프로토콜을 이해해야 하나요?

    이 문제와 관련하여 Redis 미들웨어를 작성할 때 RESP 프로토콜을 이해해야 하는 이유를 설명하기 위해 예를 사용하고 싶습니다. Redis中间件,为什么需要了解RESP协议。

    Go에서 Redis 읽기-쓰기 분리를 구현하는 방법

    以上代码是编写了一个非常简单的TCP服务器,我们监听8888端口,尝试使用redis-cli -p 8888连接服务器后,而后查看打印出来的应用层报文。

    我们尝试执行下该代码,并且输入redis-cli -p 8888进行连接。

    我们编写的服务器获取redis客户端的报文为:

    *1

    COMMAND

    上面这个就是RESP协议的内容了,所以说,我们要编写一个Redis的中间件,我们需要先了解一下RESP协议才行。

    什么是RESP协议

    官网有相关的解释: https://redis.io/docs/reference/protocol-spec/

    RESP协议创建之初是专门为了Redis服务器和客户端的通信而设计的,该协议在Redis 1.2中引入,并且在Redis 2.0中,成为Redis通信的标准协议。该协议有如下优点:

    • 实现简单

    • 快速解析

    • 直接可阅读

    RESP根据其协议前缀,可以序列化不同的数据类型,例如: 整数、字符串、数组 等,还能标注 正常输出 和 错误输出等。除了流水线和发布订阅以外,RESP协议应该是最简单的请求-响应协议了。关于更多介绍,大佬们可以看看上面注释的官方文档。

    RESP协议规范

    RESP协议不同的部分使用rn

    Redis 읽기-쓰기 분리를 구현하는 방법위 내용 코드가 작성되었습니다. 우리는 8888 포트를 수신하고 redis-cli -p 8888을 사용해 매우 간단한 TCP 서버를 만들었습니다. 서버에 연결한 다음 애플리케이션 계층 메시지를 봅니다.
    위는 RESP 프로토콜의 내용이 공개되었으므로 Redis 미들웨어를 작성하려면 먼저 RESP 프로토콜을 이해해야 합니다.
    간단한 구현
  • RESP프로토콜 접두사에 따라 정수, 문자열, 배열 등 다양한 데이터 유형을 직렬화할 수 있으며 정상 출력 및 오류 출력도 표시할 수 있습니다. 파이프라인과 게시 및 구독 외에도 RESP 프로토콜은 가장 간단한 요청-응답 프로토콜이어야 합니다. 자세한 소개는 위에 설명된 공식 문서를 확인하세요.

    RESP 프로토콜 사양

    RESP프로토콜의 여러 부분은 rn(줄 바꿈)을 사용하여 구분됩니다. 즉, 5가지 데이터 유형을 지원합니다. 간단한 문자열, 오류, 정수, 복잡한 문자열 및 배열로 구성되어 설명합니다. Prefix+
    이 코드를 실행하고 redis-cli -p 8888을 입력하여 연결을 시도합니다. 우리가 작성한 서버는 redis 클라이언트로부터 메시지를 다음과 같이 받습니다: *1
    $7
    COMMAND
    RESP 프로토콜이란 무엇입니까 공식 웹사이트에 관련 설명이 있습니다: https://redis.io/docs/reference/protocol-spec/ RESP프로토콜은 원래 Redis 서버와 클라이언트 간의 통신을 위해 설계된 이 프로토콜은 Redis 1.2에 도입되어 Redis 2.0에서 Redis가 되었습니다. 통신을 위한 표준 프로토콜입니다. 이 프로토콜에는 다음과 같은 장점이 있습니다.
    빠른 분석 직접 읽기 가능
    Type
    Remarks 단순 문자열
    단순 문자열은 + 로 시작 with -
    정수🎜 🎜 : egIntegers는 시작합니다 : 🎜🎜🎜🎜complex strings 🎜🎜 $ 🎜🎜complex 현악기 $ 🎜🎜🎜🎜 arrays 🎜🎜 *🎜🎜 arrays 시작 *🎜🎜🎜🎜 🎜🎜🎜🎜로 시작합니다.

    我当初看到这个的时候,也是迷迷糊糊的,到底什么意思呢? 哎,我们举个例子你就明白了。

    若我们想执行

    set juejinName pdudo

    若使用RESP 协议应当如何编写呢?应当编写如下:

    *3
    $3
    set
    $10
    juejinName
    $5
    pdudo

    那我们来解释一下*3代表有3个数组,而$3代表复杂字符串有长度为3,值为set$10代表复杂字符串长度为10,值为juejinName$5代表复杂字符串长度为5,值为pdudo

    我们结合上述信息,可以画一张图。

    Go에서 Redis 읽기-쓰기 분리를 구현하는 방법

    这就是协议的内容了。

    而协议前缀+-:则要简单的多,直接跟数据即可,

    例如:

    +

    +OK

    -

    -ERR syntax error

    :

    :3

    如何使用该协议请求Redis

    我们已经学习了相关的RESP协议,那么我们如何学习呢? 我们可以使用telnet命令来操作即可。

    在此,我们准备几条命令,我们会将其转换为RESP格式,且将其发送到redis服务器。

    命令

    set name pdudo
    get name
    lpush pn 1
    llen pn

    转换为RESP格式

    *3
    $3
    set
    $4
    name
    $5
    pdudo
    *2
    $3
    get
    $4
    name
    *3
    $5
    lpush
    $2
    pn
    $1
    1
    *2
    $4
    llen
    $2
    pn

    我们将其放置到telnet中执行一下呢

    Go에서 Redis 읽기-쓰기 분리를 구현하는 방법

    现在回头看看官网文档所提及的,该协议实现简单,直接可阅读,是不是理解的更加深刻了呢?

    使用go编写Redis中间件实现读写分离

    本篇暂不解释代码,而后单独开一篇谈论中间件代码。

    实现该功能,其实本质上是区分命令是查询还是写入,若是查询,则直接转发到从库,而写入,则转发到主库即可,其架构图可以理解为如下:

    Go에서 Redis 읽기-쓰기 분리를 구현하는 방법

    我们已经有了目前的架构。

    主机 端口 密码 角色
    127.0.0.1 6379 主库
    127.0.0.1 7380 从库

    위 내용은 Go에서 Redis 읽기-쓰기 분리를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명
    이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
    Redis vs. SQL 데이터베이스 : 주요 차이점Redis vs. SQL 데이터베이스 : 주요 차이점Apr 25, 2025 am 12:02 AM

    Redis와 SQL 데이터베이스의 주요 차이점은 Redis가 고성능 및 유연성 요구 사항에 적합한 메모리 데이터베이스라는 것입니다. SQL 데이터베이스는 관계형 데이터베이스로 복잡한 쿼리 및 데이터 일관성 요구 사항에 적합합니다. 구체적으로, 1) Redis는 고속 데이터 액세스 및 캐싱 서비스를 제공하고 캐싱 및 실시간 데이터 처리에 적합한 여러 데이터 유형을 지원합니다. 2) SQL 데이터베이스는 테이블 구조를 통한 데이터를 관리하고 복잡한 쿼리 및 트랜잭션 처리를 지원하며 데이터 일관성이 필요한 전자 상거래 및 금융 시스템과 같은 시나리오에 적합합니다.

    Redis : 데이터 저장소 및 서비스 역할을하는 방법Redis : 데이터 저장소 및 서비스 역할을하는 방법Apr 24, 2025 am 12:08 AM

    redisactsasbothadatastoreandaservice.1) asadatastore, itusesin-memorystorageforfastoperations, 지원을 지원합니다

    Redis 대 기타 데이터베이스 : 비교 분석Redis 대 기타 데이터베이스 : 비교 분석Apr 23, 2025 am 12:16 AM

    redis 与其他数据库相比 与其他数据库相比, 与其他数据库相比 : 1) 速度极快 速度极快 速度极快, 读写操作通常在微秒级别; 2) 支持丰富的数据结构和操作; 3) 灵活的使用场景 3) 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 灵活的使用场景 3) redis 또는 기타 데이터베이스를 선택할 때 특정 요구 사항과 시나리오에 따라 다릅니다. Redis는 고성능 및 저도가 낮은 응용 프로그램에서 잘 수행됩니다.

    Redis의 역할 : 데이터 저장 및 관리 기능 탐색Redis의 역할 : 데이터 저장 및 관리 기능 탐색Apr 22, 2025 am 12:10 AM

    Redis는 데이터 저장 및 관리에서 핵심적인 역할을하며 여러 데이터 구조 및 지속 메커니즘을 통해 현대 애플리케이션의 핵심이되었습니다. 1) Redis는 문자열, 목록, 컬렉션, 주문 컬렉션 및 해시 테이블과 같은 데이터 구조를 지원하며 캐시 및 복잡한 비즈니스 로직에 적합합니다. 2) RDB와 AOF의 두 가지 지속 방법을 통해 Redis는 신뢰할 수있는 스토리지 및 데이터의 빠른 복구를 보장합니다.

    REDIS : NOSQL 개념 이해REDIS : NOSQL 개념 이해Apr 21, 2025 am 12:04 AM

    Redis는 대규모 데이터의 효율적인 저장 및 액세스에 적합한 NOSQL 데이터베이스입니다. 1.Redis는 여러 데이터 구조를 지원하는 오픈 소스 메모리 데이터 구조 스토리지 시스템입니다. 2. 캐싱, 세션 관리 등에 적합한 매우 빠른 읽기 및 쓰기 속도를 제공합니다. 3. REDIS는 RDB 및 AOF를 통해 지속성을 지원하고 데이터 보안을 보장합니다. 4. 사용 예제에는 기본 키 값 쌍 작업 및 고급 수집 중복 제거 기능이 포함됩니다. 5. 일반적인 오류에는 연결 문제, 데이터 유형 불일치 및 메모리 오버플로가 포함되므로 디버깅에주의를 기울여야합니다. 6. 성능 최적화 제안에는 적절한 데이터 구조 선택 및 메모리 제거 전략 설정이 포함됩니다.

    REDIS : 실제 사용 사례 및 예제REDIS : 실제 사용 사례 및 예제Apr 20, 2025 am 12:06 AM

    실제 세계에서 Redis의 애플리케이션에는 다음이 포함됩니다. 1. 캐시 시스템으로서 데이터베이스 쿼리를 가속화, 2. 웹 응용 프로그램의 세션 데이터를 저장하려면 3. 실시간 순위를 구현하려면 메시지 전달을 메시지 큐로 단순화합니다. Redis의 다목적 성과 고성능은 이러한 시나리오에서 빛을 발합니다.

    Redis : 기능과 기능을 탐색합니다Redis : 기능과 기능을 탐색합니다Apr 19, 2025 am 12:04 AM

    Redis는 고속, 다양성 및 풍부한 데이터 구조로 인해 두드러집니다. 1) Redis는 문자열, 목록, 컬렉션, 해시 및 주문 컬렉션과 같은 데이터 구조를 지원합니다. 2) 메모리를 통해 데이터를 저장하고 RDB 및 AOF 지속성을 지원합니다. 3) Redis 6.0에서 시작하여 멀티 스레드 I/O 작업이 도입되어 동시 동시성 시나리오에서 성능이 향상되었습니다.

    Redis는 SQL 또는 NOSQL 데이터베이스입니까? 대답이 설명되었습니다Redis는 SQL 또는 NOSQL 데이터베이스입니까? 대답이 설명되었습니다Apr 18, 2025 am 12:11 AM

    redisisclassifiedasanoSqldatabaseBecauseItuseSakey-valuedatamodelinsteadofThraditionalRelationalDatabasemodel.Itoffersspeedandflexibility, makingIdealforreal-timeApplicationsandcaching, butitmaynotbesuitableforscenariosrequiringstrictaintetaintetaintetaintetaintetaintetaintegry

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    Video Face Swap

    Video Face Swap

    완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

    뜨거운 도구

    SublimeText3 영어 버전

    SublimeText3 영어 버전

    권장 사항: Win 버전, 코드 프롬프트 지원!

    ZendStudio 13.5.1 맥

    ZendStudio 13.5.1 맥

    강력한 PHP 통합 개발 환경

    MinGW - Windows용 미니멀리스트 GNU

    MinGW - Windows용 미니멀리스트 GNU

    이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

    Eclipse용 SAP NetWeaver 서버 어댑터

    Eclipse용 SAP NetWeaver 서버 어댑터

    Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

    Atom Editor Mac 버전 다운로드

    Atom Editor Mac 버전 다운로드

    가장 인기 있는 오픈 소스 편집기