-  RAM(Random Access Memory):(redis是在这一层做的 
 随机存储器,俗称内存,我们常说的电脑内存8g,指的就是这个(也不完全正确)。RAM要求每时每刻都不断地供电,否则数据会丢失。它由半导体材料制作,是计算机的工作场所。
-  ROM(Read Only Memory): 
 只读存储器,应用于硬盘存储。一般由磁性材料制作,用来存放暂时不用的信息,只有加载到内存(RAM)中才能被CPU处理。即CPU与硬盘不发生直接的数据交换。
-  Cache (高速缓冲存储器) 
 Cache介于CPU与RAM之间,是一个读写速度比RAM更快的存储器。当CPU向RAM中写入或读出数据时会同步存储进Cache中,当CPU再次需要这些数据时,CPU就从Cache读取数据,而不是访问较慢的内存,如需要的数据在Cache中没有,CPU会再去读取Cache中的数据。
访问速度
 Cache>>RAM>>ROM
知识关联(volatile)
  Java中的关键字volatile,在多线程中,具有可见性,但不具备原子性,就与Cache和RAM有关(其实共享变量都有关)。
  假如同时有两个线程对同一字段进行读写,有时候读的是Cache中的,有的时候读的是RAM中的,两者未能完全同步,如下面代码:
 三个线程对同一字段执行增加操作,最后的值应该是3000。
public class ThreadTest implements Runnable {
    public static volatile int sum = 0;
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            new Thread (new ThreadTest (),"线程:"+i).start ();
        }
    }
    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            sum++;
        }
        System.out.println (Thread.currentThread ().getName ()+":"+sum);
    }
}
执行结果:
最后的结果小于30000,这就是因为三个线程在获取sum的值得时候,本应该去Cache中获取的,但是Cache非常小,马上就消失了,需要去RAM中获取,这时两者未能完成同步就造成了这种小于30000的情况。



















