redis主從遇到的兩個坑

2021-09-23 19:02:44 字數 964 閱讀 5279

最近在使用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...