文章目录
- Redis 数据库
- 一、Redis基础
- 1、Redis应用场景
- 2、Redis数据类型
- 3、Redis常用命令
- 4、Redis为什么速度快?
- 5、Redis和Memcached的区别和共同点
- 6、Redis和MySQL的区别?
- 二、高可用
- 1、主从复制
- Q:主从复制主要的作用?
- 2、Redis主从复制原理
Redis 数据库
Redis是一个基于 内存 的 key-value结构 数据库。
一、Redis基础
Redis是一个开源的内存中的键值对(key-value)数据结构存储系统,可以用作 数据库、缓存和消息中间件。Redis属于NoSql数据库。
1、Redis应用场景
①缓存;②任务队列;③消息队列;④分布式锁。
2、Redis数据类型
①字符串String;②哈希Hash;③列表List(常用于任务队列);④集合Set;⑤有序集合sorted Set。
Redis中所说的数据类型主要是针对值value数据类型的,键key的类型都是字符串类型。
3、Redis常用命令
具体参见链接 Redis中文网
4、Redis为什么速度快?
①Redis 基于内存,内存的访问速度是磁盘的上千倍;
②Redis基于Reactor模式设计开发了一套高效的事件处理模型,主要是 单线程 事件循环和 IO多路复用(非阻塞);
③Redis 内置了多种优化过后的数据结构实现 ,性能非常高。
Linux系统有三种方式实现IO多路复用的方式:select、poll和epoll。
5、Redis和Memcached的区别和共同点
共同点:
①都是 基于内存 的数据库,一般都用来当 做缓存使用。
②都有 过期策略。
③两者的性能都非常高。
区别:
①Redis支持更 丰富的数据类型(支持更复杂的应用场景)。Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储;Memcached 只支持最简单的 k/v 数据类型。
②Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memcached把数据全部存在内存之中。
③Redis有 灾难恢复机制。因为可以把缓存中的数据持久化到磁盘上。
④Redis在服务器内存使用完之后,可以将不用的数据放到磁盘上。但是,Memcached在服务器内存使用完之后,就会直接报异常。
⑤Memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是Redis目前是原生支持cluster模式的。
⑥Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路IO复用模型。(Redis 6.0引入了多线程IO)
⑦Redis支持发布订阅模型、Lua 脚本、事务等功能,而Memcached不支持。并且,Redis支持更多的编程语言。
⑧Memcached过期数据的删除策略只用了惰性删除,而Redis同时使用了惰性删除与定期删除。
6、Redis和MySQL的区别?
- MySQL是关系型数据库;而Redis是非关系型数据库。
- MySQL用于持久化存储数据到 硬盘,功能强大,但是速度缓慢;而Redis用于存储使用较为频繁的数据到 缓存 中,读取速度快。
- MySQL的数据存放在磁盘中;而Redis的数据存放在内存中。
- MySQL常用数据类型有数值、日期/时间、字符串;Redis常用数据类型有字符串、Hash、List、Set、Zset。
MySQL适合应用在web网站系统、数据库仓库、日志记录等。
Redis适合在会话缓存、发布/订阅模型等。
二、高可用
Redis保证高可用主要有三种方式:主从、哨兵、集群。
1、主从复制
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为 主节点(master),后者称为 从节点(slave)。且数据的复制是 单向 的,只能由主节点到从节点。Redis主从复制支持 主从同步 和 从从同步 两种,后者是Redis后续版本新增的功能,以减轻主节点的同步负担。
Q:主从复制主要的作用?
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复(实际上是一种服务的冗余)。
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载。尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
- 高可用:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
2、Redis主从复制原理
- 保存主节点信息,包括主节点的ip和port。
- 主从建立连接,从节点发现新的主节点后,会尝试和主节点建立网络连接。
- 发送ping命令,看 主从端是否连接成功 。连接建立成功后从节点发送ping请求进行首次通信,主要是检测主从之间网络套接字是否可用、主节点当前是否可接受处理命令。
- 权限验证。如果主节点要求密码验证,从节点必须正确的密码才能通过验证。
- 同步数据。主从复制连接正常通信后,主节点会把持有的数据全部发送给从节点。
- 命令持续复制。接下来主节点会持续地把写命令发送给从节点,保证主从数据一致性。