예제 #1
0
파일: cache.py 프로젝트: aehuynh/scavenger
class IndexCache(object):

    def __init__(self, host, port):
        self.client = StrictRedis(host=host, port=port, db=0)


    def build(self, doc_word_scores):
        """Clears the entire store and adds all the doc_word_scores into a
        hash table in the store.

        :param doc_word_scores: dictionary of dictionaries that looks like:
                    doc_word_scores[word][doc_id] = score of word in that
                                                    document
        """
        self.reset()

        for word, doc_id_score in doc_word_scores.items():
            # Add table name to word
            word_key = DOCUMENT_WORD_SCORE_NAME + word
            self.client.hmset(word_key, doc_id_score)

        self.save_to_disk()

    def reset(self):
        """Deletes all keys in this DB.
        """
        self.client.flushdb()

    def save_to_disk(self):
        """Asyncronous write to disk for persistent storage.
        """
        self.client.bgsave()

    def to_dict(self):
        """Returns the "doc_word_scores" table in Redis in dictionary form.
        """
        doc_word_scores = {}

        for word_key in self.doc_word_scores_iter():
            # Remove the table name from the key
            word = word_key.replace(DOCUMENT_WORD_SCORE_NAME, "")

            # Grab the {doc_ids : scores} dictionary for word
            doc_word_scores[word] = self.client.hgetall(word_key)

        return doc_word_scores

    def doc_word_scores_iter(self):
        """Returns an iterator for the keys of all the words stored in Redis
        """
        return self.client.scan_iter(match=DOCUMENT_WORD_SCORE_NAME + "*")

    def is_empty(self):
        return self.client.dbsize() <= 0

    def doc_scores(self, word):
        """Returns a hash table of document_ids mapping to scores
        """
        word_key = DOCUMENT_WORD_SCORE_NAME + word
        return self.client.hgetall(word_key)
예제 #2
0
def string():
    redis = StrictRedis(host='localhost', port=6379, password='', db=0)
    # result=redis.set('name','zengshuai')
    # print(result)
    # redis.set('age',25)
    # redis.set('gender','male')
    # redis.set('score',100)

    #通用方法
    print(redis.exists('name'))
    print(redis.type('name'))
    print(redis.keys('a*'))  #a 开头的 键值
    print(redis.randomkey())  #随机取一个键值
    # redis.rename('score','English')  #重命名
    # print(redis.get('English'))
    print(redis.dbsize())  #size
    redis.expire('English', 2)  #设置键值过期时间
    print(redis.ttl('English'))  #获取键值过期时间

    redis.move('age', 1)  #将键移动到其他数据库
    # redis.flushdb()  #清空本数据库
    # redis.flushall() #清空所有数据库

    #字符串操作
    redis.getset('name', 'kate')
    print(redis.get('name'))
예제 #3
0
def check_redis(ip):
    try:
        redis = StrictRedis(host=ip, port=6379, db=0, password='')
        redis.set('name', 'BKB')
        print(redis.get('name'))
        print(redis.dbsize())
        click.secho('[+] 存在reids未授权:', fg='red')
    except:
        print('[-] -> 不存在reids未授权')
예제 #4
0
def check_redis(ip):
    try:
        redis = StrictRedis(host=ip,port=6379,db=0,password='')
        if(redis.dbsize()):
            return True
        else:
            return False
    except:
        return False
예제 #5
0
파일: __init__.py 프로젝트: ui/rq-scheduler
def find_empty_redis_database():
    """Tries to connect to a random Redis database (starting from 4), and
    will use/connect it when no keys are in there.
    """
    for dbnum in range(4, 17):
        testconn = StrictRedis(db=dbnum)
        empty = testconn.dbsize() == 0
        if empty:
            return testconn
    assert False, 'No empty Redis database found to run tests in.'
예제 #6
0
파일: __init__.py 프로젝트: fengpf/py
def find_empty_redis_database():
    """Tries to connect to a random Redis database (starting from 4), and
    will use/connect it when no keys are in there.
    """
    for dbnum in range(4, 17):
        testconn = StrictRedis(db=dbnum)
        empty = testconn.dbsize() == 0
        if empty:
            return testconn
    assert False, 'No empty Redis database found to run tests in.'
예제 #7
0
파일: redisUtil.py 프로젝트: EudemonW/spc
class redisUtil:
    def __init__(self):
        self.redis = StrictRedis(host='localhost', port=6379, db=0)

    def setValue(self, key, value):
        self.redis.set(key, value)

    def getValue(self, key):
        result = self.redis.get(key)
        if (result == None):
            return result
        return self.redis.get(key).decode()

    def getDbSize(self):
        return self.redis.dbsize()

    def updateAndReturn(self, key, value):
        return self.redis.getset(key, value)

    def delete(self, key):
        return self.redis.delete(key)
