过期时间:
1. volatile -lru:
allkeys -lru:
lru:最近最少使用
volatile:设置了过期时间的key
allkeys:所有的key
2. volatile -random:
allkeys -random:
random:随机移除
volatile:设置了过期时间的key
allkeys:所有的key'
3. volatile -ttl:移除规定时间内更早过期的那个key
redis的持久化策略
AOF+RDB
RDB:在指定的时间内将内存中的数据写入磁盘(Snapshot快照);恢复时将 dump.rdb文件读取到内存中
原理***:
Redis会单独创建一个子进程(fork)来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束后,再用这个临时文件替换上次持久化好的文件。 [适合大规模数据恢复,注意考虑内存2倍膨胀]
(整个过程中,主进程不进行任何IO操作,这就确保了极高的性能)
【如果进行大规模数据恢复,并且对数据恢复的完整性不是很敏感,那么RDB方式比AOF方式更高效;但是最后一次持久化后的数据可能丢失】
---
RDB的持久化策略分为主动和被动;
- 主动:save【全阻塞】 BGsave【异步操作】
- 被动:【默认】900s触发1次;300s触发10次;60s触发1万次
fork也有持久化策略:
- 主动:save【只管保存,全部阻塞】 BGSAVE【异步操作,可以通过lastSave命令获取最后一次成功执行快照的时间】 flush操作 shutDown操作
- 被动: save""
---
AOF是什么
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可用写文件,Redis启动之初会读取文件重新构建数据(根据日志文件的内容将指令从前到后执行一次)
如果AOF和RDB同时存在;恢复策略走AOF {./redis-check-aof --fix appendonly.aof}
配置文件:
appendfsync同步策略
always:同步持久化 每次发生数据变更会被立即记录到磁盘;性能较差但数据完整性比较好(通过io写入到磁盘)
everysec:出厂默认推荐,异步操作,每秒记录【如果一秒内宕机,数据丢】(先存入内存,通过命令写入磁盘中)
---
主从配置
【一主二从的情况】
主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,
- 从机配置:salveof 主机IP 主机端口号
查看当前主机状态 info replication
- 当配置长主从模式时,从机只能读取【读写分离】
- 从机断开,回来之后全局更新(shutDown redis-server ./redis-cli) 脱离组织的主机 哨兵
- 增加更新:每次更新的内容是添加的内容
- 全局更新:将所有的内容进行添加
- 当主机死亡之后,从机会原地待命,不会翻身做主,主机回来还是主机
【薪火相传】
一个传一个 A-->B---->C
1. 好处:出去中心化
2. 弊端:可能出现数据的失真
中间断开,此时就不能交互数据
【slaveof no one】反客为主(手动)
- 当主机断开之后,想让从机上位(slaveof no one -->从机会变成主机,但不会影响其他机器)
【哨兵模式】
1. 配从不配主
2. 从库备份:slaveof 主库 ip 主库端口
3. 修改的内容:pid 端口 日志 dump文件
4. 先设置值,再连从库---->从是否能拿到 全备份
【{哨兵(sentinel)}】
进行投票选取新主机
sentinel monitor被监控数据库名称(自己起自己)127.0.0.1 6379 1
redis的事物
可以一次执行多个命令,本质是一组命令。一个事物中的所有
|
|