Redis——高级主题

介绍Redis的高级主题,包括服务器配置、Redis事务、Redis发布和订阅、Pipeline批量发送请求、数据备份与恢复等。

1、服务器配置

在Windows和Linux的Redis服务器里面,都有一个配置文件。Redis配置文件位于Redis安装目录下,在不同操作系统下,Redis配置文件名是不一样的:

  • 在Windows下,Redis配置文件名为redis.windows.conf。
  • 在Linux下,Redis配置文件名为redis.conf。

在Linux下使用redis-server命令启动Redis服务器时,可以在命令后面指定配置文件。例如,在Linux下使用如下命令启动Redis服务器:

$ redis-server /usr/local/redis/conf/redis.conf

也可以通过Redis的CONFIG命令对Redis配置文件进行查看或设置项。

1.1、Redis服务器允许远程主机访问

若主机需要远程访问Redis服务器,则可以修改Redis配置文件redis.conf。文件中bind字段默认为bind 127.0.0.1,表示只能在本机访问Redis服务器,如下图所示:
在这里插入图片描述
若允许远程主机访问Redis服务器,可以将bind 127.0.0.1改为bind 0.0.0.0。

找到daemonize no,把这一项的no改成yes。daemonize yes主要是开启Redis的守护进程,可以在Linux启动时自动运行Redis,将Redis服务器作为守护进程(daemon)来运行:

daemonize yes

关闭protected-mode模式,让外部网络可以直接访问Redis服务器。在Redis配置文件中找到protected-mode yes,把这一项的yes改成no:

protected-mode no

1.2、客户端远程连接Redis服务器

远程连接Redis服务器需要使用redis-cli命令,redis-cli命令的用法为:redis-cli[OPTIONS][cmd[arg[arg…]]]。

redis-cli命令的关键参数如下:

  • -h:主机IP地址,默认是127.0.0.1。
  • -p:端口,默认是6379。
  • -a:密码,如果Redis设置了密码,需要传递密码。

假设有两台Redis服务器,Redis服务器的IP地址分别是192.168.1.11和192.168.1.14。现在需要在192.168.1.11上通过redis-cli命令远程访问192.168.1.14上的Redis服务器,在192.168.1.11上通过以下命令远程连接192.168.1.14上的Redis服务器:

$ redis-cli -h 192.168.1.14 -p 6379  
192.168.1.14:6379> SET age 20 
OK 
192.168.1.14:6379> GET age 
"20"

通过本例,客户端远程连接到192.168.1.14上的Redis服务器,设置了一个String类型的值,使age等于“20”。

1.3、设置密码

通过Redis配置文件来设置密码,客户端连接到Redis服务器时就需要密码验证,这样可以让Redis服务器更安全。

1、通过命令设置Redis密码

首先通过CONFIG GET requirepass命令查看Redis服务器是否设置了密码验证:

127.0.0.1:6379> CONFIG GET requirepass 
1) "requirepass" 
2) ""

默认情况下requirepass对应的参数是空的,即没有密码,表示不需要通过密码验证就可以连接到Redis服务器。

然后设置Redis服务器的当前密码为123。Redis服务器重新启动后又会将密码重置为默认,即没有密码,因此不建议用此种方式设置密码:

127.0.0.1:6379> CONFIG SET requirepass "123" 
OK 
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass" 
2) "123"

通过命令设置Redis密码的完整实例如下:

[root@bogon bin]# ./redis-cli -h 127.0.0.1 -p 6379  
# 获取现有Redis服务器密码 
127.0.0.1:6379> CONFIG GET requirepass 
1) "requirepass" 
2) "" 
# 设置新密码 
127.0.0.1:6379> CONFIG SET requirepass "123" 
OK 
127.0.0.1:6379> exit 
# 重新设置密码后,连接Redis服务器需添加密码参数 
[root@bogon bin]# ./redis-cli -h 127.0.0.1 -p 6379 -a 123 
127.0.0.1:6379> set age 20 
OK

重新设置密码后,需要重新登录Redis服务器才能获取操作权限。

2、通过修改Redis配置文件设置密码

编辑redis.conf配置文件,添加requirepass值设置密码:

requirepass 123

