Redis理解

2023-05-16

Redis集群是一个不支持处理多个Keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下会导致错误

Redis配置文件中的一些属性:

#################IINCLUDES模块################

include /path/to/local.conf  配置模板用于引入公共配置的部分

##############################################

#################GENERAL模块################

daemonize no Redis默认不能在后台运行,需要将这个参数改成yes

pidfile /var/run/redis.pid 后台运行的一个pid文件路径

port 7000 监听端口

tcp-backlog 511 一个TCP请求完成三次握手之后进入到队列中,描述该队列的大小,必须不能大于linux内核定义的/proc/sys/net/core/somaxconn的值,后者一般调整到2048

timeout 客户端和Redis服务端的连接超时时间,默认是0,永远不超时

tcp-keepalive tcp心跳包,当设置为非0时,表示周期性的检测客户端是否还处于监控状态,避免服务器一直阻塞,官方建议是60秒

loglevelnotice 指定LOG日志的级别

logfile "" 指定日志文件的位置

databases 指定数据库的数目,默认使用的是DB0,你可以使用select dbid命令选择一个不同的数据库,必须是0到databases-1之间的值

##############################################

#################镜像RDB模块################

save 900 1 save 300 10 save 60 10000 根据多少时间内有多少个key值发生变化,则进行保存,可以注释掉所有的save来停用保存功能

stop-writes-on-bgsave-error yes 默认情况下最后一次后台镜像保存操作失败,则redis将停止接收写操作,如果你安装了靠谱的监控而不希望redis这样做,也可以设置为no

rdbcompression yes 在dump .rdb数据的时候是否LZF压缩字符串,默认为yes(会消耗cpu),如果设置为0(磁盘占用会很大)

rdbchecksum yes 在rdb文件的末尾会带上CRC64校验和,能校验rdb文件是否损坏,但在保存rdb文件的时候,会有大概10%的性能损耗,为了追求高性能可以关闭此配置

dbfilename dump_7000.rdb  rdb文件的名称

dir 当前工作目录,配置文件和镜像文件都在此目录下

##############################################

#################主从复制模块################

slaveof <masterip> <masterport>  slave复制对应的master

masterauth <master-password> 当master设置了requirepass,那么slave要连上master,需要有master的密码才行

slave-serve-stale-data yes 当主从失去连接或复制正在进行,从库两种运行方式:(1) yes表示从库会继续响应客户端请求,数据可能过时 (2)no表示拒绝info和salveof之外命令

slave-read-only yes 配置从库是否是只读的

repl-diskless-sync no 是否使用socket复制数据,目前支持两种方式:disk和socket,如果新的从或重连的从无法部分同步,就会执行全量同步,master生成rdb文件(1,直接保

存到磁盘,再把磁盘上的rdb文件传递给slave,socket是master创建一个新的进程,直接把rdb文件以socket的方式传递给slave,disk方式是多个slave都共享,socket方式是

一个个顺序复制,在磁盘慢网速快的情况下才推荐socket方式)

repl-diskless-sync-delay 5 复制的延迟时间,一旦开始复制,节点不会再接收新的slave的复制请求直到下一个rdb传输,所以最好等上一会,等更多的slave练上来

repl-ping-slave-period 10 根据指定的时间间隔向服务器发送ping请求,默认10秒

repl-timeout 60 设置复制的超时时间,此值要比上面的这个参数大

repl-disable-tcp-nodelay no 是否禁用tcp_nodelay参数,默认no,即使用tcp nodelay(表示没有延迟),如果设置为yes会减少包数量和网络带宽,但会有延迟(数据量大使用)

repl-backlog-size 1mb 这是一个环形复制缓存区,用来保存最新的复制命令,这样slave离线的时候,不需要完全复制master数据,只需要把缓存区数据复制给slave,缓存区

的值越大,slave离线的时间可以更长,复制缓存区只有在slave连接的时候才分配内存,没有slave的一段时间,内存会被释放处理

repl-backlog-ttl 3600 多久没有slave会释放缓存区的内存

slave-priority 100 当master不可用时,根据这个值越小则优先当选master,配置为0则不会被选举

min-slaves-to-write 3 至少有三个健康的slave的时候,master才会被允许写入,设置为0表示关闭此功能

min-slaves-max-lag 10 延迟小于多少秒才认为是健康的slave

##############################################

