浅谈缓存

来源:互联网 发布:淘宝可以买发票吗 编辑:程序博客网 时间:2024/05/22 05:04

内存I/O速度在微妙级别,磁盘I/O速度在毫秒级别。二者相差三个数量级,所以尽量减少磁盘I/O,把数据操作放到内存在,可以明显提高速度,改善用户体验。JAVA世界里,缓存在WEB 应用、数据库、框架等方面使用都很普遍。现介绍如下:

1 缓存在WEB应用方面的应用:

   1.1 EhCache:本地缓存,在JVM内开辟内存,JVM重启,数据可以写入磁盘。需要通过RMI、可插入API实现分布式缓存,这个特点相对MemCached显得很不方便。

   1.2 MemCached:基于客户端的分布式内存数据库,独立于JVM,重启会导致数据的丢失。

   1.3 Redis:支持数据持久化、相对MemCached速度方面有优势。

   1.4 SQLite: 支持SQL、可持久化。

2 缓存在数据库方面的应用:

   2.1 查询缓存:第一查询把查询到的结果集放到内存中,第二次查询的时候直接从内存中获得。MYSQL中有两个重要的参数来控制它,一,query_cache_size,设置查询缓存的大 小;二,query_cache_type,0(OFF)、1(ON)、2(DEMOND),分别表示不适用查询缓存、不显示声明不适用查询缓存就使用查询缓存、显示声明使用查询缓存再使用查询缓存。

   2.2 MyISAM 缓存:两个参数,一,key_buffer_size,用来设置存储MYISAM引起索引文件的内存的大小;二,bulk_insert_buffer_size,仅适用MYISAM,设置缓存批量插入数据的内存的大小,如:insert ...select、insert... values...、load data into ..等。

   2.3 InnoDB 缓存:两个参数,一,innodb_buffer_pool_size,缓存InnoDB引擎索引和数据;二,innodb_additional_men_pool_size,设置InnoDB引擎缓存数据字典和内部数据结构的内存的大小。

   2.4 事务缓存:一个参数,innodb_flush_log_trx_commit,0:log buffer中的数据将以每秒一次的频率写入到log file中,且同时会进行文件系统到磁盘的同步操作,但是每个事务的commit并不会触发任何log buffer 到log file的刷新或者文件系统到磁盘的刷新操作;

1:在每次事务提交的时候将log buffer 中的数据都会写入到log file,同时也会触发文件系统到磁盘的同步;

2:事务提交会触发log buffer到log file的刷新,但并不会触发磁盘文件系统到磁盘的同步。此外,每秒会有一次文件系统到磁盘同步操作。


3 缓存在框架方面的应用:待续