高并发存在的问题
同时向服务器发起的请求过多,导致服务器或者数据库崩溃宕机
并发时,多个线程对相同资源进行访问,此时,线程安全问题出现可能出现,导致数据异常
高并发解决方法
面对第一种情况,可以分三个方面进行优化
1.nginx+负载均衡,分发请求到不同的服务器(一般这种方法是运维考虑的)
2.提高程序效率
a.优化代码,减少程序执行时间,以减小单位时间内的并发数
b.使用连接池,限制连接数
c.优化代码中的SQL,减少与数据库交互的时间
d.对于不需要实时同步的数据,可以多采用定时任务去同步
f.不考虑线程安全的地方,可以考虑异步处理
3.优化数据库设计
a.给经常需要查询的字段添加索引,提高查询效率(需要添加合适的索引,不恰当的索引有可能引起反效果,索引过多也会一定程度上降低更新或插入操作)
b.分库分表(并发数很大,或者数据库表存储记录太多时)
c.尽量使用正确存储数据的最小数据类型
面对地二种情况,可以分两个方面进行规避
1.在程序方面规避
a.对多个线程可能同时请求的资源加锁。保证数据的一致性
b.使用线程安全的数据结构
c.单线程排队处理发往服务器的请求(不建议,速度太慢了)
d.使用redis缓存数据(redis单线程,且处理速度快)redis解决高并发问题实例
2.在数据库方面规避
a.特定场景下可以用加唯一索引的方式来保证线程安全。