以上设置的Redis服务器的访问密码为123,读者可以根据实际需要进行密码的设置。

重启Redis服务器后,再次进入Redis客户端并输入以下内容:

127.0.0.1:6379>KEYS * 
(error) NOAUTH Authentication required

发现没有权限进入当前数据库,需要使用AUTH命令进行授权操作:

127.0.0.1:6379>AUTH 123 
OK

输入密码则成功进入当前数据库,用这种方式每次进入当前数据库的时候都需要输入密码。

还有一种简单的方式,即直接登录数据库并授权:

[root@bogon bin]# ./redis-cli -h 127.0.0.1 -p 6379 -a 123

在本例中,我们设置了Redis服务器的访问密码为123。建议用此种方式设置密码,重启Redis服务器后就可以使用设置好的密码连接Redis服务器了。

1.4、Redis端口修改

Redis默认的端口是6379,在redis.conf配置文件里搜索6379就能找到端口参数配置,如下所示:

# Accept connections on the specified port, default is 6379 (IANA #815344). 
# If port 0 is specified Redis will not listen on a TCP socket. 
port 6379

可以将默认的端口修改成指定的端口,不要端口冲突就行。启动Redis服务器后,可以使用ps-ef|grep redis命令查看Redis服务器占用的端口,如下图所示:
在这里插入图片描述
从上图可以看出,现在Redis服务器使用的端口是6379。

1.5、查看配置

可以通过CONFIG GET命令查看配置。CONFIG GET命令的基本语法如下:

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

实例:查看Redis的日志级别。

127.0.0.1:6379> CONFIG GET loglevel 
1) "loglevel" 
2) "notice"

1.6、修改配置

可以通过修改redis.conf配置文件或使用CONFIG SET命令来修改配置。

CONFIG SET命令的基本语法如下:

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

实例:修改Redis记录的日志级别:

127.0.0.1:6379> CONFIG SET loglevel "notice" 
OK 
127.0.0.1:6379>  CONFIG GET loglevel 
1) "loglevel" 
2) "notice" 
127.0.0.1:6379>

1.7、配置项说明

redis.conf配置项说明如下:
(1)Redis默认不是以守护进程的方式运行的,可以通过daemonize配置项修改。如果指定为yes,表示启用守护进程:

daemonize no

(2)当Redis以守护进程的方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile配置项来指定:

pidfile /var/run/redis.pid

(3)指定Redis监听端口,可以通过port配置项来指定,默认端口为6379:

port 6379

(4)指定绑定的主机地址,可以用于限制连接,默认只能本机访问Redis服务器:

bind 127.0.0.1

(5)指定Redis客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能:

timeout 300

(6)指定日志的记录级别,Redis支持4个级别,即debug、verbose、notice、warning,默认值为verbose:

loglevel verbose

(7)指定日志文件的保存路径,如果指定为"",表示默认为标准输出:

logfile ""

(8)指定数据库的数量,默认数据库数量为0,可以使用SELECT命令来连接指定的数据库:

databases 16

(9)指定在多长时间内执行多少次更新操作,Redis就将数据同步到数据文件中:

save <seconds> <changes>

Redis的默认配置文件中设置了3个触发条件:

save 900 1save 300 10save 60 10000

save 900 1表示900s(15min)内有1个更新,save 300 10表示300s(5min)内有10个更新,save 60 10000表示60s(1min)内有10 000个更新,Redis就将数据同步到数据文件中。

(10)对于存储到磁盘中的Redis快照,可以设置是否进行压缩存储,默认值为yes。如果指定为yes,Redis会采用LZF压缩算法对存储到磁盘中的Redis快照进行压缩。如果不想消耗CPU来压缩快照的话,可以指定为no来关闭该选项,但是存储在磁盘上的快照会比较大:

rdbcompression yes

(11)指定存储数据的本地数据库的文件名,默认值为dump.rdb。

dbfilename dump.rdb

(12)指定本地数据库存放目录:

dir/usr/local/redis/bin

(13)指定当本机为Slave(从服务器)服务时,Master(主服务器)服务的IP地址及端口。在Redis启动时,它会自动从Master服务进行数据同步:

