一個(gè)更有趣的示例程序
我們上邊寫(xiě)的那個(gè)示例程序不夠好玩。他以簡(jiǎn)單的方式寫(xiě)入到集群而沒(méi)有檢查寫(xiě)入的正確性。
從我們的觀點(diǎn)看,集群接收寫(xiě)入命令可能每次操作總是把鍵foo寫(xiě)入 為42,并且我們一點(diǎn)也沒(méi)有注意到。
所以在redis-rb-cluster庫(kù)內(nèi),有一個(gè)更有趣的應(yīng)用程序consistency-test.rb。他使用了一組計(jì)數(shù)器,默認(rèn)是1000,并且發(fā)送INCR命令來(lái)增加計(jì)數(shù)器。
然而除了寫(xiě)入命令,這個(gè)程序還做了其它的兩件事:
》當(dāng)計(jì)數(shù)器被 INCR更改,這個(gè)程序?qū)⒂涀∵@次寫(xiě)入。
》每次寫(xiě)入都會(huì)讀取一個(gè)隨機(jī)的計(jì)數(shù)器,并且檢查他的值是否是預(yù)期的值,并和內(nèi)存中的值進(jìn)行對(duì)比。
這意味著這是一個(gè)簡(jiǎn)單的一致性檢查程序,并且這個(gè)程序會(huì)告訴你集群是否有丟失寫(xiě)入,或者有收到寫(xiě)入但沒(méi)有收到確認(rèn)。在第一個(gè)示例我們將看到一個(gè)計(jì)數(shù)器有一個(gè)值,這個(gè)值小于我們記住的的值,第二個(gè)示例這個(gè)值比記住的值大。
運(yùn)行consistency-test 程序,每秒種將產(chǎn)生一行輸出:
$ ruby consistency-test.rb925 R (0 err) | 925 W (0 err) |5030 R (0 err) | 5030 W (0 err) |9261 R (0 err) | 9261 W (0 err) |13517 R (0 err) | 13517 W (0 err) |17780 R (0 err) | 17780 W (0 err) |22025 R (0 err) | 22025 W (0 err) |25818 R (0 err) | 25818 W (0 err) |