python技术面试题(四)--redis持久化

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: python技术面试题(四)--redis持久化


python技术面试题(四)

1.redis持久化

众所周知,redis是内存型的存储数据库。效率高的同时,也有一个弊端不可忽视,那就是数据安全问题。此处安全指的是数据丢失,并非其他。我们将数据都存储在内存中,如果发生宕机等意外情况导致redis重启,那么内存中的数据会全部丢失,多么可怕的一件事。那么我们怎么解决呢?答案就是数据的持久化。

数据的持久化有两种方式:RDB和AOF两种方式。一开始你会觉得两个名字很难记,其实了解过你就会发现其实这两种方式都是以相关数据存储文件的后缀名命名的。

1.1RDB

首先说一下RDB方式。RDB是将内存中所有的数据都持久化到硬盘中,这个过程还有一个名词,那就是『快照』。Redis默认将我们的数据保存在当前进程目录的 dump.rdb文件中,看一下后缀名,再看一下这个方式名,是不是发现了什么呢?了解完之后,要关注的就是怎么实现的问题的了。

redis启动的时候是会自动读取RDB快照文件的,这也 就是为什么RDB可以解决数据的持久化。

方式一:SAVE和BGSAVE命令

这种方式是让我们手动的进行快照操作。他俩的区别就是SAVE命令快照,会阻塞后来客户端的请求;而BGSAVE命令则是异步的方式进行快照的。区别显而易见,SAVE命令会打断正在进行的操作,如果数据超多,这是一种损失,所以必须减少其使用,如果必须使用,那么可以选在访问量极少的时间段。BGSAVE则可以一边接受客户端请求,一边快照,不会对网站造成什么损失。

方式二:自己配置快照条件

# 900的单位是s,1是被更改的键的个数。这句命令的意思就是,900s内被更改的键的个数大于1的时候,自动进行快照操作。
save 900 1
# 指定快照文件的文件名,这个就不要写其他的了
dbfilename dump.rdb
# 指定快照文件存储路径
dir ./

配置文件在redis.conf这个文件中。

方式三:执行flushall命令

这个命令进行快照操作有一个前提,那就是我们像方式二中配置了快照的设置。当我们使用了 flushall这个命令,Redis会清除数据库中所有的数据,而且会执行一次快照操作。

如果没有设置save,是不会进行快照操作的!!!!

1.1.1快照过程

在redis执行快照的时候,其实先使用了 fork函数。这个函数执行的时候有个特点,就是我们我们备份数据的时候,如果又有数据写入,后面的数据是不会备份的。意思就是我们执行快照的时候,其实保存的是执行 fork函数那一刻的所有数据。然后父进程继续处理客户端的相关请求,子进程将要保存的数据写入硬盘的临时文件,只有在子进程将所有的数据写完之后,才会将这个文件替换旧的RDB文件。这样就完成了一次快照操作。

1.2AOF

简单的说一下AOF方式,它不会像RDB方式全量的将数据持久化至硬盘,而是只保存执行过的命令。下次启动的时候,其实就是将所有的命令再执行一遍。下面仍然是最关心的如何实现的问题。

我们需要在配置文件中将 appendonly设置为 yes 。开启之后Redis每执行一条写操作(注意是写入的命令),就会将这个命令记录到 appendonly.aof文件中,看这个名字,是不是同样很熟悉,像不像本小节的标题呢?

在AOF中有一个概念,叫做文件重写。当我们多次设置同一个value的时候,redis中只会有最后一次的设置结果,那么前几次的操作,就完全没有必要记录下来再次执行了,会严重影响效率,所以就涉及到了AOF重写。重写就是将没用的命令删除的一个过程。

我们可以让Redis自动进行重写操作,那就是现在配置文件中进行如下设置:

# 目前的AOF文件的大小超过上一次重写时的AOF文件的百分之多少时再次进行重写,如果之前没有重写过,则以启动时AOF文件大小为依据。
auto-aof-rewrite-percentage 100
# 当AOF文件的大小大于64MB时才进行重写,因为如果AOF文件本来就很小时,有几个无效的命令也是无伤大雅的事情。
auto-aof-rewrite-min-size 64mb