slaveof <masterip> <masterport>

(14)指定当Master服务设置了密码保护时,Slave服务连接Master服务的密码:

masterauth <master-password>

(15)指定Redis的连接密码。如果配置了连接密码,则客户端在连接Redis时需要使用AUTH命令提供密码,默认配置是关闭的:

requirepass foobared

(16)指定同一时间内客户端允许的最大连接数,如果设置为maxclients 0,表示不做限制。当客户端连接数达到最大限制时,Redis会关闭新的连接并向客户端发送max number of clients reached错误信息:

maxclients 128

(17)指定Redis的最大内存限制。Redis在启动时会把数据缓存到内存中,达到最大内存后,Redis会尝试清除已到期的key。Redis新的vm(虚拟内存)机制,会把key存放在内存,把value存放在swap区:

maxmemory <bytes>

(18)指定Redis是否在每次执行更新操作后进行日志记录,在默认情况下Redis是异步地把内存中的数据写入磁盘的。如果不开启此选项,可能会在主机断电时丢失一段时间内的数据。该选项默认值为no:

appendonly no

(19)指定更新日志文件名,默认值为appendonly.aof:

appendfilename appendonly.aof

(20)指定更新日志的条件,共有3个可选值:

  • no:表示等操作系统进行数据缓存后才同步到磁盘,特点是速度快。
  • always:表示每次执行更新操作后,需要手动调用fsync()将数据写到磁盘,特点是速度慢,比较安全。
  • everysec:表示每秒同步一次数据到磁盘,是上面两个选项的折中选项,也是默认值。
appendfsync everysec

(21)指定是否启用虚拟内存机制,默认值为no:

vm-enabled no

(22)指定虚拟内存文件路径,默认值为/tmp/redis.swap。不可多个Redis实例共享:

vm-swap-file /tmp/redis.swap

(23)指定将所有大于vm-max-memory的数据存入虚拟内存,默认值为0,无论vm-max-memory多小,所有索引数据都是内存存储的(Redis的索引数据就是key),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存储在磁盘:

vm-max-memory 0

(24)Redis的swap文件被分成了很多个page,一个对象可以保存在多个page上,但一个page不能被多个对象共享:

vm-page-size 32

(25)指定swap文件中的page数量:

vm-pages 134217728

(26)指定访问swap文件的线程数,此选项值最好不要超过计算机的核数。如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。此选项默认值为4:

vm-max-threads 4

(27)指定在向客户端响应时,是否把较小的包合并为一个包发送,默认值为yes:

glueoutputbuf yes

2、Redis事务

Redis的事务可以一次执行多个命令,有以下两个重要的特点:

  • 事务是一个单独的隔离操作:事务中的所有命令都会按顺序执行,事务在执行的过程中,不会被其他客户端发送的命令所打断。
  • 事务是一个原子性操作:事务中的命令要么全部被执行,要么全部都不执行。

一个事务会经历3个阶段,即开始事务、命令入队、执行事务,如下图所示:
在这里插入图片描述

2.1、Redis事务的常用命令

下表列出了Redis事务的常用命令及其描述:
在这里插入图片描述
在这里插入图片描述

2.2、简单事务控制

以下是一个简单事务控制的实例。先使用MULTI命令开始一个事务,然后将多个命令入队到事务中,最后由EXEC命令触发事务,一起执行事务块内的所有命令:

127.0.0.1:6379> SET age 20 
OK 
127.0.0.1:6379> MULTI 
OK 
#两个SET命令都没有被执行,而是被放到了队列中 
127.0.0.1:6379> SET age 21 
QUEUED 
127.0.0.1:6379> SET age 22 
QUEUED 
127.0.0.1:6379> GET age 
QUEUED 
#SADD命令也没有被执行,也被放到了队列中 
127.0.0.1:6379> SADD tag "java" "python" "c" 
QUEUED 
127.0.0.1:6379> SMEMBERS tag 
QUEUED 
# 触发事务,一起执行队列中的命令,执行命令后返回的是执行3个命令的结果 
127.0.0.1:6379> EXEC 
1) OK 
2) OK 
3) "22" 
4) (integer) 3 
5) 1) "python" 2) "c" 3) "java" 
# 查看 age对应的字符串 
127.0.0.1:6379> GET age 
"22" 
# 查看 tag对应的集合 
127.0.0.1:6379> SMEMBERS tag 
1) "python" 
2) "c" 
3) "java"

