什么是Redis
Redis是一种开源的内存数据结构,用作数据库、缓存和消息代理。它支持各种不同数据类型的存储,据我们了解,它主要用作缓存内容的一种方式,可以在以后快速高效地检索这些内容,从而减轻数据库服务器(如MySQL)的一些工作负载。
Redis并不是MySQL数据库的替代品,尽管Redis确实支持数据持久性,但它并不是真正设计成一个合适的数据库,并且可以与普通的更方便的风格的数据库并肩工作。
想了解更多Redis 点这里
我们要redis解决什么问题?
样例说明
示图如下 :
(1-1 没有redis)
图1-2 加了Redis
文字说明如下:
这有一个项目它由多个不同的组件组成。它由Web前端、API(Web前端使用)和java应用程序组成,我们称项目还拥有内部HTTP REST API,使用MySQL数据库后端进行数据存储和处理。在这个实验中,Web前端和Web API不是正在重要的,而是后端及它自己的内部REST API和它的数据处理。
该服务的流程是,用户通过发送加密过的API请求到REST API,API密钥在数据库中被查询,如果成功,则返回OK响应,然后用户可以继续向服务器发送POST数据,服务器通过引擎REST API再次接收这些数据,并进行处理和存储在数据库里。但是,当服务器收到请求数据时,需要检查用户上的一个计数器,以确保没有达到每月的配额,然后为收到的每个请求增加这个计数器。从数据处理方面来说,服务器要做大量的数据库工作。以下是可能需要的流程:
- 接收HTTP请求
- 以数据库为单位检查用户每月配额
- 如果每月配额低于阈值,则处理并将数据存储在数据库中
- 通过数据库增加用户每月配额计数器。
- 会话过期-无需执行任何操作
以上看起来不是什么大问题,但是如果我们每秒接收到几千个请求(这是可能的),那么服务器对于收到的每个请求,查询、存储和更新数据库将是一项大量的工作和开销,随着越来越多的用户请求,这可能会导致速度越来越慢。
考虑到这一点,我们考虑了使用Redis为用户存储计数器的思想,然后唯一需要数据库工作的就是存储处理好的数据,在用户会话到期时更新最终的请求计数。
因此,使用Redis的过程如下,同样包括初始化,在初始化阶段,我们将创建一个Redis密钥,它将是用户的某种标识符。- 接收HTTP请求
- 在Redis中查看用户月配额
- 如果低于每月报价,则将记录保存在数据库中
- redis中增加配额计数器
- 会话过期-将redis配额计数器刷新到数据库
正如上面看到的,步骤的数量是完全相同的,但是流程不是查询数据库,更新数据库中的配额,而是查询Redis,只在会话到期时使用Redis的计数器更新DB中的配额。测试性能对比
从上面的图表中可以看出,使用Redis存储和查询每个HTTP请求的配额,而不是在数据库中执行要快得多,事实上,在我们执行的每个脚本的5次运行中,我们看到完成的整个过程和将每条记录存储到DB中的时间都减少了51.4%。
从这个测试中,服务部分使用Redis可以明显提高服务器性能。