redis参数与持久化原理
[root@JR hx]# redis-cli info
# Server
redis_version:2.8.19
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:3f46a0c12d2b66a6
redis_mode:standalone 模式:是否做主从同步了
os:Linux 2.6.32-431.23.3.el6.x86_64 x86_64 #linux 版本
arch_bits:64 # 架构
multiplexing_api:epoll
gcc_version:4.4.7
process_id:20848
run_id:c77b9becd5a017913d778ac23ad7ea2032741b2d
tcp_port:6379
uptime_in_seconds:18308503 自 Redis 服务器启动以来,经过的秒数
uptime_in_days:211 自 Redis 服务器启动以来,经过的天数
hz:10
lru_clock:3570345 以分钟为单位进行自增的时钟,用于 LRU 管理
config_file: # Clients
connected_clients:47 已连接客户端的数量(不包括通过从属服务器连接的客户端)
client_longest_output_list:0 当前连接的客户端当中,最长的输出列表
client_biggest_input_buf:0 当前连接的客户端当中,最大输入缓存
blocked_clients:1 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量 # Memory
used_memory:92306016 由 Redis 分配器分配的内存总量,以字节(byte)为单位
used_memory_human:88.03M 以人类可读的格式返回 Redis 分配的内存总量
used_memory_rss:103796736 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致。 used_memory_peak:106823960 Redis 的内存消耗峰值(以字节byte为单位)
used_memory_peak_human:101.88M 以人类可读的格式返回 Redis 的内存消耗峰值
used_memory_lua:35840 引擎所使用的内存大小(以字节为单位)
mem_fragmentation_ratio:1.12 used_memory_rss 和 used_memory 之间的比率
mem_allocator:jemalloc-3.6.0 在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc 。
# Persistence RDB 和 AOF 的相关信息
loading:0 一个标志值,记录了服务器是否正在载入持久化文件
rdb_changes_since_last_save:296 #距离最后一次成功创建持久化文件之后,改变了多少个键值单位秒
rdb_bgsave_in_progress:0 一个标志值,记录服务器是否正在创建RDB文件
rdb_last_save_time:1479965088 最近一次成功创建RDB文件的UNIX时间戳
rdb_last_bgsave_status:ok 一个标志值,记录了最后一次创建RDB文件的结果是成功还是失败
rdb_last_bgsave_time_sec:2 记录最后一次创建RDB文件耗费的秒数
rdb_current_bgsave_time_sec:-1 如果服务器正在创建RDB文件,那么这个值记录的就是当前的创建RDB操作已经耗费了多长时间(单位为秒)
aof_enabled:0 一个标志值,记录了AOF是否处于打开状态
aof_rewrite_in_progress:0 一个标志值,记录了服务器是否正在创建AOF文件
aof_rewrite_scheduled:0 一个标志值,记录了RDB文件创建完之后,是否需要执行预约的AOF重写操作
aof_last_rewrite_time_sec:-1 #记录了最后一次AOF重写操作的耗时
aof_current_rewrite_time_sec:-1 #如果服务器正在进行AOF重写操作,那么这个值记录的就是当前重写操作已经耗费的时间(单位是秒)
aof_last_bgrewrite_status:ok 一个标志值,记录了最后一次重写AOF文件的结果是成功还是失败 aof_last_write_status:ok
# Stats 一般统计信息
total_connections_received:225390 #服务器已经接受的连接请求数量
total_commands_processed:573807059 #服务器已经执行的命令数量
instantaneous_ops_per_sec:34 #服务器每秒中执行的命令数量
total_net_input_bytes:30507043380 服务器输入的字节总数
total_net_output_bytes:36664408875 服务器输出的字节总数
instantaneous_input_kbps:1.41
instantaneous_output_kbps:0.93
rejected_connections:0 #因为最大客户端数量限制而被拒绝的连接请求数量
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:363726 #因为过期而被自动删除的数据库键数量 evicted_keys:0 因为最大内存容量限制而被驱逐(evict)的键数量
keyspace_hits:125806840 #查找数据库键成功的次数
keyspace_misses:3943604 查找数据库键失败的次数
pubsub_channels:1 #目前被订阅的频道数量
pubsub_patterns:0 #目前被订阅的模式数量
latest_fork_usec:3755 #最近一次fork()操作耗费的时间(毫秒)
# Replication 主/从复制信息
role:master
connected_slaves:0 #有一个slave连接上来
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
l master_port:主服务器监听的端口号
l master_link_status:复制连接当前的状态,up表示连接正常,down表示连接断开
l master_last_io_seconds_ago:距离最近一次与主服务器进行通信已经过去了多少秒
l master_sync_in_progress:一个标志值,记录了主服务器是否正在与这个从服务器进行同步
l master_sync_left_bytes:距离同步完成还缺多少字节的数据
l master_sync_last_io_seconds_ago: 距离最近一次与主服务器进行通信已经过去了多少秒
master_link_down_since_seconds: 主从服务器连接断开了多少秒
# CPU PU 计算量统计信息
used_cpu_sys:24531.54 #Redis服务器耗费的系统CPU
used_cpu_user:21360.46 #Redis服务器耗费的用户CPU
used_cpu_sys_children:2118.70 #Redis后台进程耗费的系统CPU
used_cpu_user_children:18899.77 #Redis后台进程耗费的用户CPU # Keyspace
db0:keys=69505,expires=8999,avg_ttl=402930491778154 数据库相关的统计信息
#402930491778154 号数据库有69505 个键、 已经被删除的过期键数量为8999,个
- 父进程继续处理client请求,子进程负责将内存内容写入到临时文件。由于os的写时复制机制(copy on write)父子进程会共享相同的物理页面,当父进程处理写请求时os会为父进程要修改的页面创建副本,而不是写共享的页面。所以子进程的地址空间内的数 据是fork时刻整个数据库的一个快照。
- 当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出。
- 一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这样非常方便进行备份。比如你可能打算没1天归档一些数据。
- 方便备份,我们可以很容易的将一个一个RDB文件移动到其他的存储介质上
- RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
- RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。
- 如果你需要尽量避免在服务器故障时丢失数据,那么 RDB 不适合你。 虽然 Redis 允许你设置不同的保存点(save point)来控制保存 RDB 文件的频率, 但是, 因为RDB 文件需要保存整个数据集的状态, 所以它并不是一个轻松的操作。 因此你可能会至少 5 分钟才保存一次 RDB 文件。 在这种情况下, 一旦发生故障停机, 你就可能会丢失好几分钟的数据。
- 每次保存 RDB 的时候,Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。 在数据集比较庞大时, fork() 可能会非常耗时,造成服务器在某某毫秒内停止处理客户端; 如果数据集非常巨大,并且 CPU 时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒。 虽然 AOF 重写也需要进行 fork() ,但无论 AOF 重写的执行间隔有多长,数据的耐久性都不会有任何损失。
- 使用 AOF 持久化会让 Redis 变得非常耐久(much more durable):你可以设置不同的 fsync 策略,比如无 fsync ,每秒钟一次 fsync ,或者每次执行写入命令时 fsync 。 AOF 的默认策略为每秒钟 fsync 一次,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync 会在后台线程执行,所以主线程可以继续努力地处理命令请求)。
- 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。
- 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。
- AOF 在过去曾经发生过这样的 bug : 因为个别命令的原因,导致 AOF 文件在重新载入时,无法将数据集恢复成保存时的原样。 (举个例子,阻塞命令 BRPOPLPUSH 就曾经引起过这样的 bug 。) 测试套件里为这种情况添加了测试: 它们会自动生成随机的、复杂的数据集, 并通过重新载入这些数据来确保一切正常。 虽然这种 bug 在 AOF 文件中并不常见, 但是对比来说, RDB 几乎是不可能出现这种 bug 的。
redis参数与持久化原理的更多相关文章
- 两种Redis持久化原理的详解
Redis为持久化提供了两种方式: RDB:在指定的时间间隔能对你的数据进行快照存储. AOF:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据. 本文将通过下面内容的介 ...
- mysql主从复制、redis基础、持久化和主从复制
一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...
- Redis之数据持久化RDB与AOF
Redis之数据持久化RDB与AOF https://www.cnblogs.com/zackku/p/10087701.html 大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内 ...
- 进阶的Redis之数据持久化RDB与AOF
大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内存数据库,它的操作都几乎基于内存.但是内存型数据库有一个很大的弊端,就是当数据库进程崩溃或系统重启的时候,如果内存数据不保存的话,里 ...
- redis之(十四)redis的主从复制的原理
一:redis主从复制的原理,步骤. 第一步:复制初始化 --->从redis启动后,会根据配置,向主redis发送SYNC命令.2.8版本以后,发送PSYNC命令. --->主red ...
- Redis系列(四)--持久化
持久化就是将数据的更新异步的保存到磁盘中 持久化方式: 1.快照:某个时间点数据的备份 MySQL dump.Redis RDB 2.写日志:MySQL BinLog.HBASE Hlog.Redis ...
- 详解 Redis 应用场景及原理
本文转自https://blog.csdn.net/niucsd/article/details/50966733,描述了redis实现原理和应用场景,篇幅较长,有意学习redis的同学可耐心阅读. ...
- redis两种持久化的方法
Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...
- Redis两种持久化方式(RDB&AOF)
爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Red ...
随机推荐
- 数位dp/记忆化搜索
一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an ...
- php吧字符串直接转换成数组处理
$str ='123456'; echo strlen($str) - 1; echo '<br>'; echo $str{strlen($str) - 1}; echo '<br& ...
- 移动端性能优化动态加载JS、CSS
JS CODE (function() { /** * update: * 1.0 */ var version = "insure 1.1.0"; var Zepto = Zep ...
- 几个常见Win32 API函数
1.获取客户区矩形区域 RECT cliRect; GetClientRect(hWnd, &cliRect); 2.获取窗口上下文句柄 HDC hdc = GetDC(hWnd);//... ...
- Count Complete Tree Nodes || LeetCode
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * s ...
- 《Linux内核分析》第六周 进程的描述与创建
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK SIX(3 ...
- TCP/IP协议 三次握手与四次挥手
一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号 ...
- 第一次尝试编写java
昨晚手贱,不小心把环境变量path里面都东西全删除了 然后上百度搜了一波又一波 最后还是复制达达的 感动 然后还是不行,最后发现错误竟然是分号用了汉字的分号而不是英文的分号 这个问题在编写C语言也出现 ...
- 向ES6看齐,用更好的JavaScript(三)
本文是ES6系列的第三篇,主要介绍ES6新增的数据类型.数据结构,先上传送门: 1 变量部分 2 现有对象拓展 3 新增数据类型/数据结构 4 新的异步编程模式 5 类和模块 1 第七种数据类型Sym ...
- eclipse中配置tomcat
配置eclipse中的tomcat非常简单,之前以为windows下和mac中可能会不一样,但是经过配置发现是一样的: 下面就是在eclipse中简单的配置tomcat如下(mac和windows中都 ...