从本例中可以看到,两个SET命令和一个SADD命令并没有被立即执行而是放到了队列中,在执行EXEC命令后3个命令才被连续执行,最后返回的是3个命令的执行结果。

2.3、取消一个事务

我们可以执行DISCARD命令来取消一个事务,让事务回滚。实例如下:

127.0.0.1:6379> SET age 20 
OK 
127.0.0.1:6379> GET age 
"20" 
127.0.0.1:6379> MULTI 
OK 
127.0.0.1:6379> SET age 21 
QUEUED 
127.0.0.1:6379> SET age 22 
QUEUED 
127.0.0.1:6379> DISCARD 
OK 
127.0.0.1:6379> GET age 
"20"

从本例中可以看到,两个SET命令并没有被立即执行而是放到了队列中,在执行DISCARD命令后清空事务的命令队列并退出事务的上下文,也就是事务回滚。

2.4、乐观锁控制复杂事务

乐观锁就是利用版本号比较机制,只是在读数据的时候,将读到的数据的版本号一起读出来,当对数据的读操作结束并准备写数据的时候,再进行一次数据的版本号的比较。若版本号没有变化,即认为数据是一致的,没有更改,可以直接写入;若版本号有变化,则认为数据被更新,不能写入,防止脏写。

乐观锁工作机制:执行WATCH命令监视Redis给定的每一个key,当执行EXEC命令时如果监视的任何一个key自从执行WATCH命令后发生过变化,则整个事务会回滚,不执行任何操作。

3、Redis发布和订阅

Redis发布和订阅是一种消息通信模式:发送者(Publish)用来发送消息,订阅者(Subscribe)用来接收消息。Redis客户端可以订阅任意数量的频道。

下图展示了频道channel1,以及订阅这个频道的3个客户端client2、client5和client1之间的关系:
在这里插入图片描述
当有新消息通过PUBLISH命令发送给频道channel1时,这个消息就会被发送给订阅它的3个客户端(client2、client5和client1),如下图所示:
在这里插入图片描述

3.1、Redis发布和订阅的常用命令

在这里插入图片描述

3.2、Redis发布和订阅实例

以下实例演示了发布和订阅是如何工作的。

首先,打开一个客户端连接Redis服务器,作为订阅者接收消息。在本实例中我们创建了一个订阅频道,命名为redisChat:

127.0.0.1:6379> SUBSCRIBE redisChat 
Reading messages... (press Ctrl-C to quit) 
1) "subscribe" 
2) "redisChat" 
3) (integer) 1

其次,重新开启一个Redis客户端,作为发送者发送消息,然后在同一个频道redisChat发布两次消息,订阅者就能接收消息:

127.0.0.1:6379> PUBLISH redisChat "message1" 
(integer) 1 
127.0.0.1:6379> PUBLISH redisChat "message2" 
(integer) 1 
127.0.0.1:6379>

订阅者的客户端会显示如下消息:

127.0.0.1:6379> SUBSCRIBE redisChat 
Reading messages... (press Ctrl-C to quit) 
1) "subscribe" 
2) "redisChat" 
3) (integer) 1 
1) "message" 
2) "redisChat" 
3) "message1" 
1) "message" 
2) "redisChat" 
3) "message2"

4、Redis管道

Redis是一个客户端-服务器(CS)模型的TCP服务器,使用和HTTP类似的相应请求协议。一个客户端可以通过一个Socket连续发送多个请求命令,每个请求命令发出后客户端通常会阻塞并等待Redis服务器处理,Redis服务器处理完请求后会将结果通过响应报文返回给客户端。

Redis的管道(Pipeline)可以一次性发送多条命令并在执行完后一次性将结果返回。管道可以减少客户端与Redis服务器的通信次数,从而降低往返延时时间。管道实现的原理是队列,而队列遵循先进先出原则,这样就保证了数据的顺序性。

