`
冰糖葫芦
  • 浏览: 297832 次
社区版块
存档分类
最新评论

Redis持久化机制比对

阅读更多
RDB
1.按特定的时间间隔来为数据集做快照
2.每次持久化都是将全量数据写入,而不是增量
3.每次写入时先将数据写入临时文件再替换掉原来的rdb文件
优点:
1.RDB是一个单独的文件,方便备份以及灾难恢复
2.写数据的模式为parent进程fork出一个子进程来进行磁盘io操作,而parent进程则不需要参与io操作
3.在数据比较大的情况下,启动速度比AOF快
缺点:
1.该模式下如果redis崩溃或者断电情况下可能有数据丢失;因为RDB是按照固定策略(如10秒刷入一次或者5分钟内写入100条数据则刷入磁盘等)来持久化的,那么则断电或者服务崩溃的情况下可能会丢失某一个时间段的数据
2.RDB在进程持久化时需要fork子进程来做磁盘操作,当数据集比较大时fork操作非常耗时,而且在fork过程中server是不能对client服务的;AOF虽然也需要fork但是我们可以设置多久重写一次日志

AOF
1.服务端为每个写操作记录日志;
2.如果服务重启,则根据所记录的log来进行重放来重建整个数据集。
3.日志的记录使用的是redis自己的协议,以追加的模式记录。
4.如果日志过大,redis可以在后台重写日志文件
优点:
1.可以设置各种fsync策略:从不刷数据、每秒同步一次(默认)、每次查询时同步,使用默认策略时可能会丢失最近一秒数据;当配置从不刷数据是由主线程在当前进程没有在刷数据时尽可能的来同步数据到文件,默认策略时会启动一个后台子线程来同步数据到文件
2.日志文件是追加模式,在断点后不牵扯到文件指针查找以及数据丢失问题;就算是因为某些原因(如磁盘写满等)导致日志文件最后一条只写入了一半也可以通过redis-check-aof工具来修复
3.当日志文件过大时,redis会自动重写日志文件(新的文件只保留创建当前数据集需要用到的命令);在重写的过程中同时还会往老的日志文件写入,一旦新的文件处理完成,redis会切换至新的文件
4.日志文件内容简单清晰,方便人工干预。例如我们调用flushall来刷新保存所有数据失败,如果此时日志文件没有其他命令写入,我们可以停掉server,删掉日志中最后一条错误,然后重新启动来恢复数据
缺点:
1.相同数据集下,AOF模式对应文件通常比RDB对应文件大
2.AOF在某些策略下比RDB模式慢。比如,将fsync设置为每秒一次时,性能仍然很高;将fsync禁用时,性能和RDB接近
3.有些命令可能在AOF下有问题,如BRPOPLPUSH命令在AOF下重新加载时重放失败

说明:
在同一个实例中可以同时使用RDB和AOF持久化机制;但是在服务启动时使用AOF机制来重建数据集(因为AOF最大程度的保留了数据的完整性)

选择:
1.如果要严格保证数据完整性,则RDB与AOF同时使用
2.如果可以容忍少量数据丢失,则使用RDB
3.不建议单独使用AOF(因为RDB备份更方便,重新启动相对较快;AOF可能有bug)

参考:
https://redis.io/topics/persistence

1
1
分享到:
评论

相关推荐

    redis-full-check

    Redis 是一个高性能的键值数据库,常用于存储缓存和数据持久化。在分布式系统中,数据一致性是至关重要的,因为它确保了系统中所有节点的数据状态保持同步。"redis-full-check" 提供了一种解决方案,专门针对Redis...

    nodejs-express-redis:nodejs + express4.x + redis的登录站点演示

    通过使用Redis,可以实现会话持久化,即使服务器重启,用户的登录状态也能保持。 4. **登录过程**:在用户尝试登录时,前端发送包含用户名和密码的请求到后端。Express接收到请求后,会将这些信息与Redis中的用户...

    毕业设计—基于express,redis,mongodb在线答题系统后台.zip

    在这个在线答题系统中,MongoDB可能用于存储用户信息、题目库、答案以及用户完成的测试记录等持久化数据。 项目的具体实现可能包括以下关键部分: - **用户模块**:处理用户的注册、登录、权限验证等功能。使用...

    shiro笔记整理.docx

    Shiro的`SessionManager`负责创建和管理会话,而`SessionDAO`负责将Session数据保存到持久化存储。在退出时,Shiro会调用Redis的`remove()`方法来移除对应的Session数据。 4. **缓存管理**: 在Shiro中,可以配置 ...

    SpringBoot整合Shiro完整源码(含sql脚本).rar

    4.1 会话持久化:使用Shiro的RedisSessionDAO,将session数据存储在Redis中,实现分布式会话管理。配置`sessionManager`以使用RedisSessionDAO,并设置相关参数,如超时时间、key前缀等。 4.2 缓存策略:Shiro的...

    java实现给手机发送验证码

    这可以通过Session、Redis缓存或其他持久化机制实现。 6. **安全措施**:为了防止恶意攻击,需要限制同一手机号在短时间内多次发送验证码。可以设置IP限流策略,或者针对每个手机号设置发送次数限制。 7. **用户...

    Springboot汽车配件销售管理系统(源码+数据库)131650

    SpringBoot汽车配件销售管理系统就是这样的一个解决方案,它基于Java技术栈,结合了Vue前端框架、IDEA开发环境、Redis缓存管理和MyBatis持久层框架,旨在为汽车配件销售提供一个全面、便捷的管理平台。 首先,系统...

    多浏览器兼容性测试平台xbrowser剖析.ppt

    5. **大图片读取处理**:针对大量图片数据,平台采用多级缓存和持久化存储策略,实现图片的懒加载,解决了Redis连接数有限和内存空间有限的问题。 6. **任务均衡负载**:平台采用抢占式调度策略,确保任务快速响应...

    python学校活动管理系统(源码+数据库)041157

    【Python学校活动管理系统详解】 本项目是一个基于Python的学校活动管理系统,...通过合理运用Java、Vue、Redis和MyBatis等工具和技术,实现了照片智能分发、人脸识别等功能,为现代校园信息化建设提供了有力支持。

    程序设计-“考试系统”——数据存储问题.pptx

    这可以借助缓存技术(如Redis)进行临时存储,待考试结束后再持久化到数据库中,以避免数据丢失。 5. **机器阅卷**:对于客观题,机器阅卷可以自动比对考生答案与标准答案,实现快速评分。这部分数据通常涉及比较和...

    毕业设计:基于SpringBoot+微信小程序+人脸识别实现的无证件化考试系统.zip

    3. **人脸识别技术**:人脸识别是一种生物特征识别技术,通过比对人脸图像特征来确认个人身份。在此系统中,人脸识别主要用于考生身份验证,确保考试的公平性。可能采用的人脸识别库如Face++、Dlib或OpenCV等,这些...

    java考试系统源码(学生,教师).zip

    一个典型的Java考试系统可能基于Spring Boot框架构建,利用MyBatis作为持久层框架,前后端分离的设计模式下,前端可能采用Vue.js或React.js等JavaScript库,后端API通过RESTful接口进行通信。数据库层面,MySQL是...

    登陆游戏大厅

    4. **数据持久化**:用户信息和游戏状态通常存储在数据库中,如MySQL、PostgreSQL或NoSQL数据库。需要设计合理的数据结构和索引,以便快速查询和更新。 5. **安全性**:登录过程必须防止SQL注入、XSS攻击等安全威胁...

    JavaWeb网上书店

    最后,用户确认购买时,Servlet会将session中的购物车信息转换为订单,然后持久化到数据库。 4. **数据库设计**: 为了支持上述功能,我们需要设计合理的数据库结构。通常,会包括用户表(User)、图书表(Book)...

    wolfking

    2. MyBatis:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它将SQL语句和Java代码解耦,使得SQL与Java代码更加清晰,...

    购物车的实现

    因此,现代的实现更倾向于将购物车数据存储在数据库或使用缓存服务(如Redis),以提高数据持久性和并发处理能力。 其次,防止网页返回不刷新重复提交,这是通过前端和后端协作来实现的。前端可以通过JavaScript...

Global site tag (gtag.js) - Google Analytics