예제 #8
0
class GraphStorage(object):
    def __init__(self, link_file='links.txt', host='localhost', port=6379):
        self.db = StrictRedis(host, port)
        self.link_file = link_file

    def add_nodes(self, graphDict, nameDict):
        pipe = self.db.pipeline()
        with open(self.link_file) as link_file:
            for _ in xrange(1):
                for _ in xrange(570607):
                    node, links = self.create_link(next(link_file))
                    name = linecache.getline('titles.txt', node)
                    pipe.rpush('links-{0}'.format(node), *links)
                    pipe.append('name-{0}'.format(node), name)
                    pipe.append('id-{0}'.format(name), node)
                pipe.execute()

    def create_link(self, link):
        start, targets = link.rstrip('\n').split(': ')
        return int(start), map(int, targets.split())

    def get(self, kind, value):
        key = '{0}-{1}'.format(kind, value)
        if kind in ('name', 'id'):
            return self.db.get(key)
        elif kind == 'links':
            return self.db.lrange(key, 0, -1)
        raise ValueError

    def is_leaf(self, value):
        return self.db.sismember('leaves', value)

    def flush(self):
        self.db.flushall()

    def __len__(self):
        return self.db.dbsize()


# 5706070
예제 #9
0
class RedisCache:
    def __init__(self, client = None, encoding = 'utf-8', db = 0, compress = True):
        # if a client object is not passed then try
        # connecting to redis at the default localhost port
        self.client = StrictRedis(host = 'localhost', port = 6379, db = db) if client is None else client
        # self.expires = expires
        self.encoding = encoding
        self.compress = compress
        

    def __getitem__(self, url):
        '''
        Load value from Redis for the given URL
        '''
        record = self.client.get(url)
        if record:
            if self.compress:
                record = zlib.decompress(record)
            try:
                rec = record.decode(self.encoding)
            except UnicodeDecodeError:
                rec = bytes(json.dumps({'html' : None, 'code' : 403}), self.encoding)
            return json.loads(rec)
        else:
            raise KeyError(url + ' does not exist.')

    def __setitem__(self, url, result):
        '''
        Save value in Redis for the given URL
        '''
        data = bytes(json.dumps(result), self.encoding, errors = 'ignore')
        if self.compress:
            data = zlib.compress(data)
        self.client.set(url, data)

    def __len__(self):
        return self.client.dbsize()

    def erase(self):
        self.client.flushdb()
예제 #10
0

# 通过正则获取所有符合类型的 key, 不过这里也不是什么普通正则规范, .* 貌似就不好使
print(redis.keys('n*'))


# 获取随机的一个值
print(redis.randomkey())


# key 重命名
redis.rename('name','nikename')


# 获取当前数据库 key 的数量
print(redis.dbsize())


# 设置 key 的过期时间 单位为秒
redis.expire('name', 2)


# 获取 key 的过期时间. 单位为秒  -1 代表永不过期
print(redis.ttl('name'))


# 移动key 到其他的数据库
redis.move('name',2) # 2为数据库代号


# 删除当前选择数据库数据
#Author guo
from redis import StrictRedis

redis = StrictRedis(host='127.0.0.1', port=6379, db=0,
                    password='******')  #或者可以使用连接pool的方法进行连接

redis.set('name', 'Bob')  #调用set方法,设置一个键值对
print(redis.get('name'))  #获取并打印
redis.set('age', 22)
print(redis.get('age'))
print(redis.exists('name'))  #是否存在键名
print(redis.type('name'))  #键的类型b'string'
print(redis.keys('n*'))  #获取所有以n开头的键[b'name']
print(redis.randomkey())  #随机获取一个键
redis.rename('name', 'Name')
print(redis.dbsize())  #获取当前数据库大小
#redis.expire('name',2) 将name的过期时间设置为2s
print(redis.ttl('name'))  #获取过期时间
#move(name,db)移动到别的数据库
#flushdb()删除当前选择数据库中的所有键
#flushall() 删除所有数据库中所有的键
예제 #12
0
# redis数据库检测

from redis import StrictRedis
red = StrictRedis(host='localhost', port=6379, db=0, password='******')
# red.set('name', 'Bob')
# print(red.get('name'))
# print(red.exists('mykey1'))
print(red.dbsize())