Redis管道技术可以在Redis服务器启动时使用,在Redis客户端向Redis服务器发送请求(Request),并一次性读取所有Redis服务器的响应(Response)。

在Linux客户端新建脚本pipeline.sh:

[root@localhost ~]# touch pipeline.sh

使用vi命令修改pipeline.sh:

[root@localhost ~]# vi pipeline.sh

在pipeline.sh中添加以下内容,脚本文件名为Redis\Chapter04\pipeline.sh:

(echo -en "PING\r\n SET db redis\r\nGET db\r\nSET visitor 0\r\nINCR visitor\r
\nINCR visitor\r\nINCR visitor\r\nGET visitor\r\n"; sleep 10) | nc localhost 6379

给pipeline.sh赋予可执行命令权限:

[root@localhost ~]# chmod +x pipeline.sh

执行pipeline.sh:

[root@localhost ~]# ./pipeline.sh

得到以下内容:

[root@localhost ~]# ./pipeline.sh  
+PONG 
+OK 
$5 
redis 
+OK 
:1 
:2 
:3 
$1 
3

以上实例中,我们首先使用PING命令查看Redis服务器是否可用,之后我们设置了db的值为redis并获取了db的值,最后使visitor自增3次并获取了visitor的值。

打开一个终端,并使用redis-cli命令连接Redis服务器:

127.0.0.1:6379> GET visitor 
"3" 
127.0.0.1:6379> GET db 
"redis"

从上面结果可以看出,Redis数据库已经存储了db和visitor的值。

5、数据恢复与备份

5.1、数据备份

Redis的SAVE命令用于创建当前数据库的快照文件。

实例,使用SAVE命令创建当前数据库的快照:

127.0.0.1:6379> SAVE  
OK

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

5.2、数据恢复

如果需要恢复数据,只需将一台Redis服务器上的快照文件(dump.rdb)移动到另一台Redis服务器的安装目录并启动服务即可。获取Redis安装目录可以使用CONFIG命令,如下所示:

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

在本例中使用CONFIG GET dir命令输出的Redis安装目录为/usr/local/redis/bin。

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

127.0.0.1:6379> BGSAVE 
Background saving started

6、Redis性能测试

Redis性能测试是通过同时执行多个命令实现的。Redis性能测试的基本命令如下:

redis-benchmark [option] [option value]

实例:同时执行10 000个请求来测试Redis的性能,如下图所示:
在这里插入图片描述
Redis性能测试工具可选参数如下表所示:
在这里插入图片描述
在这里插入图片描述
实例:使用多个参数来测试Redis性能:

$ redis-benchmark -h 127.0.0.1 -p 6379 -t SET,LPSH -n 10000 -q 
SET: 65789.48 requests per second 
LPUSH: 74074.07 requests per second

以上实例中连接Redis的主机IP地址为127.0.0.1,端口为6379,执行SET命令和LPUSH命令,请求数为10000,通过-q参数让结果只显示每秒执行的请求数。

7、Redis客户端连接

在Redis 2.4中,最大连接数是被直接硬编码写在代码里面的,而在Redis 2.6以后的版本中这个值变成可配置的。maxclients的默认值是10 000,也可以在redis.conf配置文件中对这个值进行修改:

127.0.0.1:6379> CONFIG GET maxclients 
1) "maxclients" 
2) "10000"

以下实例可以在Redis服务器启动时,设置最大连接数为100000:

$ redis-server --maxclients 100000

Redis客户端查看客户端连接的命令及其描述如下表所示:
在这里插入图片描述
Redis客户端命令如下图所示:
在这里插入图片描述

8、Redis服务开机自启动

每次启动Redis服务都需要使用redis-server命令,稍显烦琐。当然也可以把redis-server命令放在启动脚本里,每次运行脚本就可以启动Redis服务了。但有没有更好的方法,让主机每次开机后就自动启动Redis服务呢?答案是肯定的。

8.1、Windows下Redis服务开机自启动

可以把Redis设置成Windows服务,这样Windows启动后就会自启动Redis服务,和Windows服务一样,可以启动/停止服务。

8.1.1、注册Redis为Windows后台服务

在Redis的目录下执行以下命令,执行后Redis就作为Windows后台服务了:

redis-server --service-install redis.windows.conf

如果执行命令成功,会显示下图所示页面:
在这里插入图片描述
按“Win+R”组合键执行services.msc命令,就可以看到Redis已经作为Windows后台服务了。

8.1.2、启动Redis服务

将Redis成功注册到Windows后台服务中后,Redis并没有启动,可以在Windows服务列表中启动Redis服务。启动Redis服务的命令如下:

redis-server --service-start

8.1.3、停止Redis服务

停止Redis服务的命令如下:

redis-server --service-stop

8.1.4、卸载Redis服务

卸载Redis服务的命令如下:

redis-server --service-uninstall

注意将Redis成功注册到Windows后台服务后,就可以使用Windows命令启动/停止Redis服务,如下图所示:
在这里插入图片描述
启动Redis服务:

net start redis

停止Redis服务:

net stop redis

8.2、Linux下Redis服务开机自启动

8.2.1、修改redis.conf配置文件

为了让redis-server命令能在操作系统启动时自动执行,需要将Redis服务作为守护进程(Daemon)来运行。我们回到/usr/local/redis/conf目录中找到redis.conf配置文件,这个文件是Redis服务运行时加载的配置文件,使用以下命令查看其中的内容:

$ vi /usr/local/redis/conf/redis.conf

此文件内容非常多,但是大部分内容是注释,我们重点关注其中的两个配置项:daemonize和pidfile:

  • daemonize默认值是false,表示Redis服务作为守护进程来运行,需要把它改成daemonize yes。
  • pidfile默认值是pidfile/var/run/redis_6379.pid,表示当Redis服务以守护进程方式运行时,Redis服务默认会把pid写入/var/run/redis_6379.pid文件,Redis服务运行时该文件就存在,Redis服务一旦停止该文件就会自动删除,因而可以用来判断Redis服务是否正在运行。该配置项不用修改。

为了让Redis能在Linux启动时自动运行,需要修改完配置项daemonize后保存redis.conf配置文件,然后退出文件。

8.2.2、## 8.2.1、修改redis.conf配置文件

有了基本配置,Redis还需要有一个管理启动、关闭和重启的脚本。在Redis的源代码里已经提供了一个初始化脚本redis_init_script。这个初始化脚本的位置在%/redis-6.0.6/utils/目录下,如下图所示:
在这里插入图片描述
redis_init_script脚本中指定了端口、Server路径、CLI路径、PIDFILE路径以及CONF路径。在安装时执行了make install命令后,这个脚本不需要做多大改动,因为make install命令会把Redis的可执行命令都复制到/usr/local/bin目录下。

只需要修改CONF选项对应的Redis配置文件为Linux使用的redis.conf配置文件即可。在笔者的计算机上,Redis配置文件保存在/usr/local/redis/conf/redis.conf目录下,读者需要根据实际情况进行修改。修改后的redis_init_script脚本如下图所示:
在这里插入图片描述

8.2.3、将redis_init_script脚本复制到/etc/init.d目录下并修改脚本名字为redis

$ cp redis_init_script /etc/init.d/redis

给redis文件授予执行权限:

$ chmod +x /etc/init.d/redis

8.2.4、开启服务自启动

在/etc/init.d目录下的脚本都是可以在Linux启动时自动启动的服务,还需要一个Linux启动时的配置。开启Redis服务自启动的命令如下:

$ chkconfig redis on

8.2.5、启动和停止Redis服务

重启CentOS之后,就可以执行以下命令启动和停止Redis服务了。

启动Redis服务:

$ service redis start

停止Redis服务:

$ service redis stop

以上两个命令等价于以下命令:

$/etc/init.d/redis start 
$/etc/init.d/redis stop

9、Redis内存分析工具

redis-rdb-tools是用Python编写的用来分析Redis的RDB快照文件的工具。在内存分析中,我们主要用它生成内存报告。

9.1、安装redis-rdb-tools

安装redis-rdb-tools前需要配置Python环境,配置好Python环境后可以通过Python的pip来安装redis-rdb-tools:

$ pip3 install rdbtools python-lzf

9.2、生成内存报告

使用redis-rdb-tools生成内存报告的实例如下:
首先,在Redis客户端生成两条String类型的数据,如下所示:

