redis
1.是什么?
Redis是由ANSIC语言编写的,性能优秀,支持网络,可持久化的内存数据库,并支持多种语言的API。可以用作数据库,缓存,消息中间件 。
- 性能优秀,数据在内存中,读写速度非常快,支持并发10W+QPS;
- 丰富的数据类型,支持String,hash,list,set,zset等;
- 支持持久化。可以将内存中的数据保存在磁盘中,重启时加载;
- 主从复制哨兵,高可用;
可以作为消息中间件使用,支持订阅发布;
2.单线程还是多线程?
Redis 6.0 在2019年底发布,他是支持多线程的。所以说在之前的版本的Redis都是单线程的。
3.多线程的优势?
- 单线程Redis的性能瓶颈主要在于网络的IO消耗,所以我们再优化的方向就是提高网络IO性能;
- Redis 6 一如的多线程IO特性对性能提升至少一倍以上。Redis的多线程部分只是用来处理网络数据的读写和协议解析,执行命令任然是单线程。
4.主从复制及其存在的问题?
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
存在以下问题:
- 一旦主节点宕机,从节点晋升为主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预。
- 主节点的写能力受到单机的限制。 主节点的存储能力受到单机的限制。
- 原生复制的弊端在早期的版本中也会比较突出,比如:redis复制中断后,从节点会发起psync。此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时,可能会造成毫秒或秒级的卡顿。
5.哨兵的工作原理及其底层机制?
**Sentinel(哨兵)**是用于监控Redis集群中Master状态的工具,是 Redis 高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后,会把这个master下的某个从服务升级为master来替代已宕机的master继续工作。