一、Redis定义
Redis是一个开源的,基于内存的数据结构存储,可用于数据库、缓存、消息中间件。
1.1 为什么要用Redis?
Redis是基于内存的,常用作缓存的一种技术,并且Redis存储的方式是以key-value的形式。
我们发现这不就是Java的Map容器所拥有的特性吗,为什么还需要Redis呢?
- Java实现的Map是本地缓存,如果有多台实例(机器)的话,每个实例都需要各自保存一份缓存,缓存不具有一致性;
- Redis实现的是分布式(CAP/一致性/可达性/分区容错性)缓存,如果有多台实例(机器)的话,每个实例都共享一份缓存,缓存具有一致性。Redis可以独立部署,这样网站代码更新后redis缓存的数据还在,本地内存每次网站更新都会释放掉数据;存到redis,多个项目间可以共享缓存数据,如果是本地内存是无法跨项目共享的。
- Java实现的Map不是专业做缓存的,JVM内存太大容易挂掉的。一般用做容器来存储临时数据,缓存的数据随着JVM销毁而结束。Map所存储的数据结构,缓存过期机制等等是需要程序员自己手写的;
- Redis是专业做缓存的,可以用几十个G内存来做缓存。Redis一般用作缓存,可以将缓存数据保存在硬盘中,Redis重启后可将其恢复。原生提供丰富的数据结构、缓存过期机制等简答好用的功能。
总结:Redis分布式缓存,具有一致性、专业做缓存(具有各种简单好用的功能)
【参考】为什么要用redis而不用map做缓存?https://segmentfault.com/q/1010000009106416
1.2 为什么要用缓存?
如果我们的网站出现了性能问题(访问时间慢),按经验来说,一般是由于数据库撑不住了。因为一般数据库的读写都是要经过磁盘的,而磁盘的速度可以说是相当慢的(相对内存来说)
https://zhuanlan.zhihu.com/p/24726196
如果学过MyBatis、Hibernate的同学就可以知道,它们有一级缓存、二级缓存这样的功能(终究来说还是本地缓存)。目的就是为了:不用每次读取的时候,都要查一次数据库。
有了缓存之后,我们的访问就变成这样: