赞
踩
当出现修改的请求时,建议直接将redis的数据清空,待之后客户查询不到时再向磁盘(一般是配合mysql),将数据存放到缓存中来。而不是直接进行redis的修改。因为清空相比修改更简单。
那么针对修改数据有两种手段。一是先操作redis,一是先操作mysql。
先操作redis
可能出现的问题:
假设此时有两个线程,一个线程修改了数据库的内容。那么会先和redis发起通信。会把redis的数据清空。之后向数据库进行修改操作。但是如果在这个阶段,出现了网络波动。导致redis没来得及和数据库交互。而同时又有一个线程想要读取数据。那么就会读到修改前的旧数据了。导致数据不一致问题。
如何解决:
等到数据库将新的数据返回给redis之后,再将数据清空。保证了redis里不会有旧的数据了,虽然有加锁保证强一致性的操作,但是这样会大大影响效率。不建议。
先操作数据库
当线程1发起修改操作的请求给数据库后。数据库会进行修改并返回给redis,要求redis删除数据。如果在数据库同步数据之前,有线程2进行读操作,那么可能会读到旧数据。但是这个手段保证了最终的数据一致性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。