一,是否使用过Redis集群,集群的原理是什么?
Redis Sentinal 着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。
Redis Cluster 着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。
二,Redis的同步机制了解吗?
Redis可以使用主从同步,从从同步,,第一次同步时,主节点做一次bgsave,并同时将后续的修改操作记录到内存buffer,待完成后将rdb文件全量同步到复制节点,复制节点接受完成后
将rdb镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。
三,Pipeline 有什么好处,为什么要用pipline?
可以将多次IO往返的时间缩短为一次,前提pipeline执行的指令之间没有因果关系相关性。使用reids-benchmark进行压测的时候可以发现影响reids的QPD峰值的一个重要因素是pipeline批次指令的数目。
四,Redis 主从复制?
主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点,从而保证数据的一致性。
缺点: 1)若主节点出现问题,则不能提供服务,需要人工修改配置将从变主。
2)主从复制主节点的写能力,能力有限。
3)单机节点的存储能力也有限。
五,Redis 哨兵机制?
1)哨兵机制的出现为了解决主从复制的缺点。
2)哨兵机制的高可用?原理:当主节点出现故障时,由Redis Sentiel 自动完成故障发现和转移,并通知应用方,实现高可用。
其实整个过程中只需要一个哨兵节点来完成,首先使用Raft 算法(选举算法)实现选举机制,选出一个哨兵节点来完成转移和通知。
reids的哨兵监控通过心跳PING来确认master是否存活。
六,如果有大量的key需要设置同一过期时间,一般需要注意什么?
如果大量的key过期时间设置的过于集中,到过期时间的那个点,redis 可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使过期时间分散一些。
七,Reids的五大数据类型?(也可以作为缓存格式)
1) String 字符串,在reids内部默认存储就是一个字符串(缓存)
2) Hash Redis的Hash实际是内部存储的value为一个HashMap (用户id + 属性对应名称作为唯一标识)
3) List Redis中list的实现为一个双向链表,可以支持反向查找和遍历(消息队列)
4) Set set的内部实现是一个value永远为Null 的HashMap (会自动进行排重)
5) Sorted set 内部使用HashMap和跳跃表来保证数据的存储和有序。
八,Redis 事务的概念?
Reids 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有的命令都会被序列化,在事务执行过程中,会按照顺序串行执行队列命令,其他客户端提交的命令请求不会插入到事务执行的序列中。
九,Redis不保证原子性?
在redis中,单条命令是原子性执行的。但事务不保证原子性,且没有回滚,事务中任意命令执行失败,其余命令仍会被执行。
十,Redis 持久化的几种方式?
1) 快照(snapshots)
缺省情况下,reids把数据快照放到磁盘上的二进制文件中,文件名为dump.rdb。你可以配置Redis的持久化策略,例如数据集中每N秒有超过M次更新,就将数据写入磁盘;或者你可以手动调用命令SAV或BGSAVE。
工作原理: 子进程开始将数据写到临时文件RDB中。 当子进程完成写RDB文件,用新文件替换旧文件。 这种方式可以使Redis使用copy-on-write 技术。
2)AOF
快照模式并不十分健壮,当系统停止时,或者无意中Redis被kill掉,最后写入reids的数据就会丢失。
例:这对某些应用也许不是大问题,但对于要求高可性应用来说,Redis就不是一个合适的选择。Append-only文件模式是另一种选择。你可以选择在配置文件中打开AOF模式。
3)虚拟内存的设置
十一, Redis有哪些适合的场景?
1) 会话缓存
2)全页缓存
3)队列
4)排行榜/计数器
5)发布/订阅
6)热点数据
7)消息队列
十二,单线程的Redis为什么这么快?
(一),纯内存操作
(二),单线程操作,避免了频繁的上下文切换
(三),采用了非阻塞I/O多路复用机制【多路I/O复用技术是为了解决进程或线程阻塞到某个I/O系统调用而出现的技术可以监视多个描述等,一旦某个描述就绪,就能通知程序进行相应的读写操作】
十三,为什么Redis把所有数据放到内存中?
Redis为了达到更快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O/的速度会严重影响redis的性能。在内存越来越便宜的今天,redis也越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
十四,使用redis有哪些好处?
1, 速度快,因为数据存在内存中,类似于 HashMap,HashMap的优势就是查找和操作时时间复杂度都是O(1)
2, 支持丰富的数据类型,支持string, list, hashmap, set, sorted set
3, 支持事务,操作都是原子性的,所谓原子性就是对数据的更改要么全部执行,要么全部不执行。
4, 丰富的特性,可用于缓存,消息,按key 设置过期时间,过期后将会自动删除。
十五,简述Redis的特点?
1, Redis 本质上是一个key-value 类型的内存数据库,很像 memcached, 整个数据库统加载在内存当中进行操作,定期通过异步操作把数据flash到硬盘上进行保存。
2, 因为是纯内存操作,所以redis的性能非常出色,每秒可以处理超过10万次的读写操作,是已知性能最快的key-value DB。
3, Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个 value 的最大限制是1GB,不像memcached 只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。
4, 比方说用他的List 来做FIFO双向链表,实现一个轻量级的高性能消息队列服务,用他的set可以做高性能的tag系统等等。另外Redis也可以存入key-value设置expire时间,因此也可以被当作一个功能加强版的memcached来用。
5, Redis 的主要缺点是数据库容量受到物理内存的限制,不能用做海量数据的高性能读写,因此Redis适合的场景主要局限在较小的数据量的高性能操作和运算上。
十六,什么是分布式锁?
首先介绍分布式要提到与分布式锁相对应的是线程锁,进程锁,进程锁为了控制同一操作系统中的多个进程访问某个资源,因为进程具有独立性,各个进程无法访问其他进程资源,因此无法通过synchronized等线程实现进程锁。