您的位置 首页 java

java web中一般用redis来做什么

由于在高并发的情况下,需要对数据进行高速读/写的场景,一个最为核心的问题是数据一致性和 访问控制

缓存 (推荐学习: redis 视频教程)

在对数据库的读/写操作中,现实的情况是读操作的次数远超写操作,一般是1:9到3:7的比例,所以需要读的可能性是比写的可能性多得多。

当发送SQL去数据库进行读取时,数据库就会去磁盘把对应的数据 索引 回来,而索引磁盘是一个相对缓慢的过程。如果把数据直接放在运行在内存中的Redis服务器上,那么不需要去读/写磁盘了,而是直接读取内存,显然速度会快得多,并且会极大减轻数据库的压力。

而使用内存进行存储数据开销也是比较大的,因为磁盘可以是TGB级别,而且十分廉价,内存一般是几百个GB就相当了不起了,所以内存虽然高效但空间有限,价格也比磁盘高许多,因此使用内存代价较高,并不是想存什么就存什么,因此我们应该考虑有条件的存储数据。

一般而言,存储一些常用的数据,比如用户登录的信息;一些主要的业务信息,比如银行会存储一些客户基础信息、银行卡信息、最近交易信息等。一般而言在使用Redis存储的时候,需要从3个方面进行考虑。

业务数据常用吗?命中率如何?如果命中率很低,就没有必要写入缓存。该业务数据是读操作多,还是写操作多,如果写操作多,频繁需要写入数据库,也没有必要使用缓存。业务数据大小如何?如果要存储几百兆字节的文件,会给缓存带来很大的压力,有没有必要?

在考虑过这些问题后,如果觉得有必要使用缓存,那么就使用它。使用Redis作为缓存的读取逻辑如图1所示。

从图1中可以知道以下两点。

当第一次读取数据的时候,读取Redis的数据就会失败,此时会触发程序读取数据库,把数据读取出来,并且写入Redis。

当第二次及以后读取数据时,就直接读取Redis,读到数据后就结束了流程,这样速度就大大提高了。

从上面的分析可知,大部分的操作是读操作,使用Redis应对读操作,速度就会十分迅速,同时也降低了对数据库的依赖,大大降低了数据库的负担。

分析了读操作的逻辑后,下面再来分析写操作的流程,如图2所示。

从流程可以看出,更新或者写入的操作,需要多个Redis的操作。如果业务数据写次数远大于读次数没有必要使用Redis。

如果是读次数远大于写次数,则使用Redis就有其价值了,因为写入Redis虽然要消耗一定的代价,但是其性能良好,相对数据库而言,几乎可以忽略不计。

高速读/写场合

在互联网的应用中,往往存在一些需要高速读/写的场合,比如商品的秒杀,抢红包,淘宝、 京东 的双十一活动或者春运抢票等。

以上这类场合在一个瞬间成千上万的请求就会达到服务器,如果使用的是数据库,一个瞬间数据库就需要执行成千上万的SQL,很容易造成数据库的瓶颈,严重的会导致数据库瘫痪,造成JavaWeb系统服务崩溃。

在这样的场合的应对办法往往是考虑异步写入数据库,而在高速读/写的场合中单单使用Redis去应对,把这些需要高速读/写的数据,缓存到Redis中,而在满足一定的条件下,触发这些缓存的数据写入数据库中。先看看一次请求操作的流程图,如图3所示。

以上就是javaweb中一般用redis来做什么的详细内容,更多请关注其它相关文章!

文章来源:智云一二三科技

文章标题:java web中一般用redis来做什么

文章地址:https://www.zhihuclub.com/189999.shtml

关于作者: 智云科技

热门文章

网站地图