127.0.0.1:6379> SET name xinping 
OK 
127.0.0.1:6379> SET age 25 
OK 
127.0.0.1:6379> SAVE

然后,把Redis的RDB快照内存报告输出到控制台:

$ rdb -c memory /usr/local/redis/bin/dump.rdb 
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry 
0,string,age,48,string,8,8, 
0,string,name,64,string,7,7,

在生成的报告中有database(key所在的Redis数据库编号)、type(key类型)、key(键)、size_in_bytes(key占用的内存大小)、encoding(RDB编码方式)、num_elements(key中的value的个数)、len_largest_element(key中的value的长度)和expiry(key的过期时间)从返回的报告可以看出key为age的String类型数据占用了46个字节,key为name的String类型数据占用了64个字节。

也可以使用以下命令把Redis的内存报告生成为memory.csv文件,并将文件输出到控制台:

$ rdb -c memory /usr/local/redis/bin/dump.rdb > memory.csv 
$ cat memory.csv  
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry 
0,string,age,48,string,8,8, 
0,string,name,64,string,7,7,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis核心技术与实战【学习笔记】 - 21.Redis实现分布式锁

概述 在《20.Redis原子操作》我们提到了应对并发问题时&#xff0c;除了原子操作&#xff0c;还可以通过加锁的方式&#xff0c;来控制并发写操作对共享数据的修改&#xff0c;从而保证数据的正确性。 但是&#xff0c;Redis 属于分布式系统&#xff0c;当有多个客户端需要争…

【Java知识手册】一.Java开发工具和前言

文章目录 1 Java前言1.1 简介1.2 Java环境搭建1.3 程序的开发步骤1.4 idea开发工具1.5用idea开发一个helloworld 前言&#xff1a;以初学着的身份&#xff0c;准备在该平台整理点最近学习的知识&#xff0c;方便后续查看相关的技术点&#xff0c;有兴趣的可以一块交流学习。目标…

机器学习本科课程 大作业 多元时间序列预测

1. 问题描述 1.1 阐述问题 对某电力部门的二氧化碳排放量进行回归预测&#xff0c;有如下要求 数据时间跨度从1973年1月到2021年12月&#xff0c;按月份记录。数据集包括“煤电”&#xff0c;“天然气”&#xff0c;“馏分燃料”等共9个指标的数据&#xff08;其中早期的部分…

接口测试要测试什么?

一. 什么是接口测试&#xff1f;为什么要做接口测试&#xff1f; 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互…

Maven 安装教程

一、安装地址 1.官网安装最新版本 2.其他版本&#xff0c;我这里是maven-3/3.6.2 二、配置环境 1. 点击此电脑鼠标右击->属性->高级系统设置->环境变量 &#xff0c;配置系统变量->新建&#xff1a;MAVEN_HOME 2.配置path 路径 &#xff1a;%MAVEN_HOME%\bin 三、安…

ChatGPT之制作短视频

引言 今天带来了如何使用 ChatGPT和剪映来制作简单的短视频教程&#xff0c;在这其中 ChatGPT的作用主要是帮我们生成文案&#xff0c;剪映的功能就是根据文案自动生成视频&#xff0c;并配上一些图片、动画、字幕和解说。 ChatGPT生成文案 首先&#xff0c;我们需要使用提示…

Anaconda的安装及其配置

一、简介 Anaconda是一个开源的包、环境管理器&#xff0c;主要具有以下功能和特点&#xff1a; 提供conda包管理工具&#xff1a;可以方便地创建、管理和分享Python环境&#xff0c;用户可以根据自己的需要创建不同的环境&#xff0c;每个环境都可以拥有自己的Python版本、库…

常用排序算法(Java版本)

1 引言 常见的排序算法有八种&#xff1a;交换排序【冒泡排序、快速排序】、插入排序【直接插入排序、希尔排序】、选择排序【简单选择排序、堆排序】、归并排序、基数排序。 2 交换排序 所谓交换&#xff0c;就是序列中任意两个元素进行比较&#xff0c;根据比较结果来交换…

nginx slice模块的使用和源码分析

