休息一天,Redis搞起!先看看什么是Redis吧!
我们还是要从是什么?为什么?开始研究
在日常的 JavaWeb 开发中,我们一般使用数据库如 MySQL 来进行数据的存储,因为我们做的系统访问量和并发不高、系统交互也少。后来,随着访问量的提升,关系型数据库出现了弊端:在高访问和高并发下性能无法满足要求,而源头就是在于磁盘的 I/O 操作上。学过计算机基础的我们都知道,计算机的存储逻辑如下图:
而关系型数据库的数据都是存储在硬盘中,这保护了数据库中的数据不会很容易丢失,但也导致了数据读取的缓慢,因为 CPU 读取数据需要从 Cache 到 内存再到硬盘中读取。在这个大数据成为主流趋势的年代,比如淘宝双11上千万人同时在线的情况,人们对性能有了更高的要求。
因此,NoSQL 随着需求横空出世。
NoSQL
为了克服上述问题,目前项目都会引入 NoSQL 技术,NoSQL 并不是指没有数据库了,而是指非关系型数据库,这是一种基于内存的数据库,并提供持久化功能。
Redis 和 MongoDB 是当前使用最广泛的 NoSQL,在 Redis 官网的描写中,Redis可以每秒处理10万次读写操作,其性能远超关系型数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中。
Redis 的应用
Redis 在 JavaWeb 项目中主要有两个应用场景:
存储 缓存 用的数据
需要高速读/写的场合使用它高速读/写
缓存
在日常操作数据库的过程中,读操作的次数远远超过写操作,所以需要读操作的可能性是比写操作的大的。当我们使用 SQL 语句在数据库进行读写操作时,数据库会去硬盘中获取对应的数据索引,这是一个相对较慢的过程。
如果我们将数据放在 Redis 中,也就是将数据放在内存中,直接读取内存中的数据,这样会减少数据库的压力,速度也会明显快上不少,但是内存相对较小,将数据存储在内存中的开销会比较大,因此,我们将小又经常使用的数据,如用户的登陆信息、账号密码等存放在 Redis。
我们来看一下 Redis的读操作流程
第一次读数据的时候,Redis 还没有缓存进数据,因此第一次读取会失败,则从数据库中将数据读出,并写入 Redis 中
以后需要读取数据的时候,则可以直接从 Redis 中获取数据,速度大大提高
因此,使用了 Redis 之后,大大降低了对数据库的依赖,数据库的压力也随之减少。
我们再来看 Redis 的写操作
我们会发现,在进行写操作的时候,步骤会比平时的多了一步。
因此,我们在选择项目中是要用 Redis 时,我们要考虑项目的读操作和写操作哪个更多,一般来说还是读操作比较多,但是如果项目中某个功能写操作比读操作更多的话,就可以不使用 Redis 作为缓存。
(其实也可以直接将数据存储在内存上,据我所知,谷歌就是这么干的,因此他能提供高效的搜索,不过人家是谷歌…)
高速读写
这种情况就是将 Redis 当成数据库来使用。因为无淘宝双11、抢红包等操作,是瞬间有成千上万请求同时到达服务器、高并发的操作。如果单纯使用关系型数据库进行处理,可能会导致数据库崩坏!
站在用户需求,我们就需要 Redis 来应对这样的场合。
当请求到达服务器,只把业务放在 Redis 上读写,而不对关系型数据库进行任何操作,这样能大大提高读写速度
当高速读写业务结束后,再异步将数据一次性存储/更新到数据库中,实现持久化
Redis 的安装
将压缩包下载到本地,解压后就安装成功了,解压后的目录如下所示
其中,start.bat 是我自己创建的,在其中输入
redis-server.exe redis.windows.conf
之后,只需双击 start.bat 就可以运行 redis 了
如图所示:这就是运行成功的 redis 服务端
Redis 3.2.100 是redis版本
6379 是 Redis 端口号
10148 是 Redis 运行时的 PID
Redis 在 Windows 下的版本最高就到 3.2,但是在 Linux 上版本可以高达 5.x,即 Redis 新版本并不支持 Windows,如果要深入学习 Redis,还需在 Linux 上学习。