RDB文件探究
简介前一章节我们介绍了Redis的持久化RDB,它持久化的数据文件存放在默认文件名为dump.rdb的文件中。本节我们将进行探究RDB文件的格式是怎样的?Redis是如何以二进制的形式来存放数据的?
前一章节我们介绍了Redis的持久化RDB,它持久化的数据文件存放在默认文件名为dump.rdb的文件中。本节我们将进行探究RDB文件的格式是怎样的?Redis是如何以二进制的形式来存放数据的?
本节,我们需要查看二级制文件,这里我们使用vim打开文件,然后使用:%!xxd ——将当前文本转换为16进制格式
为了便于演示,我们需要将Redis的所有数据进行清理,使用FLUSHALL命令
127.0.0.1:6379> FLUSHALL
OK
下面,我们来查看清空后的dump.rdb文件的内容信息:
[root@localhost redis]# vim dump.rdb
1 0000000: 5245 4449 5330 3030 38fa 0972 6564 6973 REDIS0008..redis
2 0000010: 2d76 6572 0534 2e30 2e39 fa0a 7265 6469 -ver.4.0.9..redi
3 0000020: 732d 6269 7473 c040 fa05 6374 696d 65c2 s-bits.@..ctime.
4 0000030: bb7b 705b fa08 7573 6564 2d6d 656d c2d8 .{p[..used-mem..
5 0000040: f20c 00fa 0c61 6f66 2d70 7265 616d 626c .....aof-preambl
6 0000050: 65c0 00ff 959b 25ed d596 ecd7 0a e.....%......
我们按照下面的步骤来学习RDB的文件格式:
1、设置一个字符串类型的键值对
127.0.0.1:6379> set name zhang
OK
127.0.0.1:6379> SAVE #手动去触发
OK
查看dump.rdb
1 0000000: 5245 4449 5330 3030 38fa 0972 6564 6973 REDIS0008..redis
2 0000010: 2d76 6572 0534 2e30 2e39 fa0a 7265 6469 -ver.4.0.9..redi
3 0000020: 732d 6269 7473 c040 fa05 6374 696d 65c2 s-bits.@..ctime.
4 0000030: 2d7c 705b fa08 7573 6564 2d6d 656d c218 -|p[..used-mem..
5 0000040: f30c 00fa 0c61 6f66 2d70 7265 616d 626c .....aof-preambl
6 0000050: 65c0 00fe 00fb 0100 0004 6e61 6d65 057a e.........name.z
7 0000060: 6861 6e67 ffe2 a4f3 5923 0905 ed0a hang....Y#....
2、设置一个列表类型的键值对
127.0.0.1:6379> LPUSH list_1 abc def
(integer) 2
127.0.0.1:6379> SAVE
OK
查看dump.rdb
1 0000000: 5245 4449 5330 3030 38fa 0972 6564 6973 REDIS0008..redis
2 0000010: 2d76 6572 0534 2e30 2e39 fa0a 7265 6469 -ver.4.0.9..redi
3 0000020: 732d 6269 7473 c040 fa05 6374 696d 65c2 s-bits.@..ctime.
4 0000030: ba7c 705b fa08 7573 6564 2d6d 656d c2a8 .|p[..used-mem..
5 0000040: f30c 00fa 0c61 6f66 2d70 7265 616d 626c .....aof-preambl
6 0000050: 65c0 00fe 00fb 0200 0e06 6c69 7374 5f31 e.........list_1
7 0000060: 0115 1500 0000 0f00 0000 0200 0003 6465 ..............de
8 0000070: 6605 0361 6263 ff00 046e 616d 6505 7a68 f..abc...name.zh
9 0000080: 616e 67ff e6c6 9389 961d 5536 0a ang.......U6.
3、设置一个哈希的键值对
127.0.0.1:6379> HSET hash_1 k1 v1 k2 v2
(integer) 2
127.0.0.1:6379> save
OK
查看dump.rdb
1 0000000: 5245 4449 5330 3030 38fa 0972 6564 6973 REDIS0008..redis
2 0000010: 2d76 6572 0534 2e30 2e39 fa0a 7265 6469 -ver.4.0.9..redi
3 0000020: 732d 6269 7473 c040 fa05 6374 696d 65c2 s-bits.@..ctime.
4 0000030: 1a7d 705b fa08 7573 6564 2d6d 656d c2f8 .}p[..used-mem..
5 0000040: f30c 00fa 0c61 6f66 2d70 7265 616d 626c .....aof-preambl
6 0000050: 65c0 00fe 00fb 0300 0d06 6861 7368 5f31 e.........hash_1
7 0000060: 1b1b 0000 0016 0000 0004 0000 026b 3104 .............k1.
8 0000070: 0276 3104 026b 3204 0276 32ff 0e06 6c69 .v1..k2..v2...li
9 0000080: 7374 5f31 0115 1500 0000 0f00 0000 0200 st_1............
10 0000090: 0003 6465 6605 0361 6263 ff00 046e 616d ..def..abc...nam
11 00000a0: 6505 7a68 616e 67ff 44fe 70f6 65ad aa90 e.zhang.D.p.e...
12 00000b0: 0a .
4、设置一个集合类型的键值对
127.0.0.1:6379> SADD set_1 v1 v2
(integer) 2
127.0.0.1:6379> SAVE
OK
查看dump.rdb
1 0000000: 5245 4449 5330 3030 38fa 0972 6564 6973 REDIS0008..redis
2 0000010: 2d76 6572 0534 2e30 2e39 fa0a 7265 6469 -ver.4.0.9..redi
3 0000020: 732d 6269 7473 c040 fa05 6374 696d 65c2 s-bits.@..ctime.
4 0000030: 897d 705b fa08 7573 6564 2d6d 656d c2e8 .}p[..used-mem..
5 0000040: f40c 00fa 0c61 6f66 2d70 7265 616d 626c .....aof-preambl
6 0000050: 65c0 00fe 00fb 0400 0205 7365 745f 3102 e.........set_1.
7 0000060: 0276 3202 7631 0d06 6861 7368 5f31 1b1b .v2.v1..hash_1..
8 0000070: 0000 0016 0000 0004 0000 026b 3104 0276 ...........k1..v
9 0000080: 3104 026b 3204 0276 32ff 0e06 6c69 7374 1..k2..v2...list
10 0000090: 5f31 0115 1500 0000 0f00 0000 0200 0003 _1..............
11 00000a0: 6465 6605 0361 6263 ff00 046e 616d 6505 def..abc...name.
12 00000b0: 7a68 616e 67ff bd75 011e 62db 18b3 0a zhang..u..b....
5、设置一个有序集合类型的键值对
127.0.0.1:6379> ZADD zset_1 1 v1 2 v2
(integer) 2
127.0.0.1:6379> SAVE
OK
查看dump.rdb
1 0000000: 5245 4449 5330 3030 38fa 0972 6564 6973 REDIS0008..redis
2 0000010: 2d76 6572 0534 2e30 2e39 fa0a 7265 6469 -ver.4.0.9..redi
3 0000020: 732d 6269 7473 c040 fa05 6374 696d 65c2 s-bits.@..ctime.
4 0000030: d67d 705b fa08 7573 6564 2d6d 656d c2e0 .}p[..used-mem..
5 0000040: f50c 00fa 0c61 6f66 2d70 7265 616d 626c .....aof-preambl
6 0000050: 65c0 00fe 00fb 0500 0004 6e61 6d65 057a e.........name.z
7 0000060: 6861 6e67 0e06 6c69 7374 5f31 0115 1500 hang..list_1....
8 0000070: 0000 0f00 0000 0200 0003 6465 6605 0361 ..........def..a
9 0000080: 6263 ff0c 067a 7365 745f 3117 1700 0000 bc...zset_1.....
10 0000090: 1400 0000 0400 0002 7631 04f2 0202 7632 ........v1....v2
11 00000a0: 04f3 ff0d 0668 6173 685f 311b 1b00 0000 .....hash_1.....
12 00000b0: 1600 0000 0400 0002 6b31 0402 7631 0402 ........k1..v1..
13 00000c0: 6b32 0402 7632 ff02 0573 6574 5f31 0202 k2..v2...set_1..
14 00000d0: 7632 0276 31ff 6e58 21bd a1f1 8c5d 0a v2.v1.nX!....].
从上面的信息可以看出,最前面五个字符是REIDS,REDIS后面四个字符0008表示RDB格式的版本是0008,REDIS008是RDB文件的魔数字符串。魔数字符串后面保存了RDB文件的很多元数据,这里暂不进行说明,后面就是存放的各种数据信息。
有时候我们并不想让自己的应用能多次进行启动,所以本文主要讲解下如何限制Electron的应用多次被启动。
迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。
Python项目中必须包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号。以便新环境部署。本文记录python需求文件requirements.txt的创建及使用。
you-get是一个基于Python的开源命令行工具,主要用于下载来自多个视频网站的视频、音频和图片资源。它支持YouTube、Bilibili、Vimeo等平台,可通过简单命令快速获取下载链接并支持自定义保存路径和格式。
用supervisord管理python进程,python程序中的print内容不能输出到指定的日志文件
快速生成表格
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题