redis如何防止并发?
Redis是当前炙手可热的NoSQL数据库,几乎已经成为高并发、高可用系统的标配了。对Redis响应快的认知不能仅仅停留在基于内存和单线程的层面。
在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试。这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护,防止系统因为过大的流量冲击而崩溃。对于系统崩溃带来的后果,显然还是拒绝一部分请求更能被维护者所接受。
而在各种限流中,除了系统自身设计的带锁机制的计数器外,利用Redis实现显然是一种既高效安全又便捷方便的方式。
客户端加锁(ReentrantLock或synchronized)但此方式只限于单机加锁,无法解决分布式系统的并发竞争问题。
乐观锁(redis 的命令 watch)当执行多键值事务操作时,Redis 不仅要求这些键值需要落在同一个 Redis 实例上,还要求落在同一个 slot 上,所以 redis 的事务比较鸡肋,不过可以想办法遵循 redis 内部的分片算法把设计到的所有 key 分到同一个 slot。redis 的 setnx 实现分布式锁要设置超时时间,防止抢占到锁的客户端因失败、崩溃或其他原因没有办法释放锁而造成死锁。如有不同观点,欢迎发表评论。如果喜欢我的回答,欢迎“点赞、分享”。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有