>  기사  >  백엔드 개발  >  Python이 Redis에 액세스하는 데 문제가 있습니다.

Python이 Redis에 액세스하는 데 문제가 있습니다.

高洛峰
高洛峰원래의
2017-02-15 14:59:141648검색

오늘 이 컴퓨터(windows)에서 Python을 사용하여 redis에 액세스할 때 오류가 발생했습니다. 오류에는 두 가지 유형이 있습니다.
sentinel을 구성하면 알 수 없는 명령 'SENTINEL'과 같은 오류가 보고됩니다. 🎜>StrictRedis를 구성하면 NOAUTH 인증이 필요하다는 오류가 보고됩니다.

이를 표시하면 내일 해결책을 찾을 수 있습니다. . . .

ps: 비밀번호가 설정되지 않아 몽고 연결이 실패한 사실이 드디어 밝혀졌습니다(실제로는 온라인 구성을 오프라인 구성으로 간주했기 때문이었습니다...)

첫 번째 오류에 대해 회사에서는 최근에 온라인에 접속했는데 이런 오류가 발생했습니다. 주된 이유는 sentinel이 시작되지 않았기 때문입니다. 그러나 회사에서는 세 대의 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)
Python이 Redis에 액세스하는 것과 관련된 더 많은 문제는 PHP 중국어 웹사이트에서 관련 기사를 참고하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.