python訪問redis的問題

jerrychiang發表於2017-02-08

今天在本機上(windows)用python訪問redis出錯,有兩種型別的錯誤:
如果我配sentinel的方式,則會報 unknown command `SENTINEL`這樣的錯誤;
如果我配StrictRedis的方式,則會報NOAUTH Authentication required.錯誤;

mark一下,明天想辦法解決。。。。

ps:最終發現mongo連線失敗是密碼沒有設定導致(居然是因為把線上配置看成線下配置了。。。。)
對於第一種錯誤,公司最近線上出現問題,正好遇到這樣的錯誤,主要原因是sentinel沒啟動起來;不過這其中的過程有些坑爹,公司有3臺redis sentinel機器,其中的一臺機器當機以後,另外兩臺機器始終無法選舉出一臺作為主,因為不知道哪位臨時工在做redis配置的時候把選舉機器的配置為3,導致只要宕掉一臺就無法選舉出來。實際上應該是把配置改為n-m, n為機器數,m為允許宕掉的機器數。

附上redis的程式碼如下:

import redis
import ConfigParser
import redis.sentinel


class RedisConn:
    _rp = None

    def __init__(self):
        cp = ConfigParser.SafeConfigParser()
        cp.read(`avatar_redis.conf`)
        host = cp.get(`redis`, `host`)
        port = cp.get(`redis`, `port`)
        db_name = cp.get(`redis`, `dbName`)
        pass_word = cp.get(`redis`, `passWord`)
        self._rp = redis.StrictRedis(host=host, port=port, db=0, password=pass_word)
        # = redis.ConnectionPool(host=host, port=port, db=0, password=``)
        #sentinel = redis.sentinel.Sentinel([(host, port)], socket_timeout=0.1)
        #self._rp = sentinel.master_for(db_name, socket_timeout=0.1)
        #self._rp = redis.Redis(connection_pool=conn_pool)

    def get_conn(self):
        return self._rp

    def set_value(self, key, value):
        self._rp.set(key, value)

    def get_value(self, key):
        return self._rp.get(key)

相關文章