#################安全模块################

requirepass foobared 让用户使用auth命令来认证密码

rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 将危险的命令修改成其他名称,例如Config命令可以重命名为一个很难被猜到的命令

rename-command CONFIG "" 设置成一个空的值,可以禁用一个命令

##############################################

#################限制模块################

maxclients 10000 设置能连接上Redis的最大客户端连接数量,

maxmemory <bytes> 配置最大内存容量,当内存满了配合maxmemory-policy策略进行处理,注意slave的输出缓存区不计算在maxmemory内,防止内存用完建议设置小一点

内存容量超过maxmemory后的处理策略

volatile-lru:利用LRU算法移除设置过过期时间的key

volatile-random:随机移除设置过过期时间的key

volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)

allkeys-lru:利用LRU算法移除任何key

allkeys-random:随机移除任何key

noeviction:不移除任何key,只是返回一个错误

maxmemory-policy noeviction 

maxmemory-samples 5 使用lru或者ttl淘汰算法,从需要淘汰的列表中随机选择sample个key,选出闲置时间最长的key移除

##############################################

#################AOF模块################

appendonly yes 默认redis使用的是rdb方式持久化,redis中途宕机会有几分钟的数据丢失,append only file 是另一种持久化方式,可以提供更好的持久化特性

redis会把每次写入的数据在接收后都写入appendonly.aof,每次启动时redis都会把这个文件的数据存入内存里,会忽略RDB文件(因为AOF优先级高)

appendfilename "appendonly_7000.aof" aof文件名

appendfsync everysec 表示每秒执行一次fsync,可能会丢失这一秒的数据

no-appendfsync-on-rewrite no  aof会生成一个子进程在后台对aof文件进行重写,但是同时执行子进程重写与主进程写aof文件的操作,两者都会操作磁盘,而bgrewriteaof往往

会涉及大量磁盘操作,这样会使主进程在写aof文件的时候出现阻塞的情形,而no-appendfsync-on-rewrite这个参数设置为no表示接受阻塞保证数据安全,如果设置为yes相当

于appendfsync设置为no,这说明并没有执行磁盘操作,只是写入缓存区,等rewrite写完后再写入,因此不会造成阻塞,但是如果redis宕机,可能会丢失30秒数据,因此

如果应用系统无法忍受延迟,而可以容忍少量的数据丢失,则设置为yes,如果应用系统无法忍受数据丢失,则设置为no

auto-aof-rewrite-percentage 100 自动重写规则,当前aof文件大小是上次日志重写得到aof文件大小的两倍,自动新的日志重写过程

auto-aof-rewrite-min-size 64mb 设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍热很小的情况还要重写

aof-load-truncated yes  有时候aof文件可能尾部不完整,如果设置为yes会自动发布一个log给客户端然后load,如果设no,用户必须手动redis-check-aof修复AOF文件才可以

##############################################

#################LUA模块################

lua-time-limit 5000 redis脚本执行是原子的,在执行期间不接受其他命令,为了防止脚本执行过长所以提供了lua-time-limit参数限制脚本的最长运行时间,默认是5秒

##############################################

#################集群模块################

cluster-enabled yes 开启集群模式

cluster-config-file nodes-7000.conf  集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息,这个文件不需要手动配置,由redis自动生成

每个redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突

cluster-node-timeout 15000 节点互连超时的阀值,集群节点超时毫秒数

cluster-slave-validity-factor 10 当主节点宕机后,所有从节点都会申请成为主,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被

提升为master,该参数用于判断slave节点与master断线的时间是否过长,比较slave断开的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period

如果默认节点超时为30秒,并且cluster-slave-validity-factor 为10,repl-ping-slave-period是10秒,即超过10*30+10秒的slave不能成为主,可能就会出现某个节点

宕机却没有合适的从能顶上的情况,从而导致集群不能正常工作,这样情况下,只能等到原来的主节点重新回归到集群,集群才恢复运作,如果设置为0,则无论从节点与

主节点失联多久,此从节点都能尝试升级为主节点

cluster-migration-barrier 1  主节点需要的最小从节点,某个主节点的从节点>1的会迁移到某个主节点的从节点<1上

cluster-require-full-coverage yes 设置为yes表示所有的slot都要有节点分配,集群状态才为OK,设置为no表示就算部分的slot没有分配集群也可以提供服务,不建议打开该

配置

##############################################

#################慢日志模块################

slowlog-log-slower-than 10000 记录那些比较慢的命令,当命令的执行超过了指定时间,就会记录在slow log中,slow log保存在内存中,所有没有io操作,执行时间比

slowlog-log-slower-than大的请求记录到slowlog里面,单位是毫秒,所以1000000就是1秒,注意:负数时间会禁用慢查询日志,而0会强制记录所有命令

slowlog-max-len 128 慢日志查询长度,新的进来老的会被删除,这个长度没有限制,只要有足够的内存就行,可以通过slowlog reset来释放内存

##############################################

#################监控模块################

latency-monitor-threshold 0 延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表,只记录大于等于此选项设置的值

默认是0表示关闭监视,如果要打开需要通过CONFIG SET命令动态配置

#########################################

####################键空间模块#################

notify-keyspace-events "" 默认是关闭的,键空间通知使得客户端可以通过订阅频道或模式,来接收哪些以某种方式改动了Redis数据集的事件

##############################################

####################ADVANCED模块#################

存储结构:小数据量的用数组,大数据量的用map

hash-max-ziplist-entries 512 数据量小于等于hash-max-ziplist-entries 的用ziplist,大于hash-max-ziplist-entries 用hash

hash-max-ziplist-value 64 value大小小于等于hash-max-ziplist-value 的用ziplist,大于hash-max-ziplist-value 用hash

list-max-ziplist-entries 512  数据量小于等于list-max-ziplist-entries用ziplist,大于list-max-ziplist-entries用list

list-max-ziplist-value 64  value大小小于等于list-max-ziplist-value的用ziplist,大于list-max-ziplist-value用list

set-max-intset-entries 512  数据量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set

zset-max-ziplist-entries 128 数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset

zset-max-ziplist-value 64 value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset

hll-sparse-max-bytes 3000  value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)

一个比16000大的value是几乎没用的,建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右

activerehashing yes Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。当你的使用场景中,有非常严格的实时性需要,

不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存


对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端  

  

当hard限制了会被立即关闭,如果soft限制到了,会等soft秒

比如:hard是32m,soft是16m,10secs,当到达32m就立即断,或者在16m以上停止了10secs,

设置为0表示关闭此功能

client-output-buffer-limit normal 0 0 0 对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normal client默认取消限制,因

为如果没有寻问,他们是不会接收数据的

client-output-buffer-limit slave 256mb 64mb 60 对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么

服务器就会立即断开客户端连接

client-output-buffer-limit pubsub 32mb 8mb 60 对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客

户端连接

hz 10 redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,越大则调度频率越高。设置成100以上会对CPU造成大压力除非你对线上实时性要求很高。可以在

1~500之间

aof-rewrite-incremental-fsync yes 在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync,这对于把文件写入磁盘是有帮助的,可以

避免过大的延迟峰值

##############################################

cluster-migration-barrier 1 表示一个主节点拥有很多好的从节点, 而当其他某个主节点的从节点的数量小于1时, 就会尝试将从节点迁移给他 

cluster-node-timeout 5000 节点超时5秒被认定为宕机了

cluster-require-full-coverage no 默认是yes,只要有节点宕机导致导致16384个槽没有都可用,整个集群就全部停止服务了,所以要改成no

Redis的3核心目标

1,为了追求性能 ,Redis采用了P2P而非Proxy方式,采用异步复制,客户端重定向等设计,而牺牲了部分的一致性,使用性

2,可以水平扩展到1000个节点

3,使用Redis集群就自动带有Failover能力,无需使用Sentinel来确保可用性了

单节点的Redis能保证CP(一致性与分区容错性), 但是不能保证可用性,因为某个节点挂了后,那么他上面的分片数据就没法访问了

有了Redis Cluster后就从NoSQL内存数据库变成了分布式NoSQL数据库了,CAP模型从CP变成了AP,通过自动分片与冗余数据,就具备了分布式能力

Redis-trib是ruby开发的一个管理Redis集群的客户端,可以使用它来创建集群,而Redis还在utils/create-cluster下提供了一个create-cluster脚本(也是用于创建集群)

Resharding数据迁移,将slot迁移到其他节点上

Redis Cluster自身就能自动进行Master选举和Failover转移

