Redis主从复制+哨兵选举机制分析
mhr18 2024-11-26 12:14 18 浏览 0 评论
1、简介
Redis中的高可用方案其实有以下集中:
- 1、Redis主从复制(一主一从,一主多从)
- 2、Redis主从复制+哨兵模式(比如:一主+两从+三哨兵)
- 3、Redis集群模式(下一篇文章编写)
- 4、Redis集群+主从模式(下一篇文章编写)
Redis主从复制,主要是为了做读写分离,写数据从主库操作,读数据从从库读取。但是普通的主从如果主服务器挂了,从服务器不会自动切换为主服务器。
Redis主从复制 +哨兵模式就是解决主服务器挂掉之后,哨兵监控到挂了之后,重新发起选举操作,让某台从服务器变为主服务器。从而继续提供服务。
Redis集群模式,就是将数据分片存储到不同的服务器,真正的达到了分布式存储,不像主从复制一样,存在存储上限。但是集群之后每个节点如果挂掉,存储的数据就会丢失。
Redis集群+主从模式,集群的每一个节点下面,都可以挂多台从服务器,从而让每个节点都是高可用的。
这些模式后面会一一讲到。
2、Redis主从复制
Redis是支持主从复制的,Redis开启主从复制的方式
- 1、通过执行slaveof命令(Redis5.0之后改成了replicaof)开启主从复制.
- 2、在配置文件中配置slaveof(Redis5.0之后改成了replicaof)开启主从复制
主从复制部署图
2.1、主从配置
首先我们需要安装主服务器redis
下载编译redis
# 下载
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
# 解压
tar -zxvf redis-5.0.0.tar.gz
# 创建一主一从文件夹
mkdir master_slave_01
# 创建目录,并编译
mkdir -p /opt/redis/baseredis
make install PREFIX=/opt/redis/baseredis
# 复制一份编译好的命令,分别作为主从
cp -r /opt/redis/baseredis /opt/redis/master_slave_01/master
cp -r /opt/redis/baseredis /opt/redis/master_slave_01/slave
# 复制配置文件
cp /opt/redis/redis-5.0.0/redis.conf /opt/redis/master_slave_01/master/redis.conf
cp /opt/redis/redis-5.0.0/redis.conf /opt/redis/master_slave_01/slave/redis.conf
# 防火墙添加端口 并重启生效
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=6380/tcp --permanent
systemctl restart firewalld.service
2.1.1、主Redis配置
可以设置后台启动,密码等,因为redis不设置密码,并且开放到外网的话是非常危险的,很容易导致被黑客攻击。所以我们这里会设置密码
# 注释掉bind 127.0.0.1
# 开启守护进程模式 后台启动
daemonize yes
# 开启保护模式
protected-mode yes
# 主服务器设置密码
requirepass abcAbc123.
2.1.2、从Redis配置
# 注释掉bind 127.0.0.1
### 跟主服务器一样的修改部分+以下部分
# 修改端口
port 6380
# 配置主从复制
# replicaof <masterip> <masterport> 主服务器IP和端口
replicaof 10.0.0.5 6379
# masterauth <master-password> 主服务器密码
masterauth abcAbc123.
启动主从
cd /opt/redis/master_slave_01
# 启动主从服务
cd /opt/redis/master_slave_01/master && ./bin/redis-server redis.conf
cd /opt/redis/master_slave_01/slave && ./bin/redis-server redis.conf
查看进程
[root@VM-0-5-centos slave]# ps -ef |grep redis
root 23130 1 0 22:45 ? 00:00:00 ./bin/redis-server *:6379
root 23260 1 0 22:45 ? 00:00:00 ./bin/redis-server *:6380
root 23290 27887 0 22:45 pts/0 00:00:00 grep --color=auto redis
主从测试
# 连接主服务器 做写操作
[root@VM-0-5-centos master]# ./bin/redis-cli -h 10.0.0.5 -p 6379
# 首先我们一个key的值,发现需要认证,说明我们的密码生效了
10.0.0.5:6379> set name test_zhangsan
(error) NOAUTH Authentication required.
10.0.0.5:6379> auth abcAbc123.
OK
10.0.0.5:6379> set name test_zhangsan
OK
# 在从服务器查询
[root@VM-0-5-centos slave]# ./bin/redis-cli -h 10.0.0.5 -p 6380
# 不认证之前获取数据
10.0.0.5:6380> get name
(error) NOAUTH Authentication required.
# 认证之后后去数据
10.0.0.5:6380> auth abcAbc123.
OK
10.0.0.5:6380> get name
"test_zhangsan"
主从复制操作就结束了,接下来看一下主从复制到底是个什么原理。
2.3、主从复制原理
配置主从很简单,主服务器不用做过多的变更。
2.3.1、从服务器保存主服务器信息
当客户端向从服务器发送slaveof(replicaof)主机地址(127.0.0.1) 端口(6379)时,从服务器将主服务器ip 端口保存到redisServer的masterhost和masterport中。
struct redisServer {
char *masterhost; /* master主服务器IP地址 */
int masterport; /* master主服务器端口号 */
}
从服务器向发送slaveof命令的客户端返回一个OK,表示复制指令已经被接受,而实际上复制是在返回OK之后进行的。
2.3.2、从服务器与主服务器建立socket连接
从服务器(slave)保存主服务器(master)信息之后,就会与master建立连接。用于传输命令/RDB文件,接受来自master传播过来的写命令。
主服务器接受(accept)了从服务器的连接后,会创建相应的客户端状态,就相当于从服务器是主服务器的客户端。
2.3.3、发送ping/pong检查网络状态
slave向master发送ping命令,master回应一个pong,表示正常,返回错误,则表示master不正常,返回timeout,说明网络超时。
2.3.4、验证密码
如果主服务器没有使用requirepass设置密码,则无需设置masterauth(主服务器密码)。
如果主服务器使用requirepass设置密码了,则需要设置masterauth(主服务器密码),跟requirepass的值保持一致。或者使用auth向主服务器发送命令。
2.3.4、向主服务器发送从服务器的监听端口
在验证密码结束之后,从服务器将会执行命令replconf 监听端口,向主服务器发送从服务器监听的端口号。
2.3.5、数据同步复制与命令传播
同步数据指的是第一次开启主从复制之后,会把已经存在的数据一次性全部同步给从服务器(包括全量和增量同步),同步结束之后,每执行一个命令就会斤西瓜同步,也就是命令传播阶段。
Redis 2.8之前只有全量同(使用sync命令同步, redis 2.8之后使用psync命令代替sysnc)步,之后就增加了增量同步。
Redis2.8之前的数据同步
- 1、通过从服务器发送sync命令给主服务器
- 2、主服务器生成rdb文件并发送给从服务器,同时发送发送期间产生的写命令发送给从服务器
- 3、从服务器清空之前的数据,然后解析执行RDB文件
Redis2.8之前的命令传播
同步完成之后,主服务器执行写命令,该命令发送给从服务器并执行,使主从保持一致
这种方式,没有增量和全量的说法,每次从服务器同步数据时,都会先清空从服务器原来的所有数据。
Redis2.8之后的数据同步
Redis 2.8之后使用psync命令,它具备了全量同步和增量同步模式。 只有从服务器第一次连接主服务器时才会全量同步。断线重连有可能触发增量和全量(断开时还没同步数据,就相当于重新全量同步)。
全量同步
- 1、同步快照阶段:master创建并发送rdb快照给slave,slave载入并解析rdb文件。master将此阶段产生的新写命令存储到缓冲区。
- 2、同步写缓冲区阶段:master向slave同步在缓冲区的写操作命令。
- 3、同步增量阶段:master向slave同步写操作命令
增量同步
Redis的增量同步主要是指slave完成初始化之后开始正常工作时,master发生的写操作同步到slave的过程,一般是,master每执行一个写命令,就发送给slave相同的命令,然后slave执行,也就是命令传播。
2.4、心跳检测
在命令传播阶段,从服务器会以每秒一次的频率向主服务器发送命令。
#ack 应答 replication_offset 从服务器当前的复制偏移量
replconf <replication_offset>
replconf ack作用
- 1、检查主从的连接状态,向主服务器发送info replication命令,列出从服务器列表,可以看出最后一次发送命令的时间。和当前时间超过1表示超过1s没有连接上,就判定连接有故障。
- 2、辅助实现min-slaves,redis可盈通过配置防止主服务器在不安全情况下执行写命令。
# 从服务器的数量少于3个
min-replicas-to-write 3
# 三个从服务器的延迟(lag)值都大于或等于10s
min-replicas-max-lag 10
从服务器满足以上任意请求,主服务器就会拒绝执行写命令。
- 3、检测命令丢失
- 因为网络故障,主服务器传播给从服务器的命令可能丢失,从服务器发送replconf ack时,主服务器发现从服务器当前的复制偏移量少于自己的偏移量,然后主服务器根据从服务器提交的偏移量,在复制积压缓冲区中找到从服务器缺少的数据,并将这些数据补发给从服务器。
3、哨兵模式
哨兵(sentinel)是Redis的高可用性(High Availability)的解决方案
由一个或多个sentinel实例组成sentinel集群可以监视一个或多个主服务器和多个从服务器
当主服务器进入下线状态时,sentinel可以将该主服务器下的某一从服务器升级为主服务器继续提供服务,从而保证redis的高可用性
3.1、搭建哨兵模式
# 复制一份一主一从
cp master_slave_01/ master_slave_02 -r
cd master_slave_02
mv slave slave1
cp -r slave1 slave2
编辑slave2中的redis.conf文件,修改端口为6381.
准备哨兵
# 复制一份master的数据
cp /opt/redis/redis-5.0.0/sentinel.conf sentinel1/
# 复制一份sentinel.conf
cp /opt/redis/redis-5.0.0/sentinel.conf sentinel1/
修改sentinel.conf
# 开启保护模式
protected-mode yes
# 设置端口 默认26379
port 26379
# 开启后台模式
daemonize yes
# 哨兵sentinel监控的redis主节点的 ip port
# master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
# quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 10.0.0.5 6379 2
# 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提 供密码
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster abcAbc123.
# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave处于不能处理命令请求的状态.
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1
# 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3. 当想要取消一个正在进行的failover所需要的时间。
#4. 当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了默认三分钟
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000
启动主从和哨兵
cd /opt/redis/master_slave_02/master/ ; ./bin/redis-server redis.conf
cd /opt/redis/master_slave_02/slave1/ ; ./bin/redis-server redis.conf
cd /opt/redis/master_slave_02/slave2/ ; ./bin/redis-server redis.conf
cd /opt/redis/master_slave_02/sentinel1/ ; ./bin/redis-sentinel sentinel.conf
cd /opt/redis/master_slave_02/sentinel2/ ; ./bin/redis-sentinel sentinel.conf
cd /opt/redis/master_slave_02/sentinel3/ ; ./bin/redis-sentinel sentinel.conf
查看启动状态
[root@VM-0-5-centos sentinel3]# ps -ef |grep redis
root 23130 1 0 Sep06 ? 00:00:58 ./bin/redis-server *:6379
root 23260 1 0 Sep06 ? 00:01:00 ./bin/redis-server *:6380
root 23457 1 0 21:59 ? 00:00:00 ./bin/redis-server *:6381
root 23639 1 0 22:00 ? 00:00:00 ./bin/redis-sentinel *:26379 [sentinel]
root 23677 1 0 22:00 ? 00:00:00 ./bin/redis-sentinel *:26380 [sentinel]
root 23700 1 0 22:00 ? 00:00:00 ./bin/redis-sentinel *:26381 [sentinel]
root 23722 18174 0 22:00 pts/0 00:00:00 grep --color=auto redis
3.2、Redis哨兵模式原理
3.2.1、初始化sentinel
Sentinel是一个特殊的Redis服务器,它不会进行持久化,sentinel实例化后,每个sentinel会跟主服务器创建两个连接。一个是命令连接,一个是订阅连接。
- 1、命令连接:用于向主服务器发送命令并接受响应
- 2、订阅连接:用于订阅主服务器的--sentinel--频道
3.2.2、获取主从服务器信息
Sentinel默认每10s一次,向被监控的主服务器发送info命令,获取主服务器和从服务器列表的信息。
# 输入密码
127.0.0.1:6379> auth abcAbc123.
OK
127.0.0.1:6379> info
# Replication 主从复制信息
role:master
connected_slaves:2
slave0:ip=10.0.0.5,port=6380,state=online,offset=237886,lag=1
slave1:ip=10.0.0.5,port=6381,state=online,offset=237886,lag=1
master_replid:9940e7aafe067dc1ebb0f6c9bd70a39df0b29ca6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:238017
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:238017
可以看出,我们有两台从服务器,端口好分别是6380,6381.
如果Sentinel发现主服务器有新的从服务器加入主从,Sentinel还会向从服务器建立命令连接和订阅连接。在命令连接建立之后,Sentinel还是默认10s一次,向从服务器发送info命令,并记录从服务器的信息。
# Replication 主从复制信息
# 角色为slave
role:slave
# 主服务器ip和端口
master_host:10.0.0.5
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:280900
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:9940e7aafe067dc1ebb0f6c9bd70a39df0b29ca6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:280900
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:280900
sentinel以订阅方式向主从发送信息
默认情况下,Sentinel每2s一次,向所有被监视的主/从服务器所订阅的—sentinel—:hello频道上发送消息,消息中会携带Sentinel自身的信息和主服务器的信息.
PUBLISH _sentinel_:hello "< s_ip > < s_port >< s_runid >< s_epoch > < m_name > < m_ip >< m_port ><m_epoch>"
sentinel接受主从服务器的频道消息
当Sentinel与主服务器或者从服务器建立起订阅连接之后,Sentinel就会通过订阅连接,向服务器发送以下命令。
subscribe —sentinel—:hello
Sentinel彼此之间只创建命令连接,而不创建订阅连接.因为Sentinel通过订阅主服务器或从服务器,就可以感知到新的Sentinel的加入,而一旦新Sentinel加入后,相互感知的Sentinel通过命令连接来通信就可以了
3.2.3、sentinel主观/客观下线
Sentinel每秒一次向所有与它建立了命令连接的实例(主服务器、从服务器和其他Sentinel)发送PING命令。实例在down-after-milliseconds毫秒内返回无效回复(除了+PONG、-LOADING、-MASTERDOWN外),或实例在down-after-milliseconds毫秒内无回复(超时),Sentinel就会认为该实例主观下线(SDown)。
当一个Sentinel将一个主服务器判断为主观下线后,Sentinel会向同时监控这个主服务器的所有其他Sentinel发送查询命令。判断其他sentinel去尝试连接master,根据结果判断它们是否也认为主服务器下线。
如果达到Sentinel配置中的quorum数量的Sentinel实例都判断主服务器为主观下线,则该主服务器就会被判定为客观下线(ODown)。
当一个主服务器被判定为客观下线后,监视这个主服务器的所有Sentinel会通过选举算法(raft),选出一个Leader Sentinel去执行failover(故障转移)操作。
3.2.4、sentinel的leader选举
选举使用的是raft算法,raft算法就是专门来解决分布式一致性问题的一种算法。
Raft描述的节点共有三种状态:Leader, Follower, Candidate。Raft协议将时间切分为一个个的Term(任期),可以认为是一种“逻辑时间”。
raft算法
Raft采用心跳机制触发Leader选举,系统启动后,全部节点初始化为Follower,term为0。
节点如果收到了RequestVote或者AppendEntries,就会保持自己的Follower身份。
节点如果一段时间内没收到AppendEntries消息,在该节点的超时时间内还没发现Leader,Follower就会转换成Candidate,自己开始竞选Leader。
一旦转化为Candidate,该节点立即开始下面几件事情:
- 1、增加自己的term
- 2、启动一个新的定时器
- 3、给自己投一票
- 4、向所有其他节点发送RequestVote,并等待其他节点的回复
如果在计时器超时前,节点收到多数节点的同意投票,就转换成Leader。同时向所有其他节点发送AppendEntries,告知自己成为了Leader。
每个节点在一个term内只能投一票,采取先到先得的策略,Candidate前面说到已经投给了自己, Follower会投给第一个收到RequestVote的节点。
Raft协议的定时器采取随机超时时间,这是选举Leader的关键,在同一个term内,先转为Candidate的节点会先发起投票,从而获得多数票。
选举流程
- 1、某Sentinel认定master客观下线后,该Sentinel会先看看自己有没有投过票,如果自己已经投过票给其他Sentinel了,在一定时间内自己就不会成为Leader。
- 2、如果该Sentinel还没投过票,那么它就成为Candidate
- 3、Sentinel需要完成几件事情
- 更新故障转移状态为start
- 当前epoch加1,相当于进入一个新term,在Sentinel中epoch就是Raft协议中的term
- 向其他节点发送 is-master-down-by-addr 命令请求投票。命令会带上自己的epoch。
- 给自己投一票(leader、leader_epoch)
- 4、当其它哨兵收到此命令时,可以同意或者拒绝它成为leader(通过判断epoch)
- 5、Candidate会不断的统计自己的票数,直到他发现认同他成为Leader的票数超过一半而且超过它配置的quorum,这时它就成为了Leader。
- 6、其他Sentinel等待Leader从slave选出master后,检测到新的master正常工作后,就会去掉客观下线的标识。
3.2.5、sentinel的故障转移
选举之后,新的master出现了,那么就需要将原本指向旧master的从服务器,指向新的master。
- 1、 它会将失效Master的其中一个Slave升级为新的Master , 并让失效Master的其他Slave改为新的Master
- 2、当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master
- 3、Master和Slave服务器切换后,Master和Slave的redis.conf和sentinel.conf配置文件会被修改,就是指向新的master.
4、小结
Redis的主从+哨兵模式,在我们数据量比较小的时候,还是个比较实用的高可用方案。它的优势有哪些呢?
- 1、主服务器负责写,从服务器负责读,实现了读写分离。
- 2、既然读写分离了,通常Redis的读请求远大于写请求,所以多个从节点提升了读性能和读的吞吐量。
- 3、主从复制解决的主从数据一致性问题
- 4、从服务器是主服务器的一个备份,相当于多了一层备份。
- 5、主机宕机,从服务器可读不可写,从服务器不可切换成主服务器,而哨兵模式解决了该问题。
除了总的存储数据受单机限制,主从+哨兵已经可以保证高性能,高可用了。
5、相关文章
本人还写了Redis的其他相关文章,有兴趣的可以点击查看!
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)