分布式锁和JVM锁的一点思考

场景1:预防崩溃

高并发下使用锁机制解决服务器崩溃问题,虽然不是一个好方法,但绝对是一个可行的策略。
在并发的多个请求中,只有第一个请求线程能拿到锁并执行数据库查询操作,其他的线程拿不到锁就阻塞等着,等到第一个线程将数据写入缓存后,直接走缓存。
关于互斥锁的选择,网上看到的大部分文章都是选择 Redis 分布式锁,
但是其实仔细想想的话,这边其实没有必要保证只有一个请求走到数据库,只要保证走到数据库的请求能大大降低即可,所以还有另一个思路是 JVM 锁。JVM 锁保证了在单台服务器上只有一个请求走到数据库,通常来说已经足够保证数据库的压力大大降低,同时在性能上比分布式锁更好。

场景2:并发问题

这里的并发问题指的是:并发场景下数据读写带来的问题。
在分布式场景下由于多台主机共用同一数据库资源,此时必须使用更高层次的锁来解决并发数据问题,这里必须使用分布式锁。

锁的设计

无论是使用“分布式锁”,还是“JVM 锁”,加锁时要按 key 维度去加锁。
是使用一个“固定的 key”加锁,这样会导致不同的 key 之间也会互相阻塞,造成性能严重损耗。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容