【面试八股总结】Redis持久化

        Redis 实现了数据持久化的机制,这个机制会把数据存储到磁盘,这样在 Redis 重启就能够从磁盘中恢复原有的数据。 Redis 共有三种数据持久化的⽅式:

  • AOF 日志:每执行一条写操作命令,就把该命令以追加的方式写入到⼀个文件里;
  • RDB 快照:将某一时刻的内存数据,以二进制的方式写入磁盘;
  • 混合持久化方式:Redis 4.0 新增的方式,集成了 AOF 和 RBD 的优点。

一、AOF日志

        AOF以日志的形式记录服务器所处理的每一个写操作,Redis服务器启动之初,会读取该日志来重新构建数据库,以保证启动后的数据库是完整的。

注意:AOF只会记录写操作命令,读操作命令是不会被记录的。

        AOF日志是写后日志,"写后" 的意思是 Redis 是先执行命令,把数据写入内存,然后才记录日志。Redis是内存和日志(写后日志),MySQL是磁盘数据和日志(写前日志)。

写后日志过程
### 关于2023年Redis的Java面试八股文 #### Redis 的基本概念和特性 Redis 是一种基于键值对存储的数据结构服务器,支持多种数据类型的持久化操作。其高性能、丰富的数据类型以及灵活的应用场景使其成为分布式环境中不可或缺的一部分[^1]。 #### 单节点Redis的局限性与解决方案 单节点Redis的并发处理能力存在一定的上限。为了突破这一瓶颈并提升系统的整体性能,通常会采用主从复制的方式构建集群架构来分担读压力,进而达到读写分离的效果。 #### 主从复制机制详解 在Redis中设置多个slave实例作为master副本,当客户端发起GET请求时优先由slaves响应;而SET命令则始终交由master执行后再同步给各个slave。这种设计不仅提高了可用性和容错率,还有效降低了单一节点负载过高的风险。 #### 数据一致性保障措施 针对可能出现的数据不一致情况,可以通过配置合理的replication backlog大小及时重传丢失部分日志记录,确保所有从库能够追赶上主库的状态变化。此外,在网络分区发生期间应采取相应的保护策略防止脑裂现象的发生。 #### 高效利用内存空间的方法 合理规划key的有效期(TTL),定期清理无用对象以释放更多资源供其他业务逻辑调用。对于大容量集合类value建议拆分为若干个小批量保存,减少一次性加载带来的开销。 ```java // 设置 key-value 并指定存活时间 (单位秒) jedis.setex("myKey", 60, "hello world"); // 获取剩余生存期限 long ttl = jedis.ttl("myKey"); System.out.println(ttl); ``` #### 使用Pipeline优化批处理效率 通过组合多条指令成批次发送至服务端解析执行可显著降低RTT延迟影响,极大程度上加快了连续I/O密集型任务的速度表现。 ```java try(Jedis jedis = new Jedis("localhost")) { Pipeline pipeline = jedis.pipelined(); for(int i=0;i<1000;++i){ String k="key"+i; String v="val"+i; pipeline.set(k,v); // 批量set操作加入管道队列等待统一提交 } List<Object> results=pipeline.syncAndReturnAll(); // 同步获取返回结果集 } ``` #### Lua脚本增强原子事务控制力 借助内置解释器运行自定义lua函数完成复杂条件判断下的增删改查动作,保证整个过程中的线程安全属性不变形。 ```lua -- lua 脚本用于实现乐观锁功能 local current_value = redis.call('get', KEYS[1]) if not current_value or tonumber(current_value) >= ARGV[1] then return nil; -- 如果当前库存不足,则直接退出 else local result = redis.call('incrby', KEYS[1], -ARGV[1]); return result; -- 返回更新后的数值表示成功扣减数量 end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值