【夯实Redis】Redis并发竞争问题
目录
多个系统实例同时并发的更新一个KEY,那么本来应该先到数据库的数据结果后来到了,只要顺序错了,数据库错了。
悲观锁解决方案
使用MySQL悲观锁。
使用Redis锁
在操作数据库之前,先获取Redis的分布式锁。确保同一时刻只有同一个系统实例在操作某个KEY。别的系统实例都不允许写。
乐观锁解决方案
在读某个KEY的时候,会把这个KEY对应的值以及时间戳放入缓存。
在写某个KEY的之前,先在缓存中读取这个KEY以及这个KEY的对应的上次更新时间戳。
然后在执行业务操作,在业务执行操作后提交数据库之前,先查看缓存中的KEY与之前的KEY是否一样。
如果不一样说明在此期间有其它线程更新过了这个KEY,那么就不能执行写入操作。需要重新读取最新的这个KEY的数据,然后再循环操作。