深入学习Redis(一) 什么是Redis
1. 什么是Redis内存数据库
1.1 介绍
Redis,本质上上一个KEY-VALUE类型(键值类型,其实大家接触最早的键值类型数据库应该是Windows的注册表)的内存数据库,整个数据库都加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因此它是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作。虽然是内存数据库,但是其数据可以持久化,而且支持丰富的数据类型。
Redis支持保存LIST列表和SET集合的数据结构,而且还支持对LIST进行各种操作,例如从LIST两端进行PUSH和POP数据,取LIST区间,排序等等。对SET支持各种集合的并集交集操作,单个value的最大限制是1GB。
Redis主要的缺点是受到物理内存限制,不能用作海量数据的高性能读写,而且它没有原生的可扩展机制,不具有扩展能力,要依赖客户端来实现分布式读写,因此其适合的应用场景主要局限在较小数据量的高性能操作和运算上。
最佳应用场景:适用于数据变化快且数据库大小可遇见(内存大小)的应用程序。例如:股票软件、数据分析、实时数据收集、实时通讯。
Redis属于NoSQL范畴内,其含义为:Not only SQL,是不仅仅是SQL,是一项新的技术,随着WEB 2. 0的到来而得到广泛应用。理念是运用非关系的数据存储。键值类型的数据库主要使用哈希表,这个表中有一个特定的键和一个指针指向特定数据。KEY/VALUE模型对于IT系统来说的优势在于简单、容易部署。主要特点是具有极高的并发读写性能。
| 应用场景 | 内容缓存、主要处理大量数据的高访问负载、也用与一些日志系统 |
| 数据模型 | KEY指向VALUE,通常使用哈希表来实现 |
| 优点 | 查询速度快 |
| 缺点 | 数据无结构化,通常被当做字符串或者二进制数据 |
1.2 数据持久化
Redis的所有数据都保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为半持久化);也可以把每一次数据变化都写入到磁盘(这称为全持久化),所谓持久化就是讲内存数据转换为硬盘数据,内存模型到存储模型的转换,或者说是瞬时状态与持久状态的相互转换。)
Redis有两种持久化方式,默认是snapshot方式,实现方法是定时将内存的快照持久化到硬盘,这种方式的缺点是持久化之后如果出现crash则会丢失一段时间的数据。另外一种是aof方式,在写入内存数据的同时将操作命令保存到日志文件中。
1.2.1 RDB方式(快照方式)
这种快照方式和虚拟机的快照一样,保存某一时刻的完整数据。Redis在使用这种方式做持久化的时候,定期(默认5分钟)会先写入到一个临时文件,写入完成后,会用这个文件去替换上次的旧的文件。这种方式的好处是,任何一次的快照文件都是完整可用的。但是缺点是,它每隔一段时间(默认5分钟)做一次,所以会存在一段时间的数据丢失。
对于这种方式Redis会单独创建一个子进程来执行该任务,这样不会影响主进程的性能。
1.2.2 AOF方式(追加方式)
这种方式就是把对Redis内存数据的的写指令记录下来,这些指令会被记录在AOF文件的末尾,然后每秒做一次fsync操作(默认每秒一次),把指令在后台在执行一次执行过程其实就是修改磁盘上的数据库内容。所以如果出现故障也只丢失1秒的数据。
上面这种方式就很类似于传统数据库服务器的事务日志。如果遇到在追加日志的时候遇到意外,可以使用redis-check-aof工具进行日志修复。
因为采用了追加方式,所以AOF会越来越大(这一点又和传统数据库不一样,传统数据库事务日志文件都比较小),因此redis有另外一个机制就是AOF文件重写,当AOF文件达到一个设定的阈值后,会自动启动AOF文件压缩,只保留可以恢复数据的最小指令集。
通过上面的对AOF的描述,可以看到AOF是一个面向过程的,而RDB是面向对象的。
AOF方式的优点:丢失数据最小
AOF方式的缺点:
- 同等数据量,AOF文件RDB文件大
- AOF数据恢复(还原到内存中)速度比RDB慢

浙公网安备 33010602011771号