●(1)缓存 本地缓存或者集中式缓存,减少网络IO,基于内存读取数据。大部分场景有效。 ●(2)读写分离 采用读写分离,分而治之,增加机器的并行处理能力。
1、使用redis.setnx(key,value)
弊端:加锁后,后续业务代码发生异常,所以要加try{}catch{}finally{redis.delete(key)}
2、第一种方法,如果加锁后,服务宕机,则finally执行不到该key就无法释放,所以要加过期时间
使用redis.setnx(key,value,expire)
3、第二种方法存在的问题现象:如果某一线程在加锁后的业务逻辑执行时间超过上锁时间;
异常发生:就会导致第一个线程执行到最后finally里删除key的时候,将后面线程的key删掉,这样就会级联