大数据的解决方案-------缓存和页面静态化

来源:互联网 发布:楚辞相关的著作 知乎 编辑:程序博客网 时间:2024/06/14 20:54

前言:

数据量大这个问题最直接的解决方案就是使用缓存,缓存就是将从数据库中获取的结果暂时保存起来,在下次使用时候无需重新到数据库中获取,这样可以大大降低数据库的压力。

缓存的使用方式可以分为通过程序直接保存到内存中和使用缓存框架两种方式。

—程序直接操作主要是使用Map,尤其是ConcurrentHashMap,而常用的缓存框架有Ehcache,Memcache和Redis等。缓存使用过程中最重要问题是什么时候创建缓存和缓存的失效机制。缓存可以在第一次获取的时候创建也可以在程序启动和缓存失效之后立即创建,缓存的失效可以定期失效,也可以在数据发生变化的时候失效,如果按数据发生变化让缓存失效,还可以分粗粒度失效和细粒度失效。

ps:缓存中空数据的管理方法
—如果缓存是第一次获取的时候创建的,那么在使用缓存的时候最好将没有数据的缓存使用特定的类型值来保存,因为这种方式下如果从缓存中获取不到数据就会存在数据库中获取,如果数据库中本来就没有相应的数据就不会创建缓存,这样将每次都会查询数据库。比如有个专门保存文章评论的缓存,不同的评论按照不同的文章Id来保存,如果有一篇文章本来就没有没有评论,那么就没有相应的缓存或者缓存的值为null,这样程序在每次调用这篇文章的评论时都会查询数据库。这样就没有起到缓存的作用,我们可以创建一个专门的类(如NoComment)来保存没有评论的缓存,这样程序从缓存中查询后就知道是还没有创建缓存还是本来就没有评论内容。


— 不过缓存也不是什么情况都适用,它主要用于数据变化不是很频繁的情况。而且如果是定期失效(数据修改时不失效)的失效机制,实时性要求也不能太高,因为这样的缓存中的数据和真实的数据可能不一致,如果是文章的评论则关系不是很大,但如果企业业务系统中要生成报表的数据则问题就大了。

— 跟缓存相似的另一种技术叫页面静态化,它在原理上跟缓存非常相似,缓存是将数据库中获取的数据(当然也可以是别的任何可以序列化的东西)保存起来,而页面静态化是将程序最后生成的页面保存起来,使用页面静态化后就不需要每次调用都重新生成页面了,这样不但不需要查询数据库,而且连应用程序处理都省了,所以页面静态化同时对数据量大的和并发高两大问题都有好处。
页面静态化可以在程序中使用模板技术生成,如常用的Freemarker和Velocity都可以根据模板生成静态页面,另外也可以使用缓存服务器在应用服务器上一层缓存生成的页面,如可以使用Squid,另外Nginx也提供相应功能。

0 0
原创粉丝点击