Redis学习总结

本文介绍了Redis作为NoSQL数据库的关键特性,包括内存操作、分布式、通信协议(如RESP和MultiBulkCommand/inlineCommand)、认证机制(如密码认证和TLS),以及如何使用和搭建Redis环境。提醒读者内容仅供参考,官方文档为权威来源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

本文章仅用于个人在学习redis后,对redis相关概念、协议特性做一个总结,文章内容可能并非完全准确。

什么是Redis?

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

Redis通信协议分析

Redis通信协议采用RESP协议,RESP协议属于人类可读的一种文本协议,协议本身属于一问一答类型,即通常情况下(非Pub/Sub模式),每个请求应该对应一个响应。

请求报文格式分析

Redis请求报文主要有两种格式,批量命令(Multi Bulk Command)和内联命令(inlineCommand):

Multi Bulk Command

多条批量命令使用数组的形式,每个元素表示一个命令及其参数。命令和参数按顺序排列,并用 CRLF(回车换行)分隔。

(这里将换行符\r\n用直观的换行效果展示)
*<number of arguments>
$<length of argument 1>
<argument 1>
$<length of argument 2>
<argument 2>
...
$<length of argument N>
<argument N>
示例
*3
$3
SET
$5
mykey
$7
myvalue

inline Command

内联命令以行为单位,每行包含一个命令及其参数。命令和参数之间使用空格分隔。

<command> arg1 arg2 arg3 ...

响应报文格式分析

Redis响应报文主要包括执行命令的结果、查询结果数据集等,响应报文的格式较多,具体可参考redis官方文档: redis

RESP2/RESP3

  • RESP3 是 RESP2 的超集,目前连接默认采用的协议是RESP2,可通过在连接上使用HELLO命令显示地升级协议到resp3
  • 设计RESP3目的主要是为了简化客户端的开发:RESP 也有缺陷。其中最明显的一点是,它没有足够的语义能力让客户端隐式地理解哪种转换是合适的。例如,Redis 命令 LRANGE、SMEMBERS 和 HGETALL 都会回复一个数组,在 RESP v2 中称为多重批量回复。但这三个命令实际上返回的是一个数组、一个集合和一个映射。目前,从客户端的角度来看,将回复转换为编程语言类型取决于命令。客户端需要记住调用了什么命令,才能将 Redis 的回复转换成某种回复对象。更糟糕的是,客户端需要了解每一条命令,或者提供一个较低级别的界面,让用户选择适当的转换。对RESP2和RESP3的详细阐述参考RESP2/3

RESP协议解析

  • 对于redis RESP协议的解析,hiredis提供了对RESP响应报文的解析支持,具体使用方式可参考hiredis源码中的使用示例test.C
  • 对于RESP请求报文的解析,由于请求报文两种格式相对固定,可自行封装相关函数进行解析,当然也可以参考redis源码中的相关实现。

Redis 认证机制

redis目前主要有3种安全认证机制:

  • 密码认证
  • 用户名/密码认证 (redis acl, Redis6.0引入)
  • tls双向认证

关于三种认证方式的详细介绍,读者可参考redis官方文档 redis中的相应章节。

Redis数据库

  • Redis有16个数据库,默认使用的是0号数据库,切换数据库可通过select n命令切换,如果是使用命令行客户端,有的客户端例如redis-cli支持redis-cli -n 1来指定使用的db分区;
  • 尽管有16个数据库可供选择,但在实际应用中,通常建议仅使用一个或几个数据库,以避免潜在的混淆和管理复杂性。

搭建Redis环境

在学习和使用redis时可使用docker方便的搭建redis环境,相关文章很多,可自行搜索。

常见的Redis Gui客户端

  • RedisInsight,目前redis官网主推的客户端
  • RedisDesktopManager,已经逐步向RedisInsight过渡
  • Another Redis Desktop Manager

再次说明

本文章仅作为个人学习redis的总结,内容正确性无法保证,要获取最准确的信息,请参考redis官方文档^^。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值