今天在本機上(windows)用python訪問redis出錯,有兩種類型的錯誤:
若是我配sentinel的方式,則會報 unknown command 'SENTINEL'這樣的錯誤;
若是我配StrictRedis的方式,則會報NOAUTH Authentication required.錯誤;python
mark一下,明天想辦法解決。。。。redis
ps:最終發現mongo鏈接失敗是密碼沒有設置致使(竟然是由於把線上配置當作線下配置了。。。。)
對於第一種錯誤,公司最近線上出現問題,正好遇到這樣的錯誤,主要緣由是sentinel沒啓動起來;不過這其中的過程有些坑爹,公司有3臺redis sentinel機器,其中的一臺機器宕機之後,另外兩臺機器始終沒法選舉出一臺做爲主,由於不知道哪位臨時工在作redis配置的時候把選舉機器的配置爲3,致使只要宕掉一臺就沒法選舉出來。實際上應該是把配置改成n-m, n爲機器數,m爲容許宕掉的機器數。windows
附上redis的代碼以下:socket
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)