所有的东西都介绍完了,我们当然要讲一下如何将数据同步到硬盘中。

AOF文件我们可以设置同步到硬盘的时间,以减少数据的丢失。

# 实时的写入硬盘
appendfsync always
# 每秒写入一次
appendfsync everysec
# 不主动写入
appendfsync no

1.3重要

重启服务的时候一定要加上配置参数:

redis-server <redis.conf文件的路径>


参考文献:

https://blog.csdn.net/wzqzhq/article/details/64920996

https://blog.csdn.net/dlf123321/article/details/52881828

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
22 1
|
4天前
|
存储 缓存 运维
软件体系结构 - 缓存技术(5)Redis Cluster
【4月更文挑战第20天】软件体系结构 - 缓存技术(5)Redis Cluster
136 10
|
6天前
|
前端开发 测试技术 C++
Python自动化测试面试:unittest、pytest与Selenium详解
【4月更文挑战第19天】本文聚焦Python自动化测试面试,重点讨论unittest、pytest和Selenium三大框架。unittest涉及断言、TestSuite和覆盖率报告;易错点包括测试代码冗余和异常处理。pytest涵盖fixtures、参数化测试和插件系统,要注意避免过度依赖unittest特性。Selenium的核心是WebDriver操作、等待策略和测试报告生成,强调智能等待和元素定位策略。掌握这些关键点将有助于提升面试表现。
20 0
|
6天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
13 0
|
7天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
13 1
Flask框架在Python面试中的应用与实战
|
8天前
|
数据可视化 Python
Python模型评估与选择:面试必备知识点
【4月更文挑战第17天】本文深入探讨了Python模型评估与选择在面试中的关键点,包括性能度量、过拟合与欠拟合识别、模型比较与选择、模型融合和偏差-方差权衡。强调了避免混淆评估指标、忽视模型验证和盲目追求高复杂度模型的常见错误,并提供相关代码示例,如交叉验证、网格搜索和超参数调优。通过理解这些概念和技巧,可在面试中展示出色的数据科学能力。
31 12
|
8天前
|
机器学习/深度学习 搜索推荐 Python
Python特征工程面试:从理论到实践
【4月更文挑战第17天】本文探讨了Python在数据科学面试中的特征工程,涵盖基础概念如特征选择和提取,实战技能如缺失值和异常值处理,以及特定场景应用。强调避免过度依赖单一方法,忽视数据分布和相关性,以及保持特征工程的可解释性。提供代码示例展示了处理缺失值、标准化、特征选择和异常值检测的基本操作。建议结合业务理解,灵活运用多种方法并注重模型解释性。
23 9
|
8天前
|
数据采集 机器学习/深度学习 数据挖掘
Python数据清洗与预处理面试题解析
【4月更文挑战第17天】本文介绍了Python数据清洗与预处理在面试中的常见问题,包括Pandas基础操作、异常值处理和特征工程。通过示例代码展示了数据读取、筛选、合并、分组统计、离群点检测、缺失值和重复值处理、特征缩放、编码、转换和降维。强调了易错点,如忽视数据质量检查、盲目处理数据、数据隐私保护、过度简化特征关系和忽视模型输入要求。掌握这些技能和策略将有助于在面试中脱颖而出。
24 8
|
8天前
|
缓存 自然语言处理 数据处理
Python自然语言处理面试:NLTK、SpaCy与Hugging Face库详解
【4月更文挑战第16天】本文介绍了Python NLP面试中NLTK、SpaCy和Hugging Face库的常见问题和易错点。通过示例代码展示了如何进行分词、词性标注、命名实体识别、相似度计算、依存关系分析、文本分类及预训练模型调用等任务。重点强调了理解库功能、预处理、模型选择、性能优化和模型解释性的重要性,帮助面试者提升NLP技术展示。
28 5
|
8天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
133 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答

热门文章

最新文章