1.缓存
(1)缓存原理
a.什么是缓存?(将数据存储在相对较高访问速度的介质中,以供系统处理)
b.缓存的优点:访问速度快,如果需要计算可以减少计算时间
c.缓存的本质是一张以键值对存储的内存hash表
d.主要用来存储:读写比例高,很少变化的数据
e.网站的访问遵循28定律
(2)合理使用缓存应该注意以下问题
a.频繁更新的数据(数据还没有读就已经失效,一般要求读写比在2:1以上才有意义)
b.没有热点数据(无疑浪费资源)
c.数据不一致与脏读(缓存被加载的过程中可能会产生数据不一致,有效时间过程数据在内存中就会变成脏数据)
d.缓存的可用性(如果太过依赖缓存,容易产生雪崩。使用缓存热备并不能提高缓存的可用性,使用集群可以提高可用性)
e.缓存预热(LRU计算时间过长,有的数据需要提前加载)
f.缓存穿透(解决部分数据无法命中,而加重数据库压力的问题,一般设置空值)
(3)分布式缓存架构
a.JBoss Cache:数据相同
b.Memcached:数据不同互不通信
c.Memcached5大优点:协议简单、通用性强(支持各种语言)、Libevent网络通信、内存管理高效、互不通信
2.异步操作
a.数据直接写入数据库会造成巨大的压力
b.异步可以减缓响应时间,还能提升网站性能
c.对于大型网站来说,异步可以实现削峰
3.使用集群
使单台服务处于最佳性能区间
4.数据库
大部分的服务器请求最终都是要落到数据库中,随着数据量的增加,数据库的访问速度也会越来越慢。想要提升请求处理速度,必须要对原来的单表进行动刀了。目前主流的Linux服务器使用的数据库要属mysql了,如果我们使用mysql存储的数据单个表的记录达到千万级别的话,查询速度会很慢的。
根据业务上合适的规则对数据库进行分区分表,可以有效提高数据库的访问速度,提升服务器的整体性能。另外对于业务上查询请求,在建表的时候可以根据相关需求设置索引等,以提高查询速度。
5.代码优化
a.多线程
(1)线程优于进程的原因:更轻量级、资源消耗更少、切换更容易
(2)使用多线程的原因:IO阻塞和多CPU
(3)保证线程安全的手段:无状态对象、局部对象、锁
b.数据结构
(1)Hash表数据结构:依赖于HashCode,越散列,冲突越少,读写性能越高。
(2)优化手段:Time33和信息指纹
c.资源复用:单例和线程池
d.垃圾回收:理解JVM垃圾回收机制