redis 计数器 java_Redis介绍

什么是Redis

Redis是一种开源的内存数据结构,用作数据库、缓存和消息代理。它支持各种不同数据类型的存储,据我们了解,它主要用作缓存内容的一种方式,可以在以后快速高效地检索这些内容,从而减轻数据库服务器(如MySQL)的一些工作负载。

Redis并不是MySQL数据库的替代品,尽管Redis确实支持数据持久性,但它并不是真正设计成一个合适的数据库,并且可以与普通的更方便的风格的数据库并肩工作。

想了解更多Redis 点这里

我们要redis解决什么问题?

样例说明

示图如下

ce47f015942d84ca0a78c7202150e2ce.png

(1-1 没有redis)

9c93a25a20039f1b34c96708db2356d6.png

图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中的配额。测试性能对比

3edd5affe89892470ca592c75349e9b7.png

13168284794516cca112b460211dfe51.png


从上面的图表中可以看出,使用Redis存储和查询每个HTTP请求的配额,而不是在数据库中执行要快得多,事实上,在我们执行的每个脚本的5次运行中,我们看到完成的整个过程和将每条记录存储到DB中的时间都减少了51.4%。
从这个测试中,服务部分使用Redis可以明显提高服务器性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值