作为内存数据库,REDIS目前有没有成熟的持久化方案,如果量大的话,不能都用内存是吧,另外大家一般都用哪些nosql啊,比如mongodb, ssdb, cassandra,es等,使用得多吗?谢谢。
redis目前支持两种数据持久化(备份)方式:
第一种是通过rdb文件实现备份
第二种使用aof文件实现备份
1、rdb备份(高效,有数据丢失)
redis服务默认的自动备份方式,在服务启动时,就会自动从dump.rdb文件中去加载数据。
有自动和手动两种方式:
自动备份方式:
修改配置文件redis.conf:
save 900 1
save 300 10
save 60 10000 //每60秒检测,超过10000个键被更改则使用bgsave命令进行快照
dir /usr/local/redisdata/ # 备份文件存储路径,磁盘满的情况下,可以通过config set在线更改路径,执行执行bgsave命令
dbfilename dump.rdb # 指定快照文件名
手工备份,直接执行命令:
SAVE //已经废弃,使用主进程将当前数据库快照到dump文件,会阻塞主进程
BGSAVE //主进程会fork一个子进程来进行快照备份
恢复:
关闭服务,将原备份文件拷贝回save备份目录
启动
redis-server /usr/local/redis/redis.conf
登录查看数据是否恢复
2、aof备份(实时持久化,保持数据完整性)
AOF即Append-only file
服务会将每个收到的写命令通过write函数追加到文件中。
redis服务默认是关闭aof。
开启:
修改配置redis.conf:
appendonly yes
appendfilename appendonly.aof
dir /usr/local/redisdata/
或者执行config set appendonly yes
AOF是备份所有的历史记录以及执行过的命令,和mysql binlog很相似,在恢复时就是重新执次一次之前执行的命令。
1、所有写入命令追加到aof_buff中
2、aof缓冲区根据对应的同步策略向硬盘同步
3、定期对aof文件进行重写,达到压缩的目的
4、redis重启时,加载aof文件进行恢复
aof_buff同步策略三选一:
appendfsync always //收到写命令后就立即写入磁盘,效率最差,数据丢失最少,一般的sata盘只能支持几百的QPS
appendfsync everysec //默认配置,每秒写入磁盘一次,效率与效果居中,理论上宕机丢失1秒(其实是最多两秒)的数据
appendfsync no //完全依赖OS,效率最佳,数据没法保证.
另外,目前redis没有实现数据的冷热分离,所有的数据都是存放在内存中。有些大厂已经开始研究和实践redis+某种高性能存储引擎+ssd的方式实现冷热分离,以降低纯内存的成本,但是目前都还不太成熟。
nosql根据不同的用途,有不同的适用场景,你说的这几种都比较流行,比如redis做缓存,mongodb做文档存储,cassandra做大数据分析,es做日志分析搜索等。
收起