Redis 是一种「Key-Value」的内存型、非关系型数据库,属于 NoSQL 的一种。python
Redis 的读写速度特别快,特别适合读写频繁的场景。git
Redis 支持主从复制,支持数据持久化。github
为某一时刻下的 Redis 数据库里的内容拍一张照片(快照),并将该照片写进磁盘中,实现数据持久化。面试
当数据库崩溃时,会丢失最后一次快照的内容。数据库
若是数据库内容过大,那么生成快照时间会很长。缓存
经过写命令,将数据追加到(Append Only File)文件末尾,实现数据持久化。服务器
可是使用 AOF,须要解决同步问题。微信
由于文件的写入不会立马执行,而是先将写入的内容放置「缓存区」,等待操做系统决定什么时候将缓存区的内容写入磁盘。网络
Redis 拥有三种同步策略:Always、Everysec、No。多线程
绝大多数状况下都是使用第二种策略,每隔一秒钟同步一次,这样就算数据库崩溃也只会损失一秒钟的数据。
而其余两种策略,要么对数据库的压力过大,过多下降数据库的性能,要么具备丢失数据量过大的风险。
使用slaveof host port
设置主从服务器。
Redis 的主从服务器有点像树结构,从服务器只能有一个主服务器。
Redis 不支持「主-主复制」。
Redis 主从复制经过利用 RDB 快照持久化的特性,将某一时刻下主服务器的内容生成快照,而后发送给从服务器,并利用缓存区保存在这期间里进行的「写命令」,等待快照发送完毕以后,再将写命令发送给从服务器。
从服务器在接收到快照以后,会将自身的数据所有丢弃,载入快照里的数据,载入完毕以后,再执行主服务器的写命令。
Redis | Memcache |
---|---|
支持 String、List、Hash、Set、Zset | 只支持 String |
支持数据持久化 | 不支持 |
支持事务 | 不支持 |
支持主从复制 | 不支持 |
支持分布式 | 不支持 |
支持将数据交换到磁盘中 | 不支持 |
单进程、单线程 IO 多路复用 | 多线程、非阻塞 IO |
总结为一点,只用获得 Redis 里的 String 类型存储数据时,使用 Memcache。
除此以外,使用 Redis。
Redis 是内存型的数据库,能够设置最大内存,当内存不够时,会使用「数据淘汰策略」,删除部分数据。
可是并非针对 Redis 里全部的数据,而是抽样选取小部分「数据集」。
策略 | 描述 |
---|---|
Volatile-LRU | 从设置了过时时间的「数据集」中,删除最近、最少使用的数据集 |
Volatile-TTL | 从设置了过时时间的「数据集」中,删除即将要过时的数据。 |
Volatile-Random | 从设置了过时时间的「数据集」中,随机删除数据。 |
Always-LRU | 从「数据集」中删除最近、最少使用的数据。 |
AllKeys-Random | 从「数据集」中随机删除数据。 |
Noeviction | 禁止删除数据。 |
当 Redis 做为缓存使用时,为了保证缓存数据都是「热数据」,能够将 Redis 的最大内存设置为缓存的大小,并使用 Always-LRU 策略。将最近最少使用的数据舍弃,保证缓存里热数据的「高命中率」。
至此,有关「数据库」知识点的面试题就已告一段落,下次更新「网络通讯方面」面试题。
全部内容均已上传至「GitHub」仓库,欢迎你们点击原文查阅。
欢迎你们关注我的微信公众号「PythonDeveloper」,全部内容第一时间更新于公众号。
全部内容均为本人一点一点敲出来的,不免会有错字、语句不通顺的地方,欢迎你们指正。
因本人水平有限,文章内容不免会有出错、遗漏,欢迎你们评论指出,一块儿进步。