高并发(High Concurrency)
即在同一时间段,有大量请求
处理高并发常见的有三种手段:
1、提高单机服务器配置
2、增加服务器数量
3、应用层利用缓存减少IO次数,提高并发访问处理速度(推荐redis做缓存)
这里主要讲应用层如何利用缓存减少IO次数提高效率
利用单例缓存原理:
1、这里我们需要用到单例缓存(Map<String,Object>)做应用的缓存系统,将数据保存在内存中。
2、不会被修改的数据,可以在服务器启动时将数据读取到单例缓存中,再之后的操作中,只需要读取缓存中的数据,不需要再访问数据库。
3、其他数据,这里我们需要注意一点,一张表,在同一个时间,只能有一个请求去操作这张表。 这里分为两种情况:
1)首次访问为读取:
我们首次读取这条数据时,读取后,放入缓存中,下次优先读取缓存中数据。
2)首次访问为修改:
这里会有两个数据库操作,先修改后读取,对这两个操作进行synchronized加锁数据混乱。
进来的请求先对数据库进行修改操作,接着读取这条数据,放入内存中,以便于下次访问
利用redis做缓存原理:
1、这里需要利用redis配合java应用做缓存处理,首先我们要知道为什么选redis,redis是数据库的一种,但是又区别于数据库,redis的数据是放在内存中的,做持久化保存。
2、不会被修改的数据,可以在服务器启动时将数据读取到缓存中,再之后的操作中,只需要读取缓存中的数据,不需要再访问数据库。
3、redis适合利用分布式锁去处理高并发,利用redis单线程的机制去控制请求操作数据,同时redis可承载量远超普通db
4、如果请求量超过redis承载量,这时候我们需要使用消息队列,让请求都站好,好好的排队,也是秒杀常用的方案