问题不用Redis的方式改善并发问题(不用redis解决并发)
随着交易并发量的不断增加,在处理海量数据时,面临着不断增加的考验,而Redis是Web开发过程中用于解决海量数据读取时出现的并发问题的首选容器,但是要想获得良好的效果,有时候,我们没有使用Redis的方式改善并发问题,这时候就需要其他方式来攻克这一坚固城堡。
细粒度的控制,尽可能的避免多个客户端并发访问同一个资源。通过分离读写操作,按自己的需求来规定读写加锁时机,使得每次只用一种读写方式,以此降低总体竞争。下面是一个简单的代码示例:
lock readLock=new ReentrantLock(); //定义一把读锁
lock writeLock=new ReentrantLock(); //定义一把写锁
//读取操作时,先用读锁加锁readLock.lock();
try { doSomething();
}finally { //读取操作完后,记得解锁
readLock.unlock();}
//写入操作时,先用写锁加锁writeLock.lock();
try { doSomething();
}finally { //写入操作完后,记得解锁
writeLock.unlock();}
可以尝试使用较高层次的并发控制方式,比如消息队列。消息队列可以让客户端异步地读写,轻松解决并发控制问题.下图是一个简单的消息队列模型:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200702141345629.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RhaXRpMDA3MQ==,size_16,color_FFFFFF,t_70)
客户端将请求放入队列,消息队列收到请求后便会调度服务器进行处理,并将结果简单反馈给客户端,由于不需要耗费时间等待服务器的处理结果,客户端就可以实现异步的请求处理,从而缓解服务器的并发压力.
此外,也可以尝试采用负载均衡等技术,将请求分发在多台服务器上.可以有效抗压软件系统,从而缓解请求处理压力并提高系统效率。
想要改善并发问题,虽然Redis是我们最常用的工具,但在某些情况下,还是需要我们借助一些更高级的技术来完成,比如细粒度的控制,消息队列,负载均衡等。