« 上一篇下一篇 »

认识了解数据缓存

很多时候,即使我们对数据库的设计和部署采用了很多性能优化策略,但是每次读取数据时候还是得从数据库中去检索,这不仅仅使i/o操作更加频繁,还导致了很大的网络开销和CPU的开销。网站建设的技术人员应该尽量活跃数据缓存。

如果将请求所需的数据保存在应用服务器的内存中,无疑会对性能提升有很大的帮助!尽管数据库产品(例如SQL Server)在检索数据的时候,已经将数据从磁盘中读取到了内存缓冲中,可由于数据库要处理很多的请求,并且SQL Server会根据相应的策略将数据从缓冲中释放,为其他的请求提供内存缓冲区,而且,在内存中缓存什么数据,缓存多长时间也是根据应用程序的业务而定的,所以,需要我们在程序中使用一定的缓存策略来提升性能!

提到缓存,就有几个问题需要回答:缓存什么数据?缓存多少数据?数据缓存多长时间?如果缓存的数据在数据库中已经被修改,如何处理?如何在多台服务器之间共享缓存数据?

下面就来一一回答上面的问题。

1缓存什么数据

缓存什么数据,这是根据实际情况而定的,但是,有一点是相同的:将公共的、使用频繁的数据缓存起来。很多时候,对于如何判断数据是否使用频繁是个很大的难题,这个往往是要分析应有程序的用户数据才能发现的。在初期,可以对应用中的核心功能所使用的公共数据进行缓存;在一个用户量比较大或活跃用户比较多的系统中,可以为活跃用户缓存数据。

另外,关于缓存多少数据这个问题,一方面要考虑系统运行的计算机的内存大小;另一方面,也需要根据系统本身而定。原则是:尽可能多地缓存使用频繁的数据!这可以和第一个问题综合考虑。

2.数据缓存多长时间

在缓存世界中,有一个“5分钟法则”:如果一条记录被频繁的访问,就应该放在内存中,否则,就应该放在硬盘上按需访问,这个临界点就是5分钟。

在我们的系统中,有时候,对常用的数据只要缓存很短的时间(可能不是5分钟),就能使性能产生很大的提升,例如,某个页面,每秒的访问量是1000次,那么就需要从数据库中去获取1000次,如果将此页面中所需要的数据缓存1秒,那么其余的999就都是从缓存读取的,这样性能的提升就很大了,如果站点的访问量更大,性能的提升也就越明显!

3.如果缓存的数据在数据库中已经被修改,如何处理很多的缓存API是有通知机制的,即在缓存中的数据失效之后,清除缓存。当然,我们也可以自己编写轮询机制。

4.为了节省内存,如何在多台服务器之间共享缓存数据。常见的缓存技术就是分布式缓存,已经提到过有关分布式缓存的话题,这里就不再赘述。

下面就介绍一种分布式缓存技术:Memcached的应用。

在使用Memcached技术的时候要注意两大影响,即查询影响和插人影响。

*查询影响:查询之前,要在Memcached中查找结果。如果找到,则返回相应的结果;如果未找到,则到数据库服务器上执行查询,并将结果返回给Memcached。

*插人影响:先把数据插人到数据库,然后在内存中将受此影响的数据库变成无效。

*对用户请求的数据进行分析,找出频繁被请求的数据,并且将之缓存起来。

*用户下次在请求数据时不再访问底层的数据库,而是直接从缓存中获取数据。

« 上一篇下一篇 »