Redis命令及应用技术

一、作用:
Redis 命令用于redis服务上执行操作。
二、使用方式
要在redis服务上执行命令需要一个redis客户端。
三、语法:
redis-cli

四、如何启动Redis客户端:

  1. 方法一:直接启动(在redis目录下启动)
    启动redis客户端:打开终端(cmd)并输入命令redis-cli.该命令会连接本地的redis服务。


    2. 方法二:通过指定配置文件启动:(不一定要在redis文件下启动)
    服务端:

    客户端:

    如果不在redis.windows.conf配置文件设置dump.rdb文件的生成位置,
    那么启动redis的路径就是dump.rdb文件的生成路径,因为配置文件的默认路径为dir ./ 。如下图:

    重点:这个路径最好改成指定的路径,因为一旦redis启动路径和上次不一样,则读取不到上次持久化的数据。因为启动redis服务的时候,redis会去加载此目录下的dump.rdb文件。
    我改成了 d:/redis 表示,每次启动redis的时候都会在此目录下读取dump.rdb文件:

    重启redis,配置文件就会生效。

五、在远程服务上执行命令:
语法:redis-cli -h host -p port -a password

六、Redis 键(key)
Redis 键命令用于管理redis的键。
语法:command key_name.

七、Redis发布订阅

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

Redis客户端可以订阅任意数量的频道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

yii2 引入redis 怎么用redis_Redis


当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

yii2 引入redis 怎么用redis_yii2 引入redis_02


在一个窗口先创建订阅频道 :wuchannel ,再重新开一个redis客户端,在该频道wuchannel发布多个消息,然后订阅者就能接受到消息。

栗子:

yii2 引入redis 怎么用redis_客户端_03


八、Redis 事务:

multi 命令:开启事务,exec命令触发事务

Redis 事务可以一次执行多个命令,能做到2个保证:

  • 批量操作在发送EXEC命令前被放入队列缓存
  • 收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余命令依然执行;
  • 在事务执行的过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下3个阶段:

a. 开始事务,b.命令入队,c.执行事务。

注:单个redis命令的执行是原子性的但Redis 没有在事务上增加任何维持原子性的机制,所以Redis事务的执行不是原子性的。

栗子:

yii2 引入redis 怎么用redis_客户端_04


九、Redis 脚本命令:

Redis 脚本使用Lua解释器来执行脚本。2.6版本通过内嵌支持Lua环境。执行脚本的常用命令为:EVAL.

执行Lua脚本:

yii2 引入redis 怎么用redis_yii2 引入redis_05


十、Redis 连接

Redis 连接命令主要用于连接Redis服务。

AUTH password :验证密码是否正确

ECHO meaasge :打印字符串

PING:查看服务是否运行

QUIT:关闭当前连接

SELECT index:切换指定数据库

yii2 引入redis 怎么用redis_客户端_06


十一、Redis服务器:

Redis 服务器命令主要是用于管理redis服务。

命令栗子:

info:获取redis服务器的各种信息和统计数值

client list:获取连接到服务器的客户端连接列表

client name:获取连接的名称

client kill [ip:port] [ID client-id] :关闭客户端连接

bgsave:在后台异步保存当前数据库的数据到磁盘

save:同步保存数据到硬盘

shutdown [nosave] [save]:异步保存数据到硬盘,并 关闭服务器

Bgrewriteaof 命令: Redis Bgrewriteaof 命令用于异步执行一个 AOF(AppendOnly File) 文件重写操作。重写会创建一个当前 AOF 文件的体积优化版本。

即使 Bgrewriteaof 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 Bgrewriteaof 成功之前不会被修改。十二、Redis 数据备份与恢复

SAVE 命令用于创建当前数据库的备份。该命令将在Redis安装目录中创建dump.rdb文件。

恢复数据:

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

yii2 引入redis 怎么用redis_客户端_07


Bgsave命令:创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

十三、Redis 安全:

通过Redis的配置文件设置密码参数,这样客户端连接到redis服务器就需要密码验证,且服务器更加安全。

yii2 引入redis 怎么用redis_yii2 引入redis_08


十四、Redis性能测试:

Redis 性能测试通过同时执行多个命令实现的。

语法:redis-benchmark [option] [option value]

这个语法好像有问题

yii2 引入redis 怎么用redis_客户端_09


十五、Redis 客户端连接:

Redis通过监听一个TCP端口或者Unixsocket的方式接受来自客户端的连接,当一个连接建立后,redis内部会进行以下操作:

  • 首先,客户端socket会被设置为非阻塞模式,因为Redis在网络事件处理上采用的是非阻塞多路复用模型。
  • 然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法
  • 然后创建一个可读的文件事件用于监听这个客户端socket的数据发送。
    config get maxclients:最大连接数
    在redis服务器启动时可以设置最大连接数20000:
    栗子:redis-server --maxclients 20000
    在redis客户端启动时,可以设置编码,防止乱码:
    栗子:redis-cli.exe --raw

十六、Redis管道技术:
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。会遵守:

  • 客户端向服务端发送一个请求,并监听socket返回,通常是以阻塞模式,等待服务端响应。
  • 服务端处理命令,并将结果返回客户端。
    管道技术:可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
    管道技术的优势:提高了redis服务的性能。

十七、Redis 分区:

  • 分区的定义:分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。
  • 分区的优势:
  • 通过多台计算机内存的和值,允许我们构造更大的数据库;
  • 通过多核和多台计算机,允许我们扩展计算机;通过多台计算机和网络适配器,允许我们扩展网络宽带。
  • 分区的不足:
  • 涉及多个key的操作通常是不被支持的。栗子:当两个set映射到不同的redis实例上时,不能对这2个set执行交际操作。
  • 涉及多个key的redis事务不能使用。
  • 使用分区时,数据处理较为复杂。比如需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。
  • 增加和删除容量比较复杂。
  • 分区类型:范围分区和哈希分区
  • 范围分区:映射一定范围的对象到特定的Redis实例。比如:id从0到1000的用户会保存到实例R0,id从1001到3000的会保存到实例R1上。
    缺点:就是要有一个区间范围到实例的映射表。这个表要被管理,同时还需要各种对象的映射表。
  • 哈希分区:
  • 用一个hash函数将key转换为一个数字,比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。
  • 对这个整数取模,将其转化为0-3之间的数字,就可以将这个整数映射到4个Redis实例中的一个了。93024922 % 4 = 2,就是说key foobar应该被存到R2实例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。

十八、Redis 持久化之RDB和AOF:

持久化:在某个时刻将数据写入到磁盘

  1. RDB(Redis DataBase)持久化原理(Redis 默认开始RDB持久化):
    触发RDB持久化的方式有2种:
    a.根据配置文件自动触发:
    输入命令:vim redis.windows.conf
  2. yii2 引入redis 怎么用redis_yii2 引入redis_10

  3. 要想不自动触发RDB持久化,把这三个save m n 注释掉或者开启 save “”。但是主从模式下不能关闭RDB模式,因为Redis 基于dump.rdb文件发给从数据库。
    b.手动触发:
    输入bgsave /save/ shutdown(正常退出redis)命令。
    bgsave命令:异步不阻塞持久化数据。一旦输入了该命令,会创建(fork)一个和当前进程一模一样的子进程,用来持久化数据(持久化结束后,子进程也就结束了),同时会生成一个临时rdb文件,持久化结束后,再用临时文件替换上次持久化好的文件。整个过程主进程不参与任何IO操作,确保了高性能。
    save命令:同步阻塞持久化数据,使用主进程来持久化数据。当持久化的数据很大时,同时redis客户端有其他命令(例如 set wu hhh),该命令会等持久化命令结束再执行。
    shutdown命令:调用的是bgsave
  4. AOF(Append only File)持久化原理(默认不开启):
    配置文件中的一些参数代表的意思:
  5. yii2 引入redis 怎么用redis_redis_11

  6. 当开启了aof模式时,会在某路径下(dir d:/redis路径,这是前面我配置的路径)下生成.aof文件,如图所示:
  7. yii2 引入redis 怎么用redis_客户端_12

  8. aof文件保存的是命令数据(redis协议),打开.aof文件可以看到:
    命令:vim appendonly.aof
  9. yii2 引入redis 怎么用redis_客户端_13

  10. 补充:find -name appendonly* 命令,找名字为appendonly开头的文件:
  11. yii2 引入redis 怎么用redis_redis_14

  12. 在配置文件中配置重写参数,Redis 调优一般都会改下面两个参数:
  13. yii2 引入redis 怎么用redis_redis_15


  14. yii2 引入redis 怎么用redis_yii2 引入redis_16


  15. yii2 引入redis 怎么用redis_客户端_17

  16. 重写(rewrite): AOF采用文件追加方式,文件随着使用会越来越大,为了避免此情况,新增了重写机制,当aof文件超过了所设定的阈值,redis就会启动aof文件的内容压缩,命令为:bgrewriteaof。
    原理:当aof文件超大时,会fork一个新进程重写文件(先写临时文件再rename),遍历新进程的内存中数据,每条记录有一个set语句。
    重写aof文件的操作,并没有读取旧的aof文件, 而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。
    例子:
    重写前(补:一个中文代表2个长度):
  17. yii2 引入redis 怎么用redis_客户端_18

  18. 手动执行重写命令,如下图所示:
  19. yii2 引入redis 怎么用redis_客户端_19

  20. 重写后:
  21. yii2 引入redis 怎么用redis_Redis_20

  22. RDB和AOF区别:
    a. RDB是保存的是二进制数据,节省磁盘空间,恢复速度快,AOF采用的是日志追加形式,保存的是命令。j
    b. RDB丢失的数据多,AOF丢失的数据少
    c. RDB性能更高,AOF性能更差
    d. 当dump.rdb和appendonly.aof共存时,会优先加载appendonly.aof文件
    f.RDB做全量保存数据,AOF做增量保存数据