Redis命令及应用技术
一、作用:
Redis 命令用于redis服务上执行操作。
二、使用方式:
要在redis服务上执行命令需要一个redis客户端。
三、语法:
redis-cli
四、如何启动Redis客户端:
- 方法一:直接启动(在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 之间的关系:
当有新消息通过 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实例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。
十八、Redis 持久化之RDB和AOF:
持久化:在某个时刻将数据写入到磁盘
- RDB(Redis DataBase)持久化原理(Redis 默认开始RDB持久化):
触发RDB持久化的方式有2种:
a.根据配置文件自动触发:
输入命令:vim redis.windows.conf - 要想不自动触发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 - AOF(Append only File)持久化原理(默认不开启):
配置文件中的一些参数代表的意思: - 当开启了aof模式时,会在某路径下(dir d:/redis路径,这是前面我配置的路径)下生成.aof文件,如图所示:
- aof文件保存的是命令数据(redis协议),打开.aof文件可以看到:
命令:vim appendonly.aof - 补充:find -name appendonly* 命令,找名字为appendonly开头的文件:
- 在配置文件中配置重写参数,Redis 调优一般都会改下面两个参数:
重写(rewrite):
AOF采用文件追加方式,文件随着使用会越来越大,为了避免此情况,新增了重写机制,当aof文件超过了所设定的阈值,redis就会启动aof文件的内容压缩,命令为:bgrewriteaof。
原理:当aof文件超大时,会fork一个新进程重写文件(先写临时文件再rename),遍历新进程的内存中数据,每条记录有一个set语句。
重写aof文件的操作,并没有读取旧的aof文件, 而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。
例子:
重写前(补:一个中文代表2个长度):- 手动执行重写命令,如下图所示:
- 重写后:
- RDB和AOF区别:
a. RDB是保存的是二进制数据,节省磁盘空间,恢复速度快,AOF采用的是日志追加形式,保存的是命令。j
b. RDB丢失的数据多,AOF丢失的数据少
c. RDB性能更高,AOF性能更差
d. 当dump.rdb和appendonly.aof共存时,会优先加载appendonly.aof文件
f.RDB做全量保存数据,AOF做增量保存数据