rides学习笔记第一天

    nosql简介:在互联网中,往往存在大数据量的需求,比如一些商品抢购的场景,或者是主页访问量瞬间较大的时候,一瞬间成千上万的请求就会到来,需要系统在极短的时间完成成千上万的读/写操作,这个时候往往不是数据库能够承受的,极易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。

      redis的性能优越来源于三方面:1.基于ansic语言编写,接近汇编语言的机器语言,运行速度快。2.基于内存的读/写速度比数据库磁盘的读/写快的多。3.它的数据库结构只有六种类型,数据结构比较简单,规则少。所以redis响应速度更快。

 1.1redis在javaweb中的应用

    1.1.1缓存

        在对数据库的读/写操作中,读操作的次数远超过写操作,一般是7:3或者9:1的关系。我们从三方面考虑

       ·业务数据常用吗?命中率如何,如果命中率很低就没必要写入缓存。

       ·该业务数据是读操作多,还是写操作多,如果写操作多,频繁使用数据库,就没必要使用缓存。

        ·业务数据大小如何?如果要存储几百兆字节文件,会给缓存带来很大压力,有没有必要?

读操作流程:

rides学习笔记第一天_第1张图片

如图所示,当第一次读取数据时,读取redis会失败,此时会触发程序读取数据库把数据库读出来,并且写入redis,当第二次及以后读取数据时,就直接读取redis,读取到数据后就结束了流程,这样速度大大提高,

写操作流程:

rides学习笔记第一天_第2张图片

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

1.1.2高速读/写场合

京东抢票,秒杀活动,这样的场合考虑异步写入数据库,而在高速读/写的场合中单单使用redis去应对,把这些需要高速读/写的操作,缓存到redis中,而在满足一定的条件下,触发这些缓存的数据写入数据库中,流程图如下:

rides学习笔记第一天_第3张图片

进一步论述这个过程,:当一个请求到达服务器,只是把业务数据现在redis读/写,而没有进行任何数据库的操作,换句话说系统仅仅是操作redis缓存,而没有操作数据库,这个速度就比操作数据库要快的多,换句话说系统仅仅是操作redis缓存,而没有操作数据库这个速度要比操作数据库要快的多,从而达到高响应,但是一般缓存不能持久化,,因此需要把这些数据存入数据库,所以在一个请求操作完redis读/写后,会去判断该高速读/写的业务是否会结束。这个判断的条件往往就是秒杀商品的剩余个数为0,抢红包的金额为0,如果不成立,则不会操作数据库,如果成立,则触发事件将redis缓存的数据以批量的形式一次性写入数据库,从而完成持久化的工作。

假设面对的是商品秒杀的场景,从上面的流程来看,一个用户抢购商品,绝大部分的场合都是在操作内存数据库redis,而不是磁盘数据库,所以性能更为优越。只有在商品被抢购一空后才会触发系统把redis缓存的数据写入数据库磁盘中,这样系统大部分的操作基于内存,就能够在秒杀的场合高速响应用户的请求,达到快速应答。

你可能感兴趣的:(java,java,redis)