资讯专栏INFORMATION COLUMN

「Python 面试」第六次更新

Render / 2784人阅读

摘要:说一下是怎样将数据持久化的为某一时刻下的数据库里的内容拍一张照片快照,并将该照片写进磁盘中,实现数据持久化。通过写命令,将数据追加到文件末尾,实现数据持久化。至此,有关数据库知识点的面试题就已告一段落,下次更新网络通信方面面试题。

1.说一说 Redis 是什么

Redis 是一种「Key-Value」的内存型、非关系型数据库,属于 NoSQL 的一种。

Redis 的读写速度特别快,特别适合读写频繁的场景。

Redis 支持主从复制,支持数据持久化。

2.知道 Redis 有哪些常用数据类型吗

String

List

Hash

Set

Zset

3.说一下 Redis 用来做什么

利用 String,可以很容易实现「计数器」功能。

利用 List ,可以实现「粉丝列表」功能。

利用 Hash,可以实现「浏览记录」功能。

利用 Set 的并集、合集特性,可以实现「共同好友」功能。

利用 Zset 的排序特性,可以实现「排行榜」功能。

由于 Redis 的高速读写特性,可以充当「缓存」。

充当「消息队列」,如 Celery 中就是用 Redis 充当中间人,生产者和消费者都是向 Redis 中发布任务和接受任务。

4.说一下 Redis 是怎样将数据持久化的

RDB

为某一时刻下的 Redis 数据库里的内容拍一张照片(快照),并将该照片写进磁盘中,实现数据持久化。

当数据库崩溃时,会丢失最后一次快照的内容。

如果数据库内容过大,那么生成快照时间会很长。

AOF

通过写命令,将数据追加到(Append Only File)文件末尾,实现数据持久化。

但是使用 AOF,需要解决同步问题。

因为文件的写入不会立马执行,而是先将写入的内容放置「缓存区」,等待操作系统决定何时将缓存区的内容写入磁盘。

Redis 拥有三种同步策略:Always、Everysec、No。

绝大多数情况下都是使用第二种策略,每隔一秒钟同步一次,这样就算数据库崩溃也只会损失一秒钟的数据。

而其他两种策略,要么对数据库的压力过大,过多降低数据库的性能,要么具有丢失数据量过大的风险。

5.了解 Redis 主从复制吗

使用slaveof host port设置主从服务器。

Redis 的主从服务器有点像树结构,从服务器只能有一个主服务器。

Redis 不支持「主-主复制」。

Redis 主从复制通过利用 RDB 快照持久化的特性,将某一时刻下主服务器的内容生成快照,然后发送给从服务器,并利用缓存区保存在这期间里进行的「写命令」,等待快照发送完毕之后,再将写命令发送给从服务器。

从服务器在接收到快照之后,会将自身的数据全部丢弃,载入快照里的数据,载入完毕之后,再执行主服务器的写命令。

6. 说一下 Redis 和 Memcache 的区别
Redis Memcache
支持 String、List、Hash、Set、Zset 只支持 String
支持数据持久化 不支持
支持事务 不支持
支持主从复制 不支持
支持分布式 不支持
支持将数据交换到磁盘中 不支持
单进程、单线程 IO 多路复用 多线程、非阻塞 IO

总结为一点,只用得到 Redis 里的 String 类型存储数据时,使用 Memcache。

除此之外,使用 Redis。

7. 了解 Redis 是怎样保证热数据的吗

Redis 是内存型的数据库,可以设置最大内存,当内存不够时,会使用「数据淘汰策略」,删除部分数据。

但是并不是针对 Redis 里所有的数据,而是抽样选取小部分「数据集」。

策略 描述
Volatile-LRU 从设置了过期时间的「数据集」中,删除最近、最少使用的数据集
Volatile-TTL 从设置了过期时间的「数据集」中,删除即将要过期的数据。
Volatile-Random 从设置了过期时间的「数据集」中,随机删除数据。
Always-LRU 从「数据集」中删除最近、最少使用的数据。
AllKeys-Random 从「数据集」中随机删除数据。
Noeviction 禁止删除数据。

当 Redis 作为缓存使用时,为了保证缓存数据都是「热数据」,可以将 Redis 的最大内存设置为缓存的大小,并使用 Always-LRU 策略。将最近最少使用的数据舍弃,保证缓存里热数据的「高命中率」。


至此,有关「数据库」知识点的面试题就已告一段落,下次更新「网络通信方面」面试题。

所有内容均已上传至「GitHub」仓库,欢迎大家点击原文查阅。

欢迎大家关注个人微信公众号「PythonDeveloper」,所有内容第一时间更新于公众号

所有内容均为本人一点一点敲出来的,难免会有错字、语句不通顺的地方,欢迎大家指正。

因本人水平有限,文章内容难免会有出错、遗漏,欢迎大家评论指出,一起进步。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45261.html

相关文章

  • Python 面试六次更新

    摘要:说一下是怎样将数据持久化的为某一时刻下的数据库里的内容拍一张照片快照,并将该照片写进磁盘中,实现数据持久化。通过写命令,将数据追加到文件末尾,实现数据持久化。至此,有关数据库知识点的面试题就已告一段落,下次更新网络通信方面面试题。 1.说一说 Redis 是什么 Redis 是一种「Key-Value」的内存型、非关系型数据库,属于 NoSQL 的一种。 Redis 的读写速度特别快,...

    RichardXG 评论0 收藏0
  • Promise对象

    摘要:对比回调函数和暂时不管是什么,先看一下下面的代码,看一看的好处。回调函数执行一次首先,定义一个回调函数,调用一次,看看这个代码的写法。上面的代码中,在方法中需要传递两个回调函数,这样看着会有点乱。 对比回调函数和Promise 暂时不管Promise是什么,先看一下下面的代码,看一看Promise的好处。需要特别说明的是,在这个对比的中,Promise和回调都没有考虑存在异常的情况。 ...

    琛h。 评论0 收藏0
  • Vue的缓存算法—LRU算法

    摘要:最近在看的源码,不得不说的是,的源码十分优雅简洁,下面就来分享下的缓存利用的算法算法。关于算法的具体流程,可以来看下这个,这个可视化过程,模拟了算法进行调度的过程。 最近在看Vue的源码,不得不说的是,Vue的源码十分优雅简洁,下面就来分享下Vue的缓存利用的算法LRU算法。 LRU算法 LRU是Least recently used的简写,主要原理是根据历史访问记录来淘汰数据,说白了...

    elina 评论0 收藏0
  • Tools - 收藏集 - 掘金

    摘要:个高级多线程面试题及回答后端掘金在任何面试当中多线程和并发方面的问题都是必不可少的一部分。默认为提供了年杭州面试经历掘金想换个环境试试觉得做的不是自己想要的。源码网站安居客项目架构演进掘金本文已授权微信公众号独家发布。 15 个高级 Java 多线程面试题及回答 - 后端 - 掘金在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职...

    KitorinZero 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<