wangwenjun69
wangwenjun69
采纳率0%
2011-03-14 22:55 阅读 189
已采纳

关于缓存的问题

看了一些缓存的东西,但是我有些不明白的地方,向大家请教,比如现在有很多缓存解决方案,诸如oscache,ehcache等等,我使用过,主要是用来往磁盘持久化的,但是我看了很多的介绍,大多作为内存的缓存,包括apache的对象池等,我疑惑的内存的缓存,可以放在数组中或者容器中(list,map)这样可以满足内存的缓存啊!为什么那么多的框架还需要提供解决方案呢?请各位给一个让我明白或者恍然大悟的答案!谢谢各位高手了!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    iteye_16421 iteye_16421 2011-03-15 13:07

    关于这个问题要看你应用的场合,如果你的系统比较小,只一台服务器就能搞定,不需要分布式的,所要求的缓存也比较小,一台机器就有搞定,那你用map就行了,没必要用其它的缓存系统,用其它的缓存系统,反而效率更低。

    如果你的系统比较大,有多台服务器要需去共享缓存中的数据,那么你的缓存系统就需要基于网络连接方式完成服务,最好支持分布式,将来可以方便的扩展缓存大小,并且这些缓存系统提供了缓存的策略,无需你去释放内存,也不会存在内存溢出和内存泄露的问题。

    缓存系统都是作为数据库前端cache使用的。因为它比数据库少了很多SQL解析、磁盘操作等开销,而且它是使用内存来管理数据的,所以它可以提供比直接读取数据库更好的性能,在大型系统中,访问同样的数据是很频繁的,缓存系统可以大大降低数据库压力,使系统执行效率提升。

    另外,缓存系统也经常作为服务器之间数据共享的存储媒介,例如在SSO系统中保存系统单点登陆状态的数据就可以保存在缓存系统中,被多个应用共享。

    点赞 评论 复制链接分享
  • redstarofsleep redstarofsleep 2011-03-14 23:09

    数组中或者容器中(list,map),查找的时候的速度还是不够快吧。

    点赞 评论 复制链接分享
  • m_m1m2m3m4m5 m_m1m2m3m4m5 2011-03-14 23:42

    如果容器不够大的话缓存是需要删除的
    删除规则很复杂
    也容易内存泄露

    点赞 评论 复制链接分享
  • changchanghust changchanghust 2011-03-15 01:06

    简单来说一下
    故事的背景是这样的:
    1.缓存可以提高服务效率,所以缓存经常被使用,而且缓存的东东可能会很大;
    2.这么大的东东都憋在服务器内存里,会增加服务器的成本,和维护压力;
    3.要是每台服务器都这么搞,就相当于每台服务器上都做了个缓存的副本,这些副本的内容可能会重复,不利于数据的共享和缓存命中率的提高。
    如果把缓存东东的这块大内存抽出来,由一台或一集群的专门的服务器来维护,这个世界就清净了。
    其实这些XXcache,主要干的事情大概就是这样,在身怀巨大内存的服务器上,提供一个巨大的map,给其他服务器通过key-value的形式来存取对象。这样可能会增加一些网络调用成本,但因为这个map一般是在内存里维护的,所以速度也不会慢的令人发指。而这么做的好处,我列了一下主要有这么几点吧:
    1.集中管理内存。不需要在所有应用服务器上都整这么一套东东,配备那么大的内存等,它们就可以专注于做好自己的业务了。
    2.实现内存的共享,提高缓存命中率。
    3.提高缓存的稳定性。缓存数据不会因为某台应用服务器挂掉而丢失。当然,如果是缓存服务器挂了,缓存的东东还是会没了的。不过反正是缓存的,正版的还在数据库里存着呢,从新缓存就好。
    4.其他的应该还有,夜深了,就不列了。。。

    点赞 评论 复制链接分享
  • akunamotata akunamotata 2011-03-15 09:02

    这部分我也想看看各种解答

    点赞 评论 复制链接分享

相关推荐