1、相关内容算法
后台性能优化的第必定律:优先考虑使用缓存优化性能。数据库
2、缓存的本质缓存
缓存的本质就是一个内存Hash表,数据以一对KeyValue键值对存储在内存Hash表中。主要用户存放读写比很高、不多变化的数据,网站数据一般遵循“二八定律”,即80%的访问落在20%的数据上,所以,将这20%的数据缓存起来,能够很好的改善系统性能。性能优化
3、合理的使用缓存服务器
合理的使用缓存对提升系统性能有不少好处,可是不合理的使用缓存反而会成为系统的累赘甚至风险。滥用缓存的三种状况以下:架构
数据的读写比至少应该是2:1以上,即写入一次缓存,在数据更新前至少读写两次,缓存才有意义。真正实践中这个比例可能会更高。并发
若是应用系统访问数据没有热点,不遵循二八定律,即大部分数据访问并无集中在小部分数据中,那么缓存也没有意义,由于大部分数据尚未被再次访问就已经被挤出缓存了。分布式
写入缓存的数据最好能容忍必定时间的数据不一致,通常状况下最好对缓存的数据设置失效时间(固定值+必定范围的随机值)。若是不能容忍数据的不一致,必须在数据更新时,删除对应的缓存(思考:为何不是更新缓存),可是这种状况只针对读写比很是高的状况。性能
四:缓存的常见问题优化手段优化
缓存雪崩咱们能够简单的理解为:因为原有缓存失效,新缓存未到期间(例如:咱们设置缓存时采用了相同的过时时间,在同一时刻出现大面积的缓存过时),全部本来应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存形成巨大压力,严重的会形成数据库宕机。从而造成一系列连锁反应,形成整个系统崩溃。
该类问题的解决方式主要有三种:
①加锁排队。大概原理是在去数据库取数据的时候加锁排队,该方法仅仅适用于并发量不高的状况。
②在原有失效时间基础上加一个合理的随机值(0-5分钟)。分布式场景下最多见的方式(单机也能够)。
③给缓存加标记,在缓存失效以后更新缓存数据。
缓存穿透是指用户查询数据,在数据库没有,天然在缓存中也不会有。这样就致使用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,而后返回空(至关于进行了两次无用的查询)。
该类问题的主要解决方式。
①使用布隆过滤器作过滤。该方法仅仅用于查询一个不可能存在的数据。
②把不存在的数据也缓存起来。最佳实践:单独设置比较短的过时时间,好比说五分钟。
缓存中存放的是热点数据,热点数据又是缓存系统利用某种算法对不断访问的数据筛选淘汰出来的,在重建缓存数据的过程当中,系统的性能和数据库负载都不太好,那么多好的方式就是在缓存系统启动的时候就把热点数据加载好,这个缓存预加载的手段叫作缓存预热。对于一些元数据如省市区列表,类目信息,就能够在启动的加载数据库中的所有数据。
5、分布式缓存架构
分布式缓存是指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务,其架构方式有两种:
①以JBosss Cache为表明的须要更新同步的分布式缓存(在全部服务器中保存相同的缓存数据)。
②以Memcache为表明的互不通讯的分布式缓存(应用程序经过一致性Hash等路由算法选择缓存服务器远程访问远程数据,能够会容易的扩容,具备良好的可伸缩性)。