基本数据类型以及操作
基本数据类型: string, hash, list, set, sort set
TO DO: 总结数据操作及应用场景
持久化
两种方式: RDB 和 AOF
选择和使用
(1)只做缓存: 可以都不同
(2)同时开启两种方式: 重启时首先加载AOF文件,因为AOF文件比RDB完整
(3)不要只用AOF,RDB做后备用途。在Slave上持久化RDB文件,15分钟备份一次,只保留save 900 1 这条规则
(4)启动AOF,最坏丢失不超过2秒数据。 a.带来一定的IO b.rewrite 阻塞写到新文件 可以将64M 改写为5G以上
(5)不使用AOF 仅靠Master-Slave Replication 实现高可用性,省掉IO,但是如果Master/Slave同时当掉,丢失十几分钟数据,启动脚本时比较 Master/Slave中较新的RDB文件载入。(新浪架构)
启动时先读AOF?
RDB
dump.rdb
持久化可以在指定的时间间隔内生成数据集的时间点快照
默认快照触发条件:
- 1分钟改1万次
- or 5分钟改10次
- or 15分钟改1次
RDB 的优点:
(1)适合大规模数据恢复
(2)对数据完整性和一致性要求不高
RDB 的缺点:
(1) 丢失最后一次保存的数据
(2)本身数据集大,fork() 可能会非常耗时,造成服务器在某某毫秒内停止处理客户端
AOF (Append only log)
以日志的形式来记录每个写操作,并在服务器启动时,通过重新执行这些命令来还原数据集。 最多丢失一秒数据。
redis.conf -> appendonly.aof
AOF 启动 : redis-server /../redis_aof.conf
AOF 修复 : redis-check-aof --fix appendonly.aof (网络故障等)
相关配置
No-appendfsync-on-rewrite no
auto-aof-rewrite-min-percentage 100
auto-aof-rewrite-min-size 64mb (默认)
Appendfsync
- Always : 同步持久化,每次发生数据变更立即记录到硬盘,性能差,数据完整性好
- Everysec : 默认配置。异步操作,每秒记录一次,有可能1秒数据丢失
- No
Rewrite
- AOF文件追加会越来越大,为避免这种情况,新增重写机制,当AOF文件大小超过设定阈值,Redis会启动AOF文件内容压缩,只保留恢复数据的最小指令集,可以使用bgrewriteaof
- fork一条新进程 将整个内存钟数据库内容用命令的形式重写一个新的aof文件
- 记录上一个重写AOF文件大小,默认配置是当AOF文件大小是上次rewrite后的一倍且文件大于64M时触发 redis.conf中(auto-aof-rewrite-min-percentage 100 auto-aof-rewrite-min-size 64mb)
AOF优点
(1)配置灵活:每秒同步,每修改同步,不同步
AOF缺点
(1)相同数据aof文件大于rdb
(2)AOF运行效率慢于rdb,不同步效率和rdb相同
网友评论