一、NoSQL四大分类整体对比
====== SET ======
200000 requests completed in 1.74 seconds
100 parallel clients
3 bytes payload
keep alive: 1
host configuration "save": 3600 1 300 100 60 10000
host configuration "appendonly": no
multi-thread: no
Latency by percentile distribution:
0.000% <= 0.151 milliseconds (cumulative count 1)
50.000% <= 0.423 milliseconds (cumulative count 115987)
75.000% <= 0.447 milliseconds (cumulative count 153373)
87.500% <= 0.495 milliseconds (cumulative count 175602)
93.750% <= 0.583 milliseconds (cumulative count 187813)
96.875% <= 0.671 milliseconds (cumulative count 193905)
98.438% <= 0.751 milliseconds (cumulative count 197076)
99.219% <= 0.807 milliseconds (cumulative count 198570)
99.609% <= 0.871 milliseconds (cumulative count 199245)
99.805% <= 0.975 milliseconds (cumulative count 199623)
99.902% <= 1.103 milliseconds (cumulative count 199807)
99.951% <= 1.431 milliseconds (cumulative count 199903)
99.976% <= 2.047 milliseconds (cumulative count 199952)
99.988% <= 2.391 milliseconds (cumulative count 199976)
99.994% <= 2.583 milliseconds (cumulative count 199988)
99.997% <= 2.663 milliseconds (cumulative count 199994)
99.998% <= 2.711 milliseconds (cumulative count 199997)
99.999% <= 2.735 milliseconds (cumulative count 199999)
100.000% <= 2.751 milliseconds (cumulative count 200000)
100.000% <= 2.751 milliseconds (cumulative count 200000)
Cumulative distribution of latencies:
0.000% <= 0.103 milliseconds (cumulative count 0)
0.003% <= 0.207 milliseconds (cumulative count 6)
0.015% <= 0.303 milliseconds (cumulative count 30)
20.573% <= 0.407 milliseconds (cumulative count 41146)
88.780% <= 0.503 milliseconds (cumulative count 177561)
94.910% <= 0.607 milliseconds (cumulative count 189819)
97.677% <= 0.703 milliseconds (cumulative count 195355)
99.285% <= 0.807 milliseconds (cumulative count 198570)
99.704% <= 0.903 milliseconds (cumulative count 199409)
99.843% <= 1.007 milliseconds (cumulative count 199687)
99.903% <= 1.103 milliseconds (cumulative count 199807)
99.939% <= 1.207 milliseconds (cumulative count 199878)
99.947% <= 1.303 milliseconds (cumulative count 199893)
99.950% <= 1.407 milliseconds (cumulative count 199900)
99.955% <= 1.503 milliseconds (cumulative count 199910)
99.959% <= 1.607 milliseconds (cumulative count 199917)
99.963% <= 1.703 milliseconds (cumulative count 199925)
99.966% <= 1.807 milliseconds (cumulative count 199933)
99.971% <= 1.903 milliseconds (cumulative count 199942)
99.975% <= 2.007 milliseconds (cumulative count 199949)
99.978% <= 2.103 milliseconds (cumulative count 199956)
100.000% <= 3.103 milliseconds (cumulative count 200000)
Summary:
throughput summary: 115273.77 requests per second
latency summary (msec):
avg min p50 p95 p99 max
0.447 0.144 0.423 0.615 0.783 2.751
unit | 解释 |
---|---|
m | 表示单位为米(默认值) |
km | 表示单位为千米 |
mi | 表示单位为英里 |
ft | 表示单位为英尺 |
5.1.6> GEORADIUS(v3.2.0)
unit | 解释 |
---|---|
m | 表示单位为米(默认值) |
km | 表示单位为千米 |
mi | 表示单位为英里 |
ft | 表示单位为英尺 |
【解释】
我们发现,在事务中每次执行一条指令,就会返回QUEUED,表明指令已经存入了这个事务的执行队列中了。但是需要注意的一点是,只是放入了事务队列,但并没有去执行。那什么时候会执行呢?那就来看一下下个指令EXEC。
【解释】
调用完EXEC之后,正确执行的都会返回OK,并且当我们再次查询account里面的金额的时候,也正确的返回了1100。这就说明,一个事务内的指令是按照顺序执行的。
【结论】当执行了EXEC指令之后,watch就被隐式的执行了unwatch。如果需要再次监控,就需要再次调用WATCH指令。
主从复制实现了数据的备份,实际上提供了数据冗余的实现方式。
当主节点出现异常时,可以由从节点提供服务,实现快速的故障恢复,实际上提供了服务冗余的实现方式。
在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器的负载;
在写少读多的业务场景下,通过多个从节点分担读负载,可以大大提高Redis服务器是并发量。
哨兵配合主从复制,可以是实现Redis集群的高可用。
# redis-6380/redis.conf
port 6380
pidfile /var/run/redis-6380.pid
logfile "redis-6380.log"
dbfilename dump-6380.rdb
daemonize yes
# redis-6381/redis.conf
port 6381
pidfile /var/run/redis-6381.pid
logfile "redis-6381.log"
dbfilename dump-6381.rdb
daemonize yes
# 如果不通过修改配置文件,也可以在客户端中输入“SLAVEOF 127.0.0.1 6380”即刻生效!!
# 也可以在客户端中输入“SLAVEOF NO ONE”来断开主从关系
replicaof 127.0.0.1 6380
# redis-6382/redis.conf
port 6382
pidfile /var/run/redis-6382.pid
logfile "redis-6382.log"
dbfilename dump-6382.rdb
daemonize yes
replicaof 127.0.0.1 6380
【解释】我们发现,两个从节点都可以获取到新添加的bob。说明,只要主节点再次成功启动,主从结构依然可以自动的建立起来。
【解释】
Sentinel 会不断地检查主节点和从节点是否运作正常。
当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知。
当一个主服务器不能正常工作时,Sentinel会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
指的是单个 Sentinel 实例对服务器做出的下线判断。
指的是多个 Sentinel 实例在对同一个服务器做出SDOWN判断, 并且通过SENTINEL is-master-down-by-addr命令互相交流之后,得出的服务器下线判断。
一个Sentinel可以通过向另一个Sentinel发送SENTINEL is-master-down-by-addr命令来询问对方是否认为给定的服务器已下线。
# sentinel的端口号,如果配置3个Sentinel,只需要修改这个port即可,即:26380、26381、26382
port 26380
# 监视127.0.0.1:6380的主节点,且至少有2个Sentinel判断主节点失效,才可以自动故障迁移
sentinel monitor mymaster 127.0.0.1 6380 2
# 指定了Sentinel认为服务器已经断线所需的毫秒数;如果服务器在给定的毫秒数之内,没有返回Sentinel发送的PING命令的回复,或者返回一个错误,
# 那么Sentinel将这个服务器标记为主观下线(subjectively down,简称 SDOWN )
sentinel down-after-milliseconds mymaster 60000
# 故障迁移超时时间
sentinel failover-timeout mymaster 180000
# 指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步,这个数字越小,完成故障转移所需的时间就越长。
sentinel parallel-syncs mymaster 1
redis-sentinel /path/to/sentinel.conf
或
redis-server /path/to/sentinel.conf --sentinel
9.4> 测试关闭一个Sentinel,其他哨兵是否正常工作
当节点比较少时,增删节点对单个节点的影响会很大,从而导致出现数据不均衡的情况。拿上图来举例,当我们删除任意一个节点,都会导致集群中的某一个节点的数据量由总数据的 1/4 变为 1/2。
# 配置集群节点对应的端口号(分别为6390,6391,6392,6393,6394,6395)
port 6390
# 守护进程开启
daemonize yes
# 关闭保护模式
protected-mode no
# 将集群开启
cluster-enabled yes
cluster-config-file nodes-6390.conf(分别为6390,6391,6392,6393,6394,6395)
./redis-cli --cluster create 127.0.0.1:6390 127.0.0.1:6391 127.0.0.1:6392 127.0.0.1:6393 127.0.0.1:6394 127.0.0.1:6395 --cluster-replicas 1
redis-cli --cluster check 172.17.0.2:6379
redis-cli --cluster fix 172.17.0.2:6379 #官方修复功能