当前位置: 首页 > 后端技术 > Python

《Python访谈》第六次更新

时间:2023-03-26 16:11:29 Python

1.告诉我Redis是什么。Redis是内存中的“Key-Value”非关系数据库,是NoSQL的一种。Redis的读写速度极快,特别适合读写频繁的场景。Redis支持主从复制和数据持久化。2、你知道Redis有哪些常见的数据类型吗?StringListHashSetZset3、说说Redis是干什么用的。使用String,可以轻松实现“计数器”功能。使用List,可以实现“粉丝列表”功能。使用Hash,可以实现“浏览历史”的功能。利用Set的并集和集合特性,可以实现“互为好友”的功能。利用Zset的排序特性,可以实现“排行榜”功能。由于Redis高速读写的特点,可以起到“缓存”的作用。充当“消息队列”。例如,Redis在Celery中用作中介。生产者和消费者都向Redis发布和接受任务。4.说说Redis是如何持久化数据的。RDB在某个时刻对Redis数据库中的内容进行拍照(快照),并将照片写入磁盘,实现数据持久化。当数据库崩溃时,最后一个快照的内容就会丢失。如果数据库内容太大,生成快照的时间会很长。AOF通过编写命令将数据追加到文件末尾(AppendOnlyFile),实现数据持久化。但是使用AOF,需要解决同步问题。因为写入文件不会立即执行,而是先将写入的内容放入“缓存区”,等待操作系统决定何时将缓存区的内容写入磁盘。Redis有三种同步策略:Always、Everysec、No。大多数情况下使用第二种策略,每秒同步一次,这样即使数据库崩溃,也只会丢失一秒的数据。另外两种策略要么对数据库造成太大压力,过多降低数据库的性能,要么存在丢失大量数据的风险。5、你了解Redis主从复制吗?使用slaveof主机端口设置主从服务器。Redis的主从服务器有点像树形结构,从服务器只能有一个主服务器。Redis不支持“master-master复制”。Redis主从复制利用RDB快照持久化的特性,在某个时刻生成主服务器内容的快照,然后发送给从服务器,并使用缓存保存期间执行的“写命令”这段时间,等待快照发送完成后,向从服务器发送写命令。从服务器收到快照后,会丢弃自己所有的数据,加载快照中的数据,加载完成后执行主服务器的写命令。6.说说Redis和Memcache的区别RedisMemcache支持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从“Dataset”中随机删除数据。Noeviction禁止数据删除。当Redis用作缓存时,为了保证缓存的数据是“热数据”,可以将Redis的最大内存设置为缓存的大小,并使用Always-LRU策略。丢弃最近最少使用的数据,保证缓存中热点数据的“高命中率”。至此,关于“数据库”知识点的面试题就告一段落了,下次更新“网络通信”的面试题。所有内容已上传至“GitHub”仓库,欢迎点击原文查看。欢迎大家关注个人微信公众号“PythonDeveloper”,所有内容第一时间更新在公众号。所有的内容都是我自己一点一点打出来的。难免会有错别字,句子不流畅。欢迎指正。由于本人水平有限,文章内容难免有错漏之处。欢迎大家评论指出,共同进步。