Redis集群没有节点自动发现功能,需要通过cluster meet让各个节点互相"握手",全部节点"握手"成功后,就可以使用cluster replicate命令为节点指定角色了,默认每个节点

都是Master,设置好主从关系后,可以使用cluster addslots命令指派16384个槽的位置了,

Migrate在正真开始Resharding之前,redis-trib会先在源节点和目标节点上执行cluster setslot importing和cluster setslot migrating命令,将要迁移的槽分别标记为迁出中

和导入中的状态,然后执行cluster getkeysinslot获得slot中的所有key,最后就可以对每个key执行migrate命令进行迁移了,槽迁移完成后,执行cluster setslot命令通知

整个集群槽的指派已经发生变化

Redis Cluster涉及三个核心的数据结构clusterState,clusterNode,clusterLink,重要的属性有:clusterstate.slots, clusterstate.slots_to_keys和clusterNode.slots了

clusterState:集群状态

nodes:所有节点

migrating_slots_to :迁出中的槽

importing_slots_from:迁入中的槽

slots_to_keys 槽中包含的所有key,用于迁移slot时获得其包含的key

slots:slot所属的节点,用于处理请求时判断key所在slot是否是自己负责

clusterNode:节点信息

slots:节点负责的所有slot,用于发送gossip消息通知其他节点自己负责的slot,

clusterLink:与其他节点通信的连接

Redis的请求处理流程: Redis单机情况下,key不存在就告诉客户端key不存在,而在集群模式下,因为涉及到请求重定向和Slot迁移,所以对请求的处理变得很复杂

流程如下:

先计算key所在的slot是否属于当前Node(计算crc16(key)%16384得到slot, 查询clusterstate.slots负责slot的节点指针,与自己的指针比较)

1,若不属于自己则相应MOVED错误重定向客户端

2,若属于且key存在,则直接返回

3,若key不存在,则检查是否在迁出中(clusterState,migrating_slots_to)

4,若slot迁出中,返回ask错误重定向客户端到迁移的目的服务器上

5,若slot未迁出,则检查是否导入中(clusterState.importing_slots_from)

6,若slot导入中有Asking标记,则直接操作,否则响应MOVED错误重定向到客户端

RedisCluster集群的奇葩地方需要使用一个外部的ruby脚本来协助,且只支持IP不支持HOST,还有就是Redis进程既负责读写数据又负责集群交互

RedisCluster的检索节点是否宕机使用gossip操作,但终究没有zookeeper方便快速

Redis Cluster接收不该由自己负责的Partition请求后,会向用户发送重定向命令(更好的选择是不会向客户端返回重定向信息,而是通过代理的方式,直接在集群内部向正确

的节点转发客户端的请求,并将结果同meta信息再转发回客户端)

Redis Cluster中的multi key操作,只支持多个key必须在同一个节点上,不在同一个节点上会出错

Redis Cluster的问题:

1,不能自动发现,集群建立时以及运行中新增节点时,都要通过手动执行meet命令或redis -trib.rb脚本添加到集群中

2,不能自动Resharding,需要自己通过计算从哪些节点上迁移多少slot,然后还是得通过redis-trib.rb操作

3,严重依赖外部redis-trib 包括集群状态检查,节点加入,resharding等等功能全部抽离到一个Ruby脚本中,

4,无监控管理UI,即便未来加了UI,像迁移进度这种信息在无中心化设计中很难得到

5,只保证最终一致性(可能会丢失数据),如果改成强一致性,可通过wait命令实现,但对于"脑裂"问题,目前Redis没有提供网络恢复后的Merger功能,更新可能丢失

RedisCluster的存储原理:

RDB:就是在不同的时间点,将Redis存储的数据生成快照并存储到磁盘等介质上

AOF: 就是将Redis执行过的所有写命令记录下来,在下次redis重新启动时,只要将这些指令从前到后再重复执行一遍,就可以实现数据恢复了

两种方式可以同时使用,这种情况下,redis重启的话,会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高

如果没有数据库持久化的需求,也可以关闭RDB和AOF方式,这样的话,Redis就变成一个纯内存数据库,就像memcache一样

Redis 常用命令:

http://blog.csdn.net/anxpp/article/details/51171312

Redis 测试命令

./redis-benchmark -h 192.168.1.246 -p 7000 -c 50 -r 100000 -n 100000 -t set -q -d 10 -k 1 -l

-h 指定服务器主机名

