zoukankan      html  css  js  c++  java
  • 【Redis】Redis持久化

    Redis数据持久化

    Redis的特性: 易扩展,大数据高性能,多样灵活的数据模型,受限内存

    Redis默认端口: 6379

    Redis数据持久化分为有两种: 

    RDB: 每隔一段时间就把内存数据写入磁盘,如果是备份的话就反过来,从文件中把数据读到内存中。在进行持久化的时候,会由父进程fork出一个子进程,子进程会把数据保存到一个临时文件中,等到持久化完成,就用临时文件替换上次持久化的文件。这一过程中父进程不进行任何的IO流操作

    如何触发RDB的操作?

     (1)直接输入save

    (2)flush操作

    (3)触发redis.conf中的配置   save seconds changes

    • 900s内有一次修改,300s内有10次修改,60s内有10000次修改。都会触发RDB。如果不想使用策略可以save ""

    AOF: append only file 是一种只追加文件,用日记的形式来记录每一个写操作,将Redis执行的写指令记录下来。改文件只允许追加,不允许修改。当AOF文件到达一定大小(文件大于上一次rewrite文件的100%,并且大于64M)的时候会进行rewrite。rewrite是指把aof文件的内容进行压缩,指保留可以回复数据的最小指令,可以使用bgrewriteaof。重写的原理也是先写临时文件最后再替换,重写的时候并没有读取旧的aod文件,而是把内存中的数据用命令又重写了一份保存到新的AOF文件中。

    AOF的fsync策略

    Always:同步持久化,每次数据发生变更的时候就会记录到磁盘中,性能较差数据完整

    Everysec:默认设置,异步操作,每秒就记录一次。但是如果宕机会损失一秒的操作

    no: 不持久化

    RDB和AOF的优缺点?

    RDB:恢复速度快,但是可能会丢失数据

    AOF:数据完整性高,但是恢复速度慢。具有重写机制,以至于AOF文件不至于过大

    当数据量大并且不是特别关注数据完整性的时候,选择rdb。对数据完整性要求较高的时候,选择AOF。

    RDB和AOF是否可以共存

    可以,但是重启redis的时候默认会先找AOF文件恢复

    Redis缓存过期策略:

    Maxmemory-policy :redis容量超过设置值的时候

    1. Volatile-lru: IRU算法移除key,只针对设置过期时间

    2. Allkeys-LRU: 对于所有的key用LRU算法移除

    3. Volatile-ramdon: 对设置了过期时间的,进行随机删除

    4. allkeys-ramdon:所有键值对进行随机删除

    5. volatile-ttl:最小ttl进行删除

    6. noeviction: 不进行移除,针对写操作,只是返回错误信息

    noeviction [ɪ'vɪkʃn]

    知识点小记:

    • 当持久化文件错误的时候,可以用工具修复

        redis-check-aof

        redis-check-dump 

    • redis日志有4个级别:debug verbose notice warning

    • 默认最大连接数maxclient 10000 
  • 相关阅读:
    Effective Java 的笔记(二)
    设计模式系列 装饰模式
    一道多线程题目的解决方案
    Effective Java 的笔记(一)
    Java 并发编程实践
    【转】微博技术底层架构的实现
    Head First JavaScript 笔记
    JVM 学习笔记 类的加载和执行
    背包问题
    Oracle 序列号通过定时任务重置
  • 原文地址:https://www.cnblogs.com/amberbar/p/10147125.html
Copyright © 2011-2022 走看看