예제 #13
0
from redis import StrictRedis, ConnectionPool

redis = StrictRedis(host='localhost', port=6379, db=0,
                    password=None)  #两种连接方式都可以
# pool=ConnectionPool(host='localhost',port=6379,db=0,password=None)
# redis=StrictRedis(connection_pool=pool)
redis.set('name', 'job')
redis.set('age', 22)
print(redis.get('name'))
print(redis.exists('name'))
redis.delete('age')
print(type('name'))
print(redis.keys('n*'))
print(redis.randomkey())
redis.move('name', 2)
# redis.flushdb()       #删除当前选择数据库中的所有的键
# redis.flushall()      #删除所有数据库中的所有的键
print(redis.dbsize())  #获取当前数据库中的所有键的数目
예제 #14
0
class database():
    '''
    Further Encapsulate Redis
    '''
    def __init__(self,
                 host=default_database_host,
                 port=default_database_port,
                 db=0,
                 password=default_database_password):
        if default_database_type.lower() == 'redis':
            self.__redis = StrictRedis(host=host,
                                       port=port,
                                       db=db,
                                       password=password)
            if default_database_flushall:
                self.delete_all()  #WARNING
        else:
            raise ToolBox.ConfigError('Only support Redis database now !')

    def get_num(self):
        '''
        :return:int, num of keys in database
        '''
        size = self.__redis.dbsize()
        if size:
            return self.__redis.dbsize()
        else:
            return 0

    def delete_all(self):
        self.__redis.flushdb()
        print(f'Redis has been flushed all {ToolBox.tool_get_current_time()}')

    def add_proxies(self, proxies):
        if proxies:
            data = {}
            for proxy in proxies:
                string_proxy = proxy.get_string_address()
                dict_proxy = json.dumps(proxy.get_dict_address())
                data[string_proxy] = dict_proxy
            self.__redis.mset(data)
        # print(f'Redis num {self.get_num()}')

    def get_one_string(self) -> str or None:
        '''
        :return:string, proxy
        '''
        if self.get_num():
            byte_ = self.__redis.randomkey()
            str_ = str(byte_, encoding='utf-8')
            return str_
        else:
            return None

    def get_one_dict(self):
        '''
        :return:dictionary, proxy
        '''
        if self.get_num():
            dict_proxy = self.__redis.get(self.__redis.randomkey())
            dict_proxy = json.loads(dict_proxy)
            return dict_proxy
        else:
            return None

    def delete_proxies(self, proxies):
        '''
        delete the proxies from database
        :param proxies: proxy object list
        :return: None
        '''
        if proxies:
            for proxy in proxies:
                self.__redis.delete(proxy.get_string_address())
        # print(f'Redis num {self.get_num()}')

    def proxy_feedback(self, proxy_string_dict, flag: bool):
        '''
        through this func to adjust proxy points
        when you get a proxy from database
        if flag == False, then the proxy's points will be decreased
        == True, then the proxy's points will be increased
        :return: insert a special message to the database
        '''
        res = proxy_string_dict
        if isinstance(proxy_string_dict, dict):
            res = proxy_string_dict['http']
        if flag:
            self.__redis.rpush('increase', res)
        else:
            self.__redis.rpush('decrease', res)

    def get_feedback(self) -> dict:
        feedback = {}
        info = []
        temp = self.__redis.rpop('increase')
        while temp:
            temp = bytes.decode(temp)
            info.append(temp)
            temp = self.__redis.rpop('increase')
        feedback['increase'] = info
        info = []
        temp = self.__redis.rpop('decrease')
        while temp:
            temp = bytes.decode(temp)
            info.append(temp)
            temp = self.__redis.rpop('decrease')
        feedback['decrease'] = info

        return feedback
예제 #15
0
print(redis.get('name'))
"""键操作"""
# 判断是否存在
redis.exists('name')
# 删除
# redis.delete('name')
# 获取键的类型
redis.type('name')
# 正则匹配
redis.keys('n*')
# 随机一个键
redis.randomkey()
# 重命名
redis.rename('name', 'nickname')
# 获取键的数目
redis.dbsize()
# 设置键的过期时间 2秒
redis.expire('name', 2)
# 获取键的过期时间 -1表示永远不过期
redis.ttl('name')
# 将键移动到其他数据库 移动到2号数据库
redis.move('name', 2)
# 删除当前选择数据库中所有的键
redis.flushdb()
# 删除所有数据库中的所有键
redis.flushall()
"""字符串操作"""
# 设值
redis.set('age', 20)
# 取值
redis.get('age')