Redis脏读是一种指当多个事务同时从Redis的数据库中读取数据的情况下,某个事务读取到的数据是其他事务提交的,而没有被提交事务执行修改过的。 Redis脏读会导致系统数据不一致,甚至出现无法预料的异常。
当使用Redis数据库时,我们必须确保Redis脏读不会带来问题。最佳实践是使用可重复读事务(RR)。RR事务提供了一种在重复读取上保持数据一致性的机制,即在进行两次读取之间,不允许任何更新操作。
但是,当执行RR事务时,我们必须小心避免死锁的发生。对于任意两个事务A和B,两个事务都不会被阻塞,直到所有乐观锁被释放,所有更新事务也被提交为止。为了保证避免死锁发生,我们可以使用最佳实践:在执行RR事务时,维持活锁,即确保修改需要被写入到Redis中。
举个例子,当我们请求Redis内的某个对象存储的值的时候,使用活锁可以确保获得的值为其他事务提交的值,而不是其他事务执行的而没有被提交的修改值。 实现活锁的方法相对简单:使用Redis的SETNX函数即可,使用SETNX函数可以将一个新的唯一的ID写入到Redis中。
例如:
int lockTimeOutMillis = 15000;
String prefix = "lock:";
// Get a lock:
String lockName = prefix + thekey;
String lockTime = String.valueOf(System.currentTimeMillis() + lockTimeOutMillis);
if (jedisClient.setnx(lockName, lockTime) == 1) {
// lock obtned
// run protected code
// release lock
...
}
当同时访问Redis数据库时,我们可以使用RR事务来保持数据一致性,避免Redis脏读问题。同时,我们还需要使用活锁来确保数据一致性,保证我们读取Redis中的值都是最新写入的,防止Redis脏读的发生。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
本文名称:的考虑考虑Redis脏读看看什么才是最佳实践(对redis脏读)
新闻来源:http://www.mswzjz.cn/qtweb/news3/365103.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能