文章目录 1. 为什么需要ngx_http_slice_module2. 配置指令3. 加载模块4. 源码分析4.1 指令分析4.2 模块初始化4.3 slice模块的上下文4.2 $slice_range字段值获取4.3 http header过滤处理4.4 http body过滤处理5 测试和验证 1. 为什么需要ngx_http_slice_module 顾名思义&#…

程序员为什么不喜欢关电脑,这回答很霸道!

在大家的生活中&#xff0c;经常会发现这样一个现象&#xff1a;程序员经常不关电脑。 至于程序员不关电脑的原因&#xff0c;众说纷纭。 其中这样的一个程序员&#xff0c;他的回答很霸道&#xff1a; “因为我是程序员&#xff0c;我有权选择不关电脑。我需要在任何时候都能够…

C++一维数组

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 铁汁们大家好呀&#xff0c;我是PingdiGuo_guo&#xff0c;今天我们来学习一下数组&#xff08;一维&#xff09;。 文章目录 1.数组的概念与思想 2.为什么要使用数组 3.数组的特性 4.数组的操作 1.定义…

0 代码自动化测试:RF 框架实现企业级 UI 自动化测试

前言 现在大家去找工作&#xff0c;反馈回来的基本上自动化测试都是刚需&#xff01;没有自动化测试技能&#xff0c;纯手工测试基本没有什么市场。 但是很多人怕代码&#xff0c;觉得自动化测试就需要代码&#xff01;代码学习起来很难&#xff01; 当然代码学习不难&#xf…

优思学院|精益生产-改变制造业的革命性理念

在今日这个变幻莫测、竞争如潮的市场环境中&#xff0c;企业如同海上的帆船&#xff0c;面临着狂风巨浪的考验。在这样的大背景之下&#xff0c;精益生产&#xff08;Lean Production&#xff09;这一理念&#xff0c;宛如一盏明灯&#xff0c;指引着无数企业穿越迷雾&#xff…

安科瑞消防设备电源监控系统在杭后旗医院项目的设计与应用

摘要&#xff1a;本文简述了消防设备电源的组成原理&#xff0c;分析了消防设备电源监控系统在应用中的设计依据和相关规范。通过安科瑞消防设备电源监控系统在杭后旗医院项目的实例介绍&#xff0c;阐述了消防设备电源功能的实现及其重要意义。 关键词&#xff1a;消防设备电…

【jenkins】主从机制及添加Slave节点操作

一、master-slave 日常构建Jenkins任务中&#xff0c;会经常出现下面的情况&#xff1a; 自动化测试需要消耗大量的 CPU 和内存资源&#xff0c;如果服务器上还有其他的服务&#xff0c;可能会造成卡顿或者宕机这样的情况&#xff1b; Jenkins 平台上除了这个项目&#xff0c…

【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

开源软件在技术革新和行业变革中的作用

引言&#xff1a; 在数字化浪潮推动下&#xff0c;开源软件以其独特的魅力重构了软件开发的生态系统&#xff0c;成为技术创新和行业变革的催化剂。它通过低成本、高协作性、极致透明度的特征&#xff0c;成为企业和个人的首选。本文将深度探讨开源软件的影响力&#xff0c;展…

【C++刷题】二叉树的深搜

二叉树的深搜 一、计算布尔二叉树的值1、题目描述2、代码3、解析 二、求根节点到叶节点数字之和1、题目描述2、代码3、解析 三、二叉树剪枝1、题目描述2、代码3、解析 四、验证二叉搜索树1、题目描述2、代码3、解析 五、二叉搜索树中第K小的元素1、题目描述2、代码3、解析 六、…

16.docker删除redis缓存数据、redis常用基本命令

1.进入redis容器内部 &#xff08;1&#xff09;筛选过滤出redis容器 docker ps | grep "redis"&#xff08;2&#xff09;进入redis容器 #说明&#xff1a;d24为redis容器iddocker exec -it d24 /bin/bash2.登陆redis (1) 进入redis命令行界面 redis-cli说明&a…

重写Sylar基于协程的服务器(7、TcpServer HttpServer的设计与实现)

重写Sylar基于协程的服务器&#xff08;7、TcpServer & HttpServer的设计与实现&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务…