首页 >后端开发 >Python教程 >python访问redis的问题

python访问redis的问题

高洛峰
高洛峰原创
2017-02-15 14:59:141674浏览

今天在本机上(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)

更多python访问redis的问题 相关文章请关注PHP中文网!


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn