Redis主從遇到的兩個問題解決

來源:互聯網
上載者:User

最近在使用redis主從的時候做了下面兩件事情:

1 希望redis主從從操作上分析,所有寫操作都在master上寫,所有讀操作都在從上讀。

2 由於redis的從是放在本地的,所以有的key的讀寫操作就直接放在從上操作了。

但是出現了下面的幾個問題:

1 在主上setex的key即使到期後在從上也始終get的到。

重現:

主: 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是否已經到期

查了下,也有人吐槽這個問題:http://code.google.com/p/redis/issues/detail?id=519

2 在從上進行讀寫操作,到期時間不生效

重現:

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上觸發上面兩個條件,在從中就永遠會被取到。。。

這真是個很容易踩到的坑啊。。。

推薦閱讀:

Ubuntu 12.10下安裝Redis(圖文詳解)+ Jedis串連Redis

Redis系列-安裝部署維護篇

CentOS 6.3安裝Redis

分場合可以對關聯式資料庫起到很好的補充作用。它提供了Python,Ruby,Erlang,PHP用戶端,使用很方便。

Redis 的詳細介紹:請點這裡
Redis 的:請點這裡

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.