现在的位置: 首页 > 数据库 > 正文

Redis怎样实现MongoDB的getlasterror功能

2020年07月01日 数据库 ⁄ 共 1040字 ⁄ 字号 评论关闭

  MongoDB有一个命令叫getlasterror,从名字上看它的作用好像是获取最近的一个error。但其实这是MongoDB的一种客户端阻塞的方式。下面学步园小编来讲解下Redis怎样实现MongoDB的getlasterror功能?

  Redis怎样实现MongoDB的getlasterror功能

  MongoDBdoesnotwaitforaresponsebydefaultwhenwritingtothedatabase.UsethegetLastErrorcommandtoensurethatoperationshavesucceeded.

  MongoDB在写操作时,默认不会等数据写完后才返回,你可以通过使用getLastError命令来保证你的写是成功的。

  说白了,MongoDB的写是异步的,返回给客户端成功但其写并不一定成功,而且在多个数据结点进行replication的时候,更无法保证数据同步到其它结点上。getLastError就是为此而生的,你指定一个条件,然后这个函数会一直阻塞到服务端告知这个条件满足了才会返回值。(当然,为了防止死等,这个函数还有一个超时参数),例子:

  db.runCommand({getlasterror:1,w:2})

  上面命令表示等写操作被写到两个结点再返回成功。

  这一功能使得数据安全性的保证更加灵活。

  而最近有朋友在Redis上也实现了这一功能,实现的方式不是修改Redis源码,而是使用现有的功能拼得出,具体过程如下:

  Redis怎样实现MongoDB的getlasterror功能

  1.ClientSUBSCRIBEstoKEYon*slave*

  2.ClientwritesKEY(e.g.setfoobar)tomaster

  3.ClientpublishesKEYtomaster

  由于Redis的单线程写操作,下面两个操作会被顺序执行

  4.MasterwillreplicateKEYtoslave

  5Masterwillpropogate*PUBLISHKEY*toslave

  最后,在Master同步完数据后,客户端会收到SUBSCRIBE的消息:

  6.GetsKEYeventonSUBSCRIBE!

  以上就是关于“Redis怎样实现MongoDB的getlasterror功能”的内容,希望对大家有用。更多资讯请关注学步园。学步园,您学习IT技术的优质平台!

抱歉!评论已关闭.