标签:硬盘 sync 开源 快照 force 文件 复制 节点 简单的
1.列举至少3个非关系型数据库,简单描述他们的特性
Memcached
特性:数据都在内存中,一般不持久化
支持简单的 key-value模式
一般是作为缓存数据库辅助持久化的数据库
Redis
特性:几乎覆盖了Memcached的绝大部分功能
数据都在内存中,支持持久化,主要用作备份恢复 除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。
一般是作为缓存数据库辅助持久化的数据库
mongoDB
特性:高性能、开源、模式自由(schema free)的文档型数据库 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘 虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
支持二进制数据及大型对象 可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。
2.reids常用的数据类型有哪些?(介绍一下各数据类型的特点)
Redis支持存储的多种key-value类型,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
1. 字符串类型(string)
这是redis中最基本的类型,也是最常用的类型,跟memcached一样,即一个key对应一个值这种。操作也很简单,常用操作命令有get、set、del等。
2. 链表类型(list)
链表类型有点类似于编程语言中的数组一样,可以用一个key存一组数据进去。其实list类型就是一个双向链表,通过lpush、lpop、rpush、rpop这四个命令来向链表的头部插入、移除、尾部插入、移除,这使得list即可以用作栈,也可以用作队列。
3set(集合)
redis中的set是string类型的无序集合,set元素最大可以包含2的32次方-1个元素。利用set集合类型,我们可以快速取出n个key之间的并集、交集、差集等,从而轻松解决mysql等数据库不容易实现这种运算的缺陷。应用场景:取出两个QQ号中的共同的好友数。
4. 有序集合类型(sorted set)
和set一样,sorted set也是string类型元素的集合,是一个没有重复元素的字符串集合。因为元素是有序的,所以使用有序集合你可以以非常快的速度(O(log(N)))添加,删除和更新元素,它也很擅长排序。应用场景:获取所有用户投票数最高的前10名,等等。
5. 哈希类型(hash)
hash数据类型存储的数据与mysql数据库中存储一条记录极为相似,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他类型。每一个哈希可以存储超过2的32次方-1个字段-值对。应用场景:存储用户的基本信息,等等。
3.redis的持久化方式是什么?分别有什么特点?如何选取持久化方式?(或者问Redis的数据持久化方式有哪些?如何进行的持久化?如何选取持久化方式?)
通过 RDB 或 AOF,都可以将 redis 内存中的数据给持久化到磁盘上面来,然后可以将这些数据备份到别的地方去,比如说阿里云等云服务。
如果 redis 挂了,服务器上的内存和磁盘上的数据都丢了,可以从云服务上拷贝回来之前的数据,放到指定的目录中,然后重新启动 redis,redis 就会自动根据持久化数据文件中的数据,去恢复内存中的数据,继续对外提供服务。
如果同时使用 RDB 和 AOF 两种持久化机制,那么在 redis 重启的时候,会使用 AOF 来重新构建数据,因为 AOF 中的数据更加完整。
RDB 优缺点
RDB会生成多个数据文件,每个数据文件都代表了某一个时刻中 redis 的数据,这种多个数据文件的方式,非常适合做冷备,可以将这种完整的数据文件发送到一些远程的安全存储上去,比如说 Amazon 的 S3 云服务上去,在国内可以是阿里云的 ODPS 分布式存储上,以预定好的备份策略来定期备份redis中的数据。
RDB 对 redis 对外提供的读写服务,影响非常小,可以让 redis 保持高性能,因为 redis 主进程只需要 fork 一个子进程,让子进程执行磁盘 IO 操作来进行 RDB 持久化即可。
相对于 AOF 持久化机制来说,直接基于 RDB 数据文件来重启和恢复 redis 进程,更加快速。
如果想要在 redis 故障时,尽可能少的丢失数据,那么 RDB 没有 AOF 好。一般来说,RDB 数据快照文件,都是每隔 5 分钟,或者更长时间生成一次,这个时候就得接受一旦 redis 进程宕机,那么会丢失最近 5 分钟的数据。
RDB 每次在 fork 子进程来执行 RDB 快照数据文件生成的时候,如果数据文件特别大,可能会导致对客户端提供的服务暂停数毫秒,或者甚至数秒。
AOF 优缺点
fsync
操作,最多丢失 1 秒钟的数据。append-only
模式写入,所以没有任何磁盘寻址的开销,写入性能非常高,而且文件不容易破损,即使文件尾部破损,也很容易修复。rewrite
log 的时候,会对其中的指导进行压缩,创建出一份需要恢复数据的最小日志出来。再创建新日志文件的时候,老的日志文件还是照常写入。当新的 merge 后的日志文件 ready 的时候,再交换新老日志文件即可。flushall
命令清空了所有数据,只要这个时候后台 rewrite
还没有发生,那么就可以立即拷贝 AOF 文件,将最后一条 flushall
命令给删了,然后再将该 AOF
文件放回去,就可以通过恢复机制,自动恢复所有数据。fsync
一次日志文件,当然,每秒一次 fsync
,性能也还是很高的。(如果实时写入,那么 QPS 会大降,redis 性能会大大降低)
4.redis的事务有什么作用?CAS是什么意思?常用的事务命令是什么?watch的作用是什么?
Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
Redis事务的主要作用就是串联多个命令防止别的命令插队
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis就是利用这种check-and-set机制实现事务的。
WATCH key [key ...] 在执行multi之前,先执行watch key1 [key2],可以监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
unwatch 取消 WATCH 命令对所有 key 的监视。 如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了。
WATCH命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行。监控一直持续到EXEC命令(事务中的命令是在EXEC之后才执行的,所以在MULTI命令后可以修改WATCH监控的键值)
5.redis的主从复制有什么优点?能否解决redis的容量问题?能否分摊写操作的压力?
一个机器启动多个实例,其实并不会耗费太多资源,因为Redis够轻量,另外多个实例一个接一个的重写AOF文件或者生成内存快照,可以降低内存的占用,而不影响对外的服务
6.主从复制中主节点down机,怎么实现主从切换(自动、手动)?自动实现从转主的时候,选取slave转为master的选取机制是?
上一个slave可以是下一个slave的Master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险。 用 slaveof <ip> <port> 中途变更转向:会清除之前的数据,重新建立拷贝最新的 风险是一旦某个slave宕机,后面的slave都没法备份
当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。。 用 slaveof no one 将从机变为主机。
7.Redis中哨兵的作用是什么?
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库.
8.当Redis数据库容量不够,并发写数据量较大,如何分摊压力和扩容?简述redis集群的搭建流程?
1、安装ruby环境
能上网
执行yum install ruby 执行yum install rubygems
不能上网
cd /run/media/root/CentOS 7 x86_64/Packages(路径跟centos6不同) 获取右图rpm包 拷贝到/opt/rpmruby/目录下,并cd到此目录 执行:rpm -Uvh *.rpm --nodeps --force 按照依赖安装各个rpm包
2.拷贝redis-3.2.0.gem到/opt目录下
3.执行在opt目录下执行 gem install --local redis-3.2.0.gem
标签:硬盘 sync 开源 快照 force 文件 复制 节点 简单的
原文地址:https://www.cnblogs.com/chenduo000/p/13393798.html