-p 指定服务器端口

-s 指定服务器socket

-c 指定并发连接数

-n 指定请求数

-d 以字节的形式指定set/get值的数据大小

-k 1=keep alive 0=reconnect

-r set/get/incr使用随机key ,sadd使用随机值

-p 通过管道传输<numreq>请求

-q 强制退出redis ,仅显示query/sec值

-csv 以csv格式输出测试结果

-l 生成循环,永久进行测试

-t 仅运行以逗号分割的测试命令列表

-I Idle模式,仅打开N个idle连接并等待


redis内存与swap分区的交换,当内存实际使用大小 > 最大内存可用大小时,就会将不常使用的内容放入swap分区中,当使用时再从swap分区中取出来

swapon -s 会查看到你的swap分区挂载在哪里? 比如说挂载到/dev/sda2下,接着执行swapoff /dev/sda2,停止是需要一段时间的(他会把swap分区内容释放到实际内存中)

然后执行结束后,再执行swapon -a 启动我们的swap分区


Redis的持久化分为RDB和AOF模式:

AOF:实际就是redis的redo log,正常情况下为了保证一致性,每条命令都要保证其对应的log落地到磁盘,也就是每条命令对应的日志,要先写到cache,然后再fsync落地

磁盘,这样是保证强一致性,只要日志失败,此条命令执行失败,但是为了一些性能,当接到命令是可以先放入到cache,接着返回用户,fsync的操作可以有三种方式:

always:对于每条命令都执行fsync,速度慢,但是安全,不会丢数据

every second :每秒钟执行一次fsync,足够快,最多丢失一秒数据

never :不进行fsync,完全由os实现数据刷到磁盘,最快,但不能保证数据安全

还有就是AOF rewrite机制:正常db的恢复思路是镜像+redo log, redo log记录当前时间点距离上次快照的变化,在恢复时,先加载镜像,再对redo log进行恢复,而redis会对

AOF进行rewrite,就是根据当前状态生成一份新的AOF,保证每个key只会有一份数据,减少不必要的日志

AOF的流程:将接收到的命令序列化到aof buffer,再根据sync不同的策略,将命令写入到文件中,

AOF rewrite的流程:会创建一个子进程,遍历所有的db,写入到AOF中,同时,开启一个aof rewrite buffer,在命令写入aof buffer时,会判断是否开启rewrite,如果开启会

同时写入aof rewrite buffer,定期的将内容发送给子进程,在子进程完成rewrite后,会将最后一点aof rewrite buffer追加到AOF中,最后进行替换以完成aof rewrite

AOF rewrite触发的时机:(1) 用户调用BGREWRITEAOF命令 (2) aof日志大小超过预设的限额


RDB持久化方式,父进程fork子进程之后,两者共享同一份内存,子进程基本上只需要读内存,而父进程响应客户端请求,就需要修改内存

RDB机制:

(1), Save命令:客户端发送save命令,redis实例阻塞执行dump

(2), bgsave命令:dump任务由子进程完成,主进程可以继续服务请求

(3), 被动触发:超过阀值

(4), 主动同步触发:主从同步时需要将rdb传输给slave

子进程获取db中数据后调用fflush将内容输出到缓存区,然后再调用fsync将cache中的内容写盘,最后关闭文件,将临时文件重命名为指定的文件名

RDB加载时机:

(1), redis启动时,加载RDB (启动加载和AOF一样,不过以AOF优先,查看AOF是否开启)

(2), 主从同步时,master向从发送RDB (主从同步过程中,加载RDB,因为整个加载过程可能会很漫长,所以需要不停的向master发送心跳,避免master认为这个slave已经

timeout了,主动断开连接)

RDB主从同步机制(近乎1秒执行一次):

一是生成并传输快照(RDB), 二是传输增量backlog

RDB主从同步的过程:

1,slave发起连接ping

2,master接收返回pong

3,slave开始同步(同步分为全同步(未连接过)与半同步(以连接过),master端会有一个buffer存储back log,slave发起同步请求时,会附带masterid和back log offset,master

接收到请求后,会检查对应的offset是否在buffer内,如果在就可以进行半同步,直接从offset开始发送back log,如果没有满足条件,则执行全同步)

# server 部分:

Redis info 信息详解

redis_version   redis版本号

redis_mode:cluster   redis是集群模式

arch_bits:64  操作系统64位

multiplexing_api:epoll  Redis 所使用的事件处理机制

gcc_version : 编译 Redis 时所使用的 GCC 版本

process_id : 服务器进程的 PID

run_id : Redis 服务器的随机标识符(集群)

uptime_in_seconds : 自 Redis 服务器启动以来,经过的秒数

uptime_in_days : 自 Redis 服务器启动以来,经过的天数

lru_clock : 以分钟为单位进行自增的时钟,用于 LRU 管理

# client部分:

connected_clients:2 已连接客户端的数量(不包括通过从属服务器连接的客户端)
client_longest_output_list:0 当前连接的客户端当中,最长的输出列表
client_biggest_input_buf:0 当前连接的客户端当中,最大输入缓存
blocked_clients:0 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量

# Memory

used_memory:418825872 由 Redis 分配器分配的内存总量,以字节(byte)为单位
used_memory_human:399.42M 和userd_memory一样,只是用M显示
used_memory_rss:423133184 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps等命令的输出一致。
used_memory_peak:531660328 Redis 的内存消耗峰值(以字节为单位)
used_memory_peak_human:507.03M 和used_memory_peak一样,只是用M显示
used_memory_lua:36864 引擎所使用的内存大小(以字节为单位)
mem_fragmentation_ratio:1.01 used_memory_rss 和 used_memory 之间的比率,等于1或稍大于1比较合适
mem_allocator:jemalloc-3.6.0 在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc

# Persistence

loading:0  一个标志值,记录了服务器是否正在载入持久化文件。
rdb_changes_since_last_save:0  距离最近一次成功创建持久化文件之后的变动数量

rdb_bgsave_in_progress:0  一个标志值,记录了服务器是否正在创建 RDB 文件。
rdb_last_save_time:1490241491 最近一次成功创建 RDB 文件的 UNIX 时间戳。
rdb_last_bgsave_status:ok 一个标志值,记录了最近一次创建 RDB 文件的结果是成功还是失败
rdb_last_bgsave_time_sec:0 记录了最近一次创建 RDB 文件耗费的秒数。
rdb_current_bgsave_time_sec:-1 如果服务器正在创建 RDB 文件,那么这个域记录的就是当前的创建操作已经耗费的秒数
aof_enabled:1 标志值,记录了 AOF 是否处于打开状态。
aof_rewrite_in_progress:0 标志值,记录了服务器是否正在创建 AOF 文件。
aof_rewrite_scheduled:0 标志值,记录了在 RDB 文件创建完毕之后,是否需要执行预约的 AOF 重写操作
aof_last_rewrite_time_sec:92 最近一次创建 AOF 文件耗费的时长。
aof_current_rewrite_time_sec:-1 如果服务器正在创建 AOF 文件,那么这个域记录的就是当前的创建操作已经耗费的秒数。
aof_last_bgrewrite_status:ok 标志值,记录了最近一次创建 AOF 文件的结果是成功还是失败。
aof_current_size:335411529 AOF 文件目前的大小。
aof_base_size:335411529 服务器启动时或者 AOF 重写最近一次执行之后,AOF 文件的大小。也就是上次执行时的文件尺寸
aof_pending_rewrite:0 标志值,记录了是否有 AOF 重写操作在等待 RDB 文件创建完毕之后执行,类似aof_rewrite_scheduled

aof_buffer_length:0 AOF 缓冲区的大小。
aof_rewrite_buffer_length:0  AOF 重写缓冲区的大小。
aof_pending_bio_fsync:0  后台 I/O 队列里面,等待执行的 fsync 调用数量。
aof_delayed_fsync:5 被延迟的 fsync 调用数量。

# Stats
total_connections_received:18 服务器已接受的连接请求数量。
total_commands_processed:1683106 服务器已执行的命令数量。
instantaneous_ops_per_sec:0 服务器每秒钟执行的命令数量。
total_net_input_bytes:1831266995 总共的网络入口的流量
total_net_output_bytes:39530750 总共的网络出口的流量
instantaneous_input_kbps:0.00 每秒读字节数
instantaneous_output_kbps:0.02 每秒写字节数
rejected_connections:0 因为最大客户端数量限制而被拒绝的连接请求数量。
sync_full:0 完全同步成功次数
sync_partial_ok:0 增量同步成功次数
sync_partial_err:0 增量同步失败次数
expired_keys:0 因为过期而被自动删除的数据库键数量。
evicted_keys:0 因为最大内存容量限制而被驱逐(evict)的键数量。
keyspace_hits:0 查找数据库键成功的次数。
keyspace_misses:0 查找数据库键失败的次数。
pubsub_channels:0 目前被订阅的频道数量。
pubsub_patterns:0 目前被订阅的模式数量。
latest_fork_usec:17387 最近一次 fork() 操作耗费的毫秒数。
migrate_cached_sockets:0 表示一个缓存连接池,该字典以目的节点的"<ip>:<port>"为key,以migrateCachedSocket结构为value

# Replication
role:slave  当前机器的角色(master主或slave从)
master_host:192.168.1.246 ip地址
master_port:7003  端口号
master_link_status:up  复制连接当前的状态, up 表示连接正常, down 表示连接断开。
master_last_io_seconds_ago:4  距离最近一次与主服务器进行通信已经过去了多少秒钟。
master_sync_in_progress:0 一个标志值,记录了主服务器是否正在与这个从服务器进行同步

slave_repl_offset:107339 从的数据同步偏移量
slave_priority:100   从的优先级
slave_read_only:1  从是只读的
connected_slaves:0 连接的从的数量
master_repl_offset:0 主数据同步偏移量
repl_backlog_active:0 复制积压缓冲区是否开启

repl_backlog_size:1048576 复制积压缓冲大小
repl_backlog_first_byte_offset:0 复制积压缓存区的偏移量

repl_backlog_histlen:0  当前累积的数据量的大小。该值不会超过积压队列的总容量server.repl_backlog_size

# CPU
used_cpu_sys:42.34 Redis 服务器耗费的系统 CPU
used_cpu_user:44.49 Redis 服务器耗费的用户 CPU
used_cpu_sys_children:4.44   后台进程耗费的系统 CPU
used_cpu_user_children:3.32  后台进程耗费的用户 CPU

#cluster

Cluster_enabled : 一个标志值,记录集群功能是否已经开启。

# Keyspace
db0:keys=33373,expires=0,avg_ttl=0 db0数据库,一共有多少个key,过期key,带生存期的key数量

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis理解 的相关文章

随机推荐

  • Java Web小案例:查询城市天气

    一 解决思路 1 首先获取泸州的城市代码 在返回的数据里 xff0c 第一项的ref值就是泸州的城市代码 xff1a 101271001 2 利用国家气象局提供的接口访问泸州的天气信息 二 准备工作 学会如何在Java程序里解析json 准
  • 最大矩形面积——单调栈

    问题描述 给一个直方图 xff0c 求直方图中的最大矩形的面积 例如 xff0c 下面这个图片中直方图的高度从左到右分别是2 1 4 5 1 3 3 他们的宽都是1 xff0c 其中最大的矩形是阴影部分 Input 输入包含多组数据 每组数
  • Week 14 B——Q老师与十字叉

    Q老师与十字叉 Q老师 得到一张 n 行 m 列的网格图 xff0c 上面每一个格子要么是白色的要么是黑色的 Q老师认为失去了 十字叉 的网格图莫得灵魂 一个十字叉可以用一个数对 x 和 y 来表示 其中 1 x n 并且 1 y m 满足
  • Week 14 C - Q老师的考验

    Q老师的考验 Q老师 对数列有一种非同一般的热爱 xff0c 尤其是优美的斐波那契数列 这一天 xff0c Q老师 为了增强大家对于斐波那契数列的理解 xff0c 决定在斐波那契的基础上创建一个新的数列 f x 来考一考大家 数列 f x
  • Week 14 E - Q老师度假

    Q老师度假 忙碌了一个学期的 Q老师 决定奖励自己 N 天假期 假期中不同的穿衣方式会有不同的快乐值 已知 Q老师 一共有 M 件衬衫 xff0c 且如果昨天穿的是衬衫 A xff0c 今天穿的是衬衫 B xff0c 则 Q老师 今天可以获
  • python-读取文件夹下的txt文件,读出矩阵数据,转置操作后存入新的txt文件

    在所作项目中需要将主行的矩阵变成主列的矩阵 即 1 1 写成 1 2 2 2 1 2 读入的数据为如下格式 xff1a 文件夹下的文件如下所示 xff1a 代码转置后的格式如下所示 xff1a 代码可以遍历文件夹下所有文件 xff0c 并且
  • Linux 下安装 sonarQube

    sonarQube详细介绍看我这篇文章 xff1a 代码分析工具 SonarQube 单椒煜泽的博客 CSDN博客 代码分析工具 SonarQube下载地址 xff1a Download SonarQube Windows环境从零搭建Son
  • Matlab2017a之前版本的 MATLAB MinGW-w64 C/C++ Compiler4.9.2下载

    对于Matlab R2015b up to R2017a xff0c 使用MinGW 4 9 2 TDM GCC 对于Matlab R2017b MinGW 5 3 Matlab R2015b up to R2017a 下载地址 xff1a
  • Apache CXF框架简介

    Apache CXF框架是一个开源的Web Services框架 xff0c 它来源于两个开源项目 ObjectWeb Celtix ESB产品 和Codehaus XFire SOAP堆栈软件 Apache CXF提供了对JAX WS规范
  • 寻找身高相近的小朋友

    小明今年升学到了小学1年纪 来到新班级后 发现其他小朋友身高参差不齐 然后就想基于各小朋友和自己的身高差 对他们进行排序 请帮他实现排序 输入描述 第一行为正整数 h和n 0 lt h lt 200 为小明的身高 0 lt n lt 50
  • 数字涂色 疫情过后希望小学终于又重新开学了

    注意 答案仅作为参考 实际考试中下列代码通过用例100 但不代表最优解 疫情过后希望小学终于又重新开学了 3年2班开学第一天的任务是 将后面的黑板报重新制作 黑板上已经写上了N个正整数 同学们需要给这每个数分别上一种颜色 为了让黑板报既美观
  • 九宫格按键输入法

    注意 答案仅作为参考 实际考试中下列代码通过用例100 但不代表最优解 九宫格按键输入 输出显示内容 有英文和数字两个模式 默认是数字模式 数字模式直接输出数字 英文模式连续按同一个按键会依次出现这个按键上的字母 如果输入 或者其他字符 则
  • 斗地主之顺子

    注意 答案仅作为参考 实际考试中下列代码通过用例100 但不代表最优解 在斗地主扑克牌游戏中 扑克牌由小到大的顺序为 3 4 5 6 7 8 9 10 J Q K A 2 玩家可以出的扑克牌阵型有 单张 对子 顺子 飞机 炸弹等 其中顺子的
  • 高矮个子排队

    注意 答案仅作为参考 实际考试中下列代码通过用例100 但不代表最优解 现在有一队小朋友 他们高矮不同 我们以正整数数组表示这一队小朋友的身高 如数组 5 3 1 2 3 我们现在希望小朋友排队 以 高 矮 高 矮 顺序排列 每一个 高 位
  • java代码转python代码(需要手动调整)

    xff08 1 xff09 windows 环境安装工具 python版本 7 先下载antlr http www antlr3 org download antlr 3 1 3 tar gz 链接 https pan baidu com
  • 统计每个月兔子的总数

    题目描述 有一只兔子 从出生后第3个月起每个月都生一只兔子 小兔子长到第三个月后每个月又生一只兔子 假如兔子都不死 问每个月的兔子总数为多少 输入描述 输入int型表示month 输出描述 输出兔子总数int型 示例1 输入 9 输出 34
  • 字符串运用-密码截取

    题目描述 Catcher 是MCA国的情报员 他工作时发现敌国会用一些对称的密码进行通信 比如像这些ABBA ABA A 123321 但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解 比如进行下列变化 ABBA gt 12AB
  • 吃火锅 入职后导师

    入职后导师会请你一起吃火锅 有m个菜品 你的手速是n 即吃完一道菜 要经过时间n才能再去夹菜 任一菜品下锅后 都需要经过对应时间才能熟 过时就不可口了 怎样可以吃到最多的可口的菜 输入 第1行 菜品数量m 手速n 第2 m行 每行两个数字
  • A. Serval and Bus

    outputstandard output It is raining heavily But this is the first day for Serval who just became 3 years old to go to th
  • Redis理解

    Redis集群是一个不支持处理多个Keys的命令 因为这需要在不同的节点间移动数据 从而达不到像Redis那样的性能 xff0c 在高负载的情况下会导致错误 Redis配置文件中的一些属性 xff1a IINCLUDES模块 include