一.使用mysql的悲观锁和乐观锁
悲观锁:其实就是变相的排他锁
乐观锁:保证了你要更新的数据和你查询的数据是一致的,可能导致更新失败
总结:写用悲观锁,读用乐观锁
二.go语言自带协程
使用go关键字创建协程,主协程不会等待子协程结束,所以需要用到chan关键字来实现主协程的等待
三.redis实现分布式锁
setnx拿到锁,进行加减。添加trycatch防止服务中断无法释放锁,每个锁对应自己的key防止释放其他线程的锁。创建额外线程监听锁延长锁的时间(redission)
一.使用mysql的悲观锁和乐观锁
悲观锁:其实就是变相的排他锁
乐观锁:保证了你要更新的数据和你查询的数据是一致的,可能导致更新失败
总结:写用悲观锁,读用乐观锁
二.go语言自带协程
使用go关键字创建协程,主协程不会等待子协程结束,所以需要用到chan关键字来实现主协程的等待
三.redis实现分布式锁
setnx拿到锁,进行加减。添加trycatch防止服务中断无法释放锁,每个锁对应自己的key防止释放其他线程的锁。创建额外线程监听锁延长锁的时间(redission)