创建RDB文件需要将server所有的数据库数据保存,其过程非常消耗资源和时间,所有server需要隔一段时间才创建一个新的RDB文件,也就是说,创建RDB文件不能执行的过于频繁,否则会严重影响server的性能
可能丢失数据
2. AOF 2.1 配置存储的是命令,而不是真实的数据
默认不开启
开启方式:
/etc/redis/redis.conf
改 appendonly no为 appendonly yes
改#appendfilename "appendonly.aof"为appendfilename "appendonly.aof"
sudo /etc/init.d/redis-server restart重启服务
2.1 原理每当有修改数据库的命令被执行的时候,server就会将执行的命令写到AOF文件的末尾
因为AOF文件里面存储了server执行过的所有数据修改的命令。所以给定一个AOF文件,服务器只要重新执行一遍AOF文件里面的所有命令,就可以达到还原数据的目的
2.2 优点用户可以根据自己的需要对AOF持久化进行调整,让Redis在遭遇意外停电停机时不会丢失任何数据,或者只丢失一秒的数据
2.3 策略编辑配置文件/etc/redis/redis.conf
appendfsync alwarys 服务器每写入一条命令,就将缓冲区里面的命令写入到硬盘里面,server就算意外停机,也不会丢失人格已经成功执行的命令 appendfsync everysec #(默认) server每一秒将缓冲区里面的命令写入到硬盘里面,服务器即使遭受意外停机,最多丢失一秒的数据 appendfsync no server不主动将命令写入硬盘。由操作系统决定何时将缓冲区里面的命令写入到硬盘里面,丢失命令数量不确定AOF中的冗余命令
为了让AOF文件的大小控制在合理范围,避免胡乱增长,redis提供了AOF重写功能,通过这个功能,server可以产生一个新的AOF文件
-- 新的AOF文件记录的数据库数据和原来的AOF文件记录的数据库数据完全一样
-- 新的AOF文件会使用尽可能少的命令记录数据数据,因此新的AOF文件的体积通常会小很多
-- AOF重写期间,服务器不会阻塞,可以正常处理客户端发送的命令请求
2.4 重写触发
client向server发送bgrewriteaof
127.0.0.1:6379> BGREWRITEAOF Background append only file rewriting started
修改配置文件让server自动执行bgrewriteaof命令
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
只有当AOF文件的增量大于100%时才进行重写,也就是大一倍的时候触发
3. 总结配置文件:/etc/redis/redis.conf
日志文件:/var/log/redis/reids-server.log
RDB文件:/var/lib/redis/dump.rdb
AOF文件:/var/lib/redis/appendonly.aof
3.1 RDB默认
dir /var/lib/redis
dbfilename dumo.rdb
save 900 1
save 300 10
save 60 10000
3.2 AOFappendonly yes
appendfilename "appendonly.aof"
appendfsync always
appendfsync everysec
appendfsync no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
定义
一个redis服务可以有多个该服务的复制品,这个redis称为master,其他复制品称为slaves
网络正常,master会一致将自己的数据更新同步给slaves,保持主从同步
只有master可以执行写命令,slave只能执行读命令
作用
分担了读的压力(高并发)
原理
从服务器执行客户端发送的读命令,比如GET、LRANGE、SMEMMVERS、HGET、ZRANGE等等,客户端可以连接slaves执行读请求,来降低master的读压力
2. 实现==法一(命令行)==
redis-server --port 630 --slaveof 127.0.0.1 6379
# 从server端 redis-server --port 6300 --slaveof 127.0.0.1 6379 # 从client端 redis-cli -p 6300 127.0.0.1:6300> keys * # 发现是复制了原6379端口的redis数据 127.0.0.1:6379> set sex man OK 127.0.0.1:6300> keys * 1) "name" 2) "sex" # 从server只能读取数据,不能写入`==法二(命令行)==
127.0.0.1:6379> keys * 1) "name" 2) "sex" 127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> slaveof 127.0.0.1 6379 # 切换为从server OK 127.0.0.1:6379> set newkey 456 (error) READONLY You can't write against a read only slave. 127.0.0.1:6379> keys * 1) "age" 2) "name" 3) "sex" 127.0.0.1:6379> slaveof no one # 切换回主server OK==法三(修改配置)==
vim /etc/redis/redis.conf