Beispiel #1
0
    def __init__(self,
                 pickle_protocol=pickle.DEFAULT_PROTOCOL,
                 namespace=None,
                 **kwargs):
        """Initialize Redis DB

        Args:
            pickle_protocol (int, optional): https://docs.python.org/3.7/library/pickle.html#data-stream-format
            namespace (str, optional): If set, key names in the Redis DB will
                be preceeded by "<namespace>:".
            **kwargs (optional): All these will be sent to redis.Redis(). See
                https://github.com/andymccurdy/redis-py for more info.
        """
        from redis import Redis

        super().__init__()
        self._pickle_protocol = pickle_protocol
        self._namespace = namespace

        # Quick check so the number of databases is sufficient
        if "db" in kwargs and kwargs["db"] > 0:
            redis_kwargs = kwargs.copy()
            redis_kwargs["db"] = 0
            redis = Redis(**redis_kwargs)
            dbs = redis.config_get("databases")
            if int(dbs["databases"]) <= kwargs["db"]:
                redis.close()
                raise ValueError(
                    f"Tried to open Redis DB #{kwargs['db']}, but there are only {dbs['databases']} databases"
                )
            redis.close()

        self._redis = Redis(**kwargs)
Beispiel #2
0
def bzpoptimed(
        r: Redis,
        key: str,
        *,
        timeout: Union[float, int] = 0) -> Optional[Tuple[bytes, float]]:
    # pylint: disable=function-redefined,missing-docstring,unused-argument; overload
    """Pop the earliest member (with score) in the sorted set at *key* as soon as it is available.

    Blocking variant of :meth:`zpoptimed`. *timeout* is the maximum number of seconds to block
    before returning ``None``, with ``0`` blocking indefinitely.
    """
    if r not in _BZPOPTIMED_CACHE:
        flags = set(r.config_get()['notify-keyspace-events']) | set('Kz')
        r.config_set('notify-keyspace-events', ''.join(flags))
        _BZPOPTIMED_CACHE.add(r)

    deadline = time() + timeout if timeout else float('inf')
    p = r.pubsub()
    p.subscribe('__keyspace@{}__:{}'.format(
        r.connection_pool.connection_kwargs['db'], key))
    while True:
        result = zpoptimed(r, key)
        if isinstance(result, tuple):
            p.close()
            return result
        now = time()
        if now >= deadline:
            return None
        sleep = max(min(result, deadline) - now, 0)
        # get_message() doesn't provide a way to block indefinitely, so just sleep very long
        p.get_message(timeout=60 * 60 if isinf(sleep) else sleep)
Beispiel #3
0
class BaseTest(unittest.TestCase):
    CAPACITY = 10000
    ERROR_RATE = 0.1
    KEY = b'pyreBloomTesting'

    def setUp(self):
        self.bloom = PyreBloom(self.KEY, self.CAPACITY, self.ERROR_RATE)
        self.redis = Redis()

    def tearDown(self):
        """Remove the bloom filter at the provided test key in all databases"""
        databases = int(self.redis.config_get('databases').get('databases', 0))
        for db in range(databases):
            PyreBloom(self.KEY, 1, 0.1, db=db).delete()
Beispiel #4
0
class BaseTest(unittest.TestCase):
    CAPACITY = 10000
    ERROR_RATE = 0.1
    KEY = b'pyreBloomTesting'

    def setUp(self):
        self.bloom = PyreBloom(self.KEY, self.CAPACITY, self.ERROR_RATE)
        self.redis = Redis()

    def tearDown(self):
        """Remove the bloom filter at the provided test key in all databases"""
        databases = int(self.redis.config_get('databases').get('databases', 0))
        for db in range(databases):
            PyreBloom(self.KEY, 1, 0.1, db=db).delete()
Beispiel #5
0
class BaseTest(unittest.TestCase):
    CAPACITY = 10000
    ERROR_RATE = 0.1
    KEY = 'ibloomTesting'

    def setUp(self):
        self.bloom = IBloom(self.KEY, self.CAPACITY, self.ERROR_RATE, HOST,
                            PORT)
        self.redis = Redis(host='127.0.0.1', port=6383)

    def tearDown(self):
        """Remove the bloom filter at the provided test key in all databases"""
        databases = int(self.redis.config_get('databases').get('databases', 0))
        for db in range(databases):
            self.bloom.delete()
Beispiel #6
0
def get_databases_of_server(server_id):
    q = RedisServer.query.get(server_id)
    if q.password:
        redis = Redis(host=q.host, port=q.port, password=q.password)
    else:
        redis = Redis(host=q.host, port=q.port)
    db_count = int(redis.config_get('databases')['databases'])

    data = []
    for i in range(db_count):
        if q.password:
            redis = Redis(host=q.host, port=q.port, password=q.password, db=i)
        else:
            redis = Redis(host=q.host, port=q.port, db=i)
        if redis.dbsize() > 0 or i == 0:
            data.append(
                {
                    'leaf': True,
                    'label': i,
                    'value': i
                }
            )
    return success_json(data=data)
Beispiel #7
0
import sqlite3
from redis import Redis
from conn import SQLITE_DB_URI

client = Redis()
cf = 'stop-writes-on-bgsave-error'
if client.config_get(cf).get(cf) == 'yes': client.config_set(cf, 'no')


class RedisClient():
    def table(self, table):
        """
        # 切换表
        :param table:
        :return:
        """

        self.__table = table
        return self

    def pop(self, left=False):
        """
        从指定方向弹出一条
        :param left:
        :return:
        """
        if left: row = client.lpop(self.__table)
        else: row = client.rpop(self.__table)
        if row: return row.decode('utf-8')
        return None
Beispiel #8
0
from random import randint

from redis import Redis

redis = Redis()
cf = 'stop-writes-on-bgsave-error'
if redis.config_get(cf).get(cf) == 'yes': redis.config_set(cf, 'no')

table = 'proxies'


class RedisClient():
    def pop(self, left=False):
        """
        从指定方向弹出一条
        :param left:
        :return:
        """
        if left: row = redis.lpop(table)
        else: row = redis.rpop(table)
        if row: return row.decode('utf-8')
        return None

    def put(self, row, left=True):
        """
        从指定方向添加一条数据
        :param proxy:
        :param left:
        :return:
        """
        if left: return redis.lpush(table, row)