> 文档中心 > Redis基础

Redis基础

一、Redis简介
Redis是一个高性能的 key-value 数据库

二、Redis的特点
支持数据的持久化
数据类型丰富

三、redis数据类型

string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

1、string(字符串)

#设置SET runoob "菜鸟教程"
#获取GET runoob

2、Hash(哈希)

#设置HMSET runoob field1 "Hello" field2 "World"
#获取HGET runoob field1HGET runoob field2

3、List(列表)

#设置lpush runoob redislpush runoob mongodblpush runoob rabbitmq
#获取redis 127.0.0.1:6379> lrange runoob 0 101) "rabbitmq"2) "mongodb"3) "redis"

4、Set(集合)

#语法sadd key member
#设置sadd runoob redissadd runoob mongodbsadd runoob rabbitmqsadd runoob rabbitmq
#获取redis 127.0.0.1:6379> smembers runoob1) "redis"2) "rabbitmq"3) "mongodb"

5、zset(sorted set:有序集合)

#语法zadd key score member 
#设置zadd runoob 0 rediszadd runoob 0 mongodbzadd runoob 0 rabbitmqzadd runoob 0 rabbitmq
#获取redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 10001) "mongodb"2) "rabbitmq"3) "redis"

注:删除用DEL key

四、Redis 发布订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

五、Redis 事务

1、一个事务从开始到执行会经历以下三个阶段:
开始事务。
命令入队。
执行事务。

2、实例
先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令

redis 127.0.0.1:6379> MULTIOKredis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"QUEUEDredis 127.0.0.1:6379> GET book-nameQUEUEDredis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"QUEUEDredis 127.0.0.1:6379> SMEMBERS tagQUEUEDredis 127.0.0.1:6379> EXEC1) OK2) "Mastering C++ in 21 days"3) (integer) 34) 1) "Mastering Series"   2) "C++"   3) "Programming"

六、Redis Stream
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。

简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。

而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

消息队列相关命令:
XADD - 添加消息到末尾
XTRIM - 对流进行修剪,限制长度
XDEL - 删除消息
XLEN - 获取流包含的元素数量,即消息长度
XRANGE - 获取消息列表,会自动过滤已经删除的消息
XREVRANGE - 反向获取消息列表,ID 从大到小
XREAD - 以阻塞或非阻塞方式获取消息列表

消费者组相关命令:
XGROUP CREATE - 创建消费者组
XREADGROUP GROUP - 读取消费者组中的消息
XACK - 将消息标记为"已处理"
XGROUP SETID - 为消费者组设置新的最后递送消息ID
XGROUP DELCONSUMER - 删除消费者
XGROUP DESTROY - 删除消费者组
XPENDING - 显示待处理消息的相关信息
XCLAIM - 转移消息的归属权
XINFO - 查看流和消费者组的相关信息;
XINFO GROUPS - 打印消费者组的信息;
XINFO STREAM - 打印流信息

七、Redis 数据备份与恢复
1、备份
Redis SAVE 命令用于创建当前数据库的备份

实例:

redis 127.0.0.1:6379> SAVE OK

该命令将在 redis 安装目录中创建dump.rdb文件。

2、恢复

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:

redis 127.0.0.1:6379> CONFIG GET dir1) "dir"2) "/usr/local/redis/bin"

以上命令 CONFIG GET dir 输出的 redis 安装目录为 /usr/local/redis/bin。

八、Redis 安全

1、实例
我们可以通过以下命令查看是否设置了密码验证:

127.0.0.1:6379> CONFIG get requirepass1) "requirepass"2) ""

默认情况下 requirepass 参数是空的,这就意味着你无需通过密码验证就可以连接到 redis 服务。

你可以通过以下命令来修改该参数:

127.0.0.1:6379> CONFIG set requirepass "runoob"OK127.0.0.1:6379> CONFIG get requirepass1) "requirepass"2) "runoob"

设置密码后,客户端连接 redis 服务就需要密码验证,否则无法执行命令。

语法
AUTH 命令基本语法格式如下:

127.0.0.1:6379> AUTH password实例127.0.0.1:6379> AUTH "runoob"OK127.0.0.1:6379> SET mykey "Test value"OK127.0.0.1:6379> GET mykey"Test value"

九、Redis 管道技术
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
服务端处理命令,并将结果返回给客户端。

Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

管道技术的优势:管道技术最显著的优势是提高了 redis 服务的性能。

十、Redis 分区
分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。

十一、其他
Redis队列实时和非实时:这个说的实时和非实时主要针对的是消费者这边,消息生产者在生产消息后,Redis队列里存储了这些消息,而何时消费就是我们要关心的问题了,非实时是说,在后端有个轮训服务定时从队列里拿消息,这有一定的延时性;实时是说在消费者一边建立Tcp长连接,当队列有数据后马上消费它,当没有数据时线程处于挂起等待状态!