1、什么是Redis
Redis的本质是一个Key-Value类型的内存数据库,它是NoSQL中的一种,是非关系型数据库。整个数据库加载到内存中操作,定期通过异步把数据库中的数据flush到硬盘中保存。Redis是纯内存操作,每秒可以处理超过万次读写操作,是已知性能最快的Key-Value数据库。
Redis的优点:
- 读写性能极高。
Redis为什么这么快
1、内存存储,Redis是使用纯内存存储,没有磁盘IO上的开销。
2、单线程操作,避免了多个线程之间的上下文切换和锁资源争用问题
注意:本质上 Redis 并不是单纯的单线程服务模型,一些辅助工作比如持久化刷盘、惰性删除等任务是由 BIO 线程来完成的,这里说的单线程主要是说与客户端交互完成命令请求和回复的工作线程。
3、采用了非阻塞IO多路复用机制
4、提供了非常高效的数据结构,例如双向链表、压缩页表和跳跃表,可以根据实际数据类型选择合理的数据编码
- 指出数据持久化,支持AOF和RDB两种持久化方式
其中:
- RDB:把当前数据生成快照保存在硬盘上。
- AOF:记录每次对数据的操作到硬盘上。
- 支持事务,Redis所有的操作都是原子性的,要么全部执行成功,要么完全失败执行不起来。单个操作是原子性的,多个操作也支持原子性。
- 数据结构丰富,除了支持String类型的value外,还支持Hash、set、list等数据结构
- 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离
Redis的缺点:
- 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要限制在较小数据量的高性能操作和运算上。
- 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引起数据不一致的问题,降低了系统的可用性
Redis的瓶颈最有可能是机器内存的大小或者网络宽带
重点:执行命令的核 心模块是单线程的。新的命令并不会立即被执行,而是统一的放到了队列中,一条一条的执行
单线程还有一个问题:就是对于每个命令的执行时间是有要求的,如果其中的某一个命令执行过长,会造成其 他命令的阻塞,这对于 Redis 这种高性能的服务来说是致命的,记住 Redis 是面向快速执行场景的数据库
2、充当缓存的 Redis 和 Memcached有什么区别
- 存储方式上:Memcache会把数据全部存放在内存中,断电后会挂掉,数据不能超出内存大小,不支持数据持久存储。Redis有部分数据存在硬盘上,重启的时候能够再次加载进行使用
- 数据支持类型上,Memcache只支持简单的key-value,而Redis最基本支持物种数据类型。
- Redis提供主从同步机制,以及Cluster集群部署能力,能够提供高可用服务。Memcache需要依靠客户端来实现往集群中分片写入数据
- 网络IO模型上:Redis使用单线程的多路IO复用模型,Memcache使用多线程的非阻塞IO模式
Redis缓存使用的场景:
1、降低后端负载
2、加速请求响应
3、大量写合并为批量写
3、为什么要用Redis做缓存
- 从高并发上来说:直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中,这样一部分用户请求会直接到缓存这里而不经过数据库
- 从高性能上来说,用户第一次访问数据库中的某些数据,因为是从磁盘上读取,所以这个过程比较慢。将该用户访问的数据存在缓存中,下一次访问这些数据的时候就可以直接从缓存中获取。操作缓存就是直接操作内存,所以速度比较快。当数据库中的对应数据改变之后,同步改变缓存中对应的数据