一個(gè)更有趣的示例程序
我們上邊寫的那個(gè)示例程序不夠好玩。他以簡單的方式寫入到集群而沒有檢查寫入的正確性。
從我們的觀點(diǎn)看,集群接收寫入命令可能每次操作總是把鍵foo寫入 為42,并且我們一點(diǎn)也沒有注意到。
所以在redis-rb-cluster庫內(nèi),有一個(gè)更有趣的應(yīng)用程序consistency-test.rb。他使用了一組計(jì)數(shù)器,默認(rèn)是1000,并且發(fā)送INCR命令來增加計(jì)數(shù)器。
然而除了寫入命令,這個(gè)程序還做了其它的兩件事:
》當(dāng)計(jì)數(shù)器被 INCR更改,這個(gè)程序?qū)⒂涀∵@次寫入。
》每次寫入都會(huì)讀取一個(gè)隨機(jī)的計(jì)數(shù)器,并且檢查他的值是否是預(yù)期的值,并和內(nèi)存中的值進(jìn)行對(duì)比。
這意味著這是一個(gè)簡單的一致性檢查程序,并且這個(gè)程序會(huì)告訴你集群是否有丟失寫入,或者有收到寫入但沒有收到確認(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) |
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式