缓冲区

计算机中的缓冲区:

  1. 缓冲器为暂时置放输出或输入资料的内存。
  2. 缓冲器内资料自储存设备(如硬盘)来,放置在缓冲器中,须待机送至CPU或其他运算设备。
  3. 缓冲区(buffer)这个中文译意源自当计算机的高速部件与低速部件通讯时,必须将高速部件的输出暂存到某处,以保证高速部件与低速部件相吻合. 后来这个意思被扩展了,成为"临时存贮区"的意思。

当然,上面是计算机上的缓冲区,总的来说计算机中的缓冲区就是为了CPU在硬盘上的存取时速度的适配,存放常使用的输入输出数据,在下次存取时缩短时间,不至于浪费CPU。(硬盘速度慢,CPU快,比如内存和高速缓冲器)。

从这个当中我们可以得到一些启示:在某些我们需要多次访问某些数据的时候可以建造一个缓冲区来存放。

 

在MVC模式中:


  1. dao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此。
  2. service层主要负责业务模块的应用逻辑应用设计。
  3. controller层负责具体的业务模块流程的控制,在此层要调用service层的接口来控制业务流程。针对具体的业务流程,会有不同的控制器。

他们之间的关系是:Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。


比如给出下面这样一个例子:

  1. 给一个数据库放置一个表,放置学生的信息。
  2. 建立Dao层,Dao层负责建立与数据库存取学生信息关系。
  3. 建立Service层,service层负责处理取得到的学生信息或者处理存放的学生信息。

此时若一个页面想要登录取得自己所有信息,则会通过controller层去调用service层的方法去验证密码的正确性,以及密码对或错的处理。此时的数据库里面学生的密码应通过dao层取得(访问数据的时间过久)。但是若是这个用户取得学生信息的次数很多次呢,我们可以利用缓冲区的想法,在Service层建立一个Pool = HashMap<>();我们可以定义一个Count,访问一次Count加一,当超过一定的次数的时候,用Pool来存放这个用户的ID和Password,以后每次来查询时先去pool里面查询,查不到再去数据库访问取得。到此时又出现了两个问题:

  1. 若此时这位用户不停地点击查询,会给服务器增加负担。
  2. 若这位用户更改了数据(密码),如何去更新缓存中的数据。

对于第一个问题:我们可以给一个lastTime来判断上一次的时间,若检查出时间差距过小便不予理会或者通知客户。

对于第二个问题:我们可以在用户更改数据的时候通知Service层去在更改后重新读取更改后的数据来更改Pool。

而第二个问题又衍生出了一个问题,但是如果服务器端采用的是分布式服务器呢,可能在这个服务器上登录一次,存储数据在这个服务器上,在另一个服务器上登录一次,存储数据在这个服务器上,但是当更改数据后只更改了一个服务器上的,另一个服务器上数据不能同步。此时原谅小编还未到火候PO上链接

分布式系统数据一致性的6种方案

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Java,零碎思想)