Redis命令及应用技术

Redis命令及应用技术

一、作用:
Redis 命令用于redis服务上执行操作。
二、使用方式
要在redis服务上执行命令需要一个redis客户端。
三、语法:
redis-cli
四、如何启动Redis客户端:
启动redis客户端:打开终端(cmd)并输入命令redis-cli.该命令会连接本地的redis服务。
在这里插入图片描述
--raw可以避免乱码
五、在远程服务上执行命令:
语法:redis-cli -h host -p port -a password

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

七、Redis发布订阅
Redis 发布订阅是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接受消息。
Redis客户端可以订阅任意数量的频道。
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
在这里插入图片描述
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
在这里插入图片描述
在一个窗口先创建订阅频道 :wuchannel ,再重新开一个redis客户端,在该频道wuchannel发布多个消息,然后订阅者就能接受到消息。
栗子:
在这里插入图片描述
八、Redis 事务:
multi 命令:开启事务,exec命令触发事务
Redis 事务可以一次执行多个命令,能做到2个保证:

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

一个事务从开始到执行会经历以下3个阶段:
a. 开始事务,b.命令入队,c.执行事务。
注:单个redis命令的执行是原子性的但Redis 没有在事务上增加任何维持原子性的机制,所以Redis事务的执行不是原子性的。
栗子:
在这里插入图片描述
九、Redis 脚本命令:
Redis 脚本使用Lua解释器来执行脚本。2.6版本通过内嵌支持Lua环境。执行脚本的常用命令为:EVAL.
执行Lua脚本:
在这里插入图片描述
十、Redis 连接
Redis 连接命令主要用于连接Redis服务。
AUTH password :验证密码是否正确
ECHO meaasge :打印字符串
PING:查看服务是否运行
QUIT:关闭当前连接
SELECT index:切换指定数据库
在这里插入图片描述
十一、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 命令,如下所示:
在这里插入图片描述
Bgsave命令:创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。
十三、Redis 安全:
通过Redis的配置文件设置密码参数,这样客户端连接到redis服务器就需要密码验证,且服务器更加安全。
在这里插入图片描述
十四、Redis性能测试:
Redis 性能测试通过同时执行多个命令实现的。
语法:redis-benchmark [option] [option value]
这个语法好像有问题
在这里插入图片描述
十五、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实例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。

猜你喜欢

转载自blog.csdn.net/baidu_35160588/article/details/87898131