关于缓存的一些问题!请大牛指点!

现在给的模式是这样,在高并发的情况下,使用缓存减少对数据库的交互,从而提高速度。

    那就是在数据库中读取一些常用的数据作为缓存,放到相关的服务器中。用户操作的数据以缓存中的数据为主,数据库只作为辅助作用。

    问题:

    什么时候缓存数据:(答不上来)

    缓存一般存什么数据:存一些在特定的时间点不改变的,使用率高的数据

    存多久:看数据的类型而定,不怎么改变的or改变频率高的

    什么样的数据需要存入数据库中:(答不上来)

    缓存与数据库交互的时机:在缓存框架中使用监听器(满足你指定的条件,如缓存达到了多少G...)

    清理缓存的时机:定期对缓存中的数据进行采样,清理掉一些不常用的数据

    使用此模式的优缺点:

    优点:减少对数据库的交互,获取数据的速度快
    缺点:服务器宕机则缓存数据丢失-----------备份缓存数据则提高成本

    以上的问题,回答都是自己整理的,肯定有不足之处或者是错的地方,还有一些答不上来,希望知道的大牛能不吝赐教!谢谢!

评论内容:

评论1:

如果系统并发量很大,并且数据库已经到了瓶颈了,可以考虑缓存。

关于缓存存多久,应该跟业务逻辑结合,有些数据不经常变,可以存很长时间,有些相对来说变动频繁的,可以存时间短一些。

而有些数据是不能缓存的,例如,用户支付信息,涉及到钱相关的,都不能缓存。

如果使用Memcached或Redis的话,这种缓存系统是可以把数据定期缓存到文件系统,就算宕机重启,也可以一定程度上恢复之前的缓存数据。

 
  •  评论2:
     
    根据自己的构架对每一个分层的数据中,那些相对不会经常变动,或者可以允许变动有一定滞后性的数据,进行缓存,还要提供清除cache的接口,根据不同的业务提供不同的缓存时间。
  •  
     

    1. 收到请求,先查询缓存,查询不到,查询磁盘(MYSQL等数据库),查询出来,把数据放入缓存,便于下一次请求使用

    2. 缓存预热,对于比较变化小,查询量大的数据,可以服务启动前把数据先 load 到 cache,名为预热

    3. 对于 MC(memcached)尽量使用一致性 hash 算法,避免MC服务器down机,缓存大面积的失效。

    4. 使用缓存集群,缓存分布在多个服务器上,增加可用性

  •  
     
    我做过一次缓存,是仿照hibernate的,是按照SQL的解析和查出的值保存在缓存中的,用LRU算法,当出现更新,删除的操作时,就清空缓存。你说的存一些在特定的时间点不改变的,使用率高的数据,其实表达的是二级缓存,缓存也有一级和二级的区分。
原文地址:https://www.cnblogs.com/rainy-shurun/p/5403435.html