最近在使用redis主從的時候做了下面兩件事情:
1 希望redis主從從操作上分析,所有寫操作都在master上寫,所有讀操作都在從上讀。
2 由於redis的從是放在本地的,所以有的key的讀寫操作就直接放在從上操作了。
但是出現了下面的幾個問題:
重現:主: setex abc 20 test
從:get abc >> test
ttl abc >> 18
...ttl abc >> -1
get abc >> test (這裡竟然還有~!)
主:get abc >> nil
從:get abc >> nil
所以如果只在從上獲取乙個key需要根據get+ttl來判斷乙個key是否已經過期
查了下,也有人吐槽這個問題:
重現:redis 127.0.0.1:6379> get abctest
(nil)
redis 127.0.0.1:6379> setex abctest 20 test
ok redis 127.0.0.1:6379> get abctest
"test"
redis 127.0.0.1:6379> ttl abctest
(integer) 10
redis 127.0.0.1:6379> ttl abctest
(integer) -1
redis 127.0.0.1:6379> get abctest
"test" (這裡竟然還取得出來。。)
這個現象就是像說從從來不負責刪除key,刪除key只是主負責的。而由於redis自身刪除key的機制是
1 隨機選取一定比例的過期key
2 get觸發過期刪除。
所以導致在master上設定了過期的key如果不在master上觸發上面兩個條件,在從中就永遠會被取到。。。
這真是個很容易踩到的坑啊。。。
記錄下jedis遇到的兩個坑
做的專案為乙個olap平台專案 首先環境中使用的是redis集群,主要作用是用來儲存query的結果,用來遇到相同查詢時使用快取來回答 1 第乙個坑 在刪除時,jedismoveddataexception moved 掃瞄所有的key時有keys 和scan 兩種方法,由於專案中存進redis的k...
兩個正則坑
先看第乙個,var re d d var r1 re.test 010 12345 console.log r1 結果控制台給出false。問題在哪?發現把逗號後的空格刪了就好了。習慣性在逗號後敲空格了,尤其是es6對物件進行擴充套件以後,以後不能這樣子了。接下來看個比較難的,零寬正向斷言,不熟悉的...
使用JTable過程中遇到的兩個坑
大坑1 jscrollpane.setcolumnheaderview 在jtable被加入之後無法生效。jtable在加入到jscrollpane中之後,會自動產生乙個關聯的tableheader,但該tableheader並不是jscrollpane的columnheaderview,因為nul...