Redis
- 认识redis
- Redis特性
- 在内存中存储数据
- 可编程
- 可扩展性
- 持久化
- Clustering
- 高可用性
认识redis
Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库
同MySQL数据库不同的是,Redis是一个NoSQL,即非关系数据库,Redis的数据是存在内存中的,所以读写速度远超MySQL几个数量级。
Redis 主要应用于 数据库,或被作为缓存(cache),和作为消息队列(服务器)。
链接: 官网
Redis特性
共有六大特性
在内存中存储数据
MySQL通过库和表的方式来存储数据的 关系型数据库。
Redis 通过键值对(Key-Value)方式来存储的 非关系型数据库。
Redis 中的值不仅可以是字符串,⽽且还可以是具体的数据结构,这样不仅能便于在许多应⽤场景的开发,同时也能提⾼开发效率。
它主要提供了 5 种数据结构:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(sorted set /zset)。
还有几种特殊的类型: Streams,Geospatial indexes,Bitmaps,HyperLogLog 。
在Redis中,key的类型都是字符串,value的类型可以是上述的所有数据类型。
可编程
我们可以通过直接简单的交互式命令去操作Redis,也可以通过脚本的方式,去批量的执行操作
可扩展性
可以在Redis原有的基础上,对其功能进行扩展
通过C/C++,或者Rust 编写模块API,扩展功能。
持久化
将数据放在内存中是不安全的,⼀旦发⽣断电或者机器故障,重要的数据可能就会丢失,因此 Redis 提供了两种持久化⽅式:RDB 和 AOF,即可以⽤两种策略将内存的数据保存到硬盘中,这样就保证了数据的可持久性。
Redis存储的是硬盘的一部分数据,当Redis重新启动后, 会去硬盘中加载数据,回到重启之前的状态。
Clustering
Redis支持集群,会在单台Redis服务器达到极限后,进行水平扩展,引入多台主机。
高可用性
可⽤性(Availability)
考察单位时间段内,系统可以正常提供服务的概率/期望。例如: 年化系统可⽤性 = 系统正常提供服务时⻓ / ⼀年总时⻓。这⾥暗含着⼀个指标,即如何评价系统提供⽆法是否正常,我们就不深⼊了。平时我们常说的 4 个 9 即系统可以提供 99.99% 的可⽤性,5 个 9 是 99.999% 的可⽤性,以此类推。
Redis 提供了⾼可⽤实现的 Redis 哨兵(Redis Sentinel),能够保证 Redis 结点的故障发现和故障⾃动转移。也提供了 Redis 集群(Redis Cluster),是真正的分布式实现,提供了⾼可⽤、读写和容量的扩展性。
为什么Redis 会这么快?
- Redis的数据都在内存中
- Redis的核心功能都是一些简单的逻辑----- 都是一些简单的操作内存的数据结构
- 从网络上说,Redis采用了多路转接的方式
- Redis使用的是单线程
- Redis是用c语言写的(但是MySQL也是c写的,所以不能主观的把这些原因推到底层语言上)