class RedisStore(object):
    """Caching implementation that uses Redis as data storage.
    """
    def __init__(self, host='localhost', port=6379, db=0):
        try:
            from redis import Redis
        except ImportError:
            raise RuntimeError('Redis support is not available')
        self.redis = Redis(host=host, port=port, db=db)

    def __getitem__(self, key):
        entry = self.redis.get(key)
        if entry is None:
            return None

        entry = json.loads(entry.decode('utf-8'))
        return CacheEntry.parse(entry)

    def __setitem__(self, key, entry):
        data = json.dumps(entry.to_dict()).encode('utf-8')
        self.redis.set(key, data)

    def __delitem__(self, key):
        self.redis.delete(key)

    def clear(self):
        self.redis.flushdb()

    def __len__(self):
        return self.redis.dbsize()
Example #2
0
    def test_reset_user_password(self):
        user_key = "user::256"
        old_password ="******"

        self.client.hmset(
            user_key, 
            {
                "email": "*****@*****.**", 
                "password": old_password
            }
        )

        reset_user_password(self.origin, self.new)

        db0 = Redis(db=self.origin,decode_responses=True)
        db1 = Redis(db=self.new)

        # 确保数据库 0 的用户密码已被更新
        self.assertNotEqual(
            db0.hgetall(user_key)["password"],
            old_password
        )
        
        # 确保数据库 1 已被清空
        self.assertEqual(
            db1.dbsize(),
            0
        )
Example #3
0
class RedisController():

    def __init__(self):
        self.__pool__ = ConnectionPool(host=host, port=port)
        self._redis_conn = Redis(connection_pool=self.__pool__)
        base_info("Redis连接成功!")

    def rset(self, key, value):
        self._redis_conn.set(key, value)
        redis_info("插入【%s】-【%s】"%(key, value))
    
    def rget(self, key):
        return str(self._redis_conn.get(key))[2:-1]

    def rdel(self, key):
        self._redis_conn.delete(key)
        redis_info("删除key为【%s】的缓存"%key)

    @property
    def dbsize(self):
        return self._redis_conn.dbsize()

    def rpipeset(self, lists):

        pipe = self._redis_conn.pipeline(transaction=True)

        for list_detail in lists:
            key = list(list_detail.keys())[0]
            value = list_detail[key]
            self.rset(key, value)
        
        pipe.execute()
Example #4
0
class RedisStore(object):
    """Caching implementation that uses Redis as data storage."""
    def __init__(self, host='localhost', port=6379, db=0):
        try:
            from redis import Redis
        except ImportError:
            raise RuntimeError('Redis support is not available')

        self.redis = Redis(host=host, port=port, db=db)

    def __getitem__(self, key):
        entry = self.redis.get(key)
        if entry is None:
            return None

        entry = loads(entry.decode('utf-8'))
        return CacheEntry.parse(entry)

    def __setitem__(self, key, entry):
        data = dumps(entry.to_dict()).encode('utf-8')
        self.redis.set(key, data)

    def __delitem__(self, key):
        self.redis.delete(key)

    def clear(self):
        self.redis.flushdb()

    def __len__(self):
        return self.redis.dbsize()
Example #5
0
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, 16):
        testconn = Redis(db=dbnum)
        empty = testconn.dbsize() == 0
        if empty:
            return dbnum, testconn
    assert False, 'No empty Redis database found to run tests in.'
Example #6
0
File: __init__.py Project: nvie/rq
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 = Redis(db=dbnum)
        empty = testconn.dbsize() == 0
        if empty:
            return testconn
    assert False, 'No empty Redis database found to run tests in.'
Example #7
0
class RedisController():
    def __init__(self, section_name="redis_hs"):
        (host, port,
         self.db) = ConfigReader.read_section_keylist(section_name,
                                                      ["host", "port", "db"])
        self.__pool__ = ConnectionPool(host=host, port=port, db=self.db)
        self._redis_conn = Redis(connection_pool=self.__pool__)
        base_info("Redis连接%s创建成功![%s:%s db%s]" %
                  (section_name, host, port, self.db))

    def rset(self, key, value):
        rvalue = self.rget(key)
        if equal(str(value), str(rvalue)):
            redis_info("db%s:set【%s => <=】" % (self.db, key))
        elif rvalue == None:
            redis_info("db%s:set【%s () => %s】" % (self.db, key, value))
        else:
            redis_info("db%s:set【%s %s => %s】" % (self.db, key, rvalue, value))
        self._redis_conn.set(key, value)

    def rget(self, key):
        try:
            res = self._redis_conn.get(key)
            if res is not None:
                return res.decode('utf-8')
            else:
                return None
        except Exception as e:
            print(str(e))
            return None

    def rdel(self, key):
        self._redis_conn.delete(key)
        redis_info("db%s:删除【%s】的缓存" % (self.db, key))

    @property
    def dbsize(self):
        return self._redis_conn.dbsize()

    def rpipeset(self, lists):

        pipe = self._redis_conn.pipeline(transaction=True)

        for list_detail in lists:
            key = list(list_detail.keys())[0]
            value = list_detail[key]
            self.rset(key, value)

        pipe.execute()

    @property
    def rscan(self):
        '''扫描Redis'''
        for key in self._redis_conn.keys():
            yield key.decode('utf-8'), self.rget(key).replace("\'", "\"")
Example #8
0
def find_empty_redis_database(ssl=False):
    """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):
        connection_kwargs = {'db': dbnum}
        if ssl:
            connection_kwargs['port'] = 9736
            connection_kwargs['ssl'] = True
            connection_kwargs['ssl_cert_reqs'] = None  # disable certificate validation
        testconn = Redis(**connection_kwargs)
        empty = testconn.dbsize() == 0
        if empty:
            return testconn
    assert False, 'No empty Redis database found to run tests in.'
class GatherMetricToStorage(object):
    def __init__(self, duration, recsqant):
        """
        Initialize storage connection
        """
        echo(" * Initializing metric fetch system...")
        self.baseobjc = Redis(host="127.0.0.1", port=6379)
        self.duration = duration
        self.recsqant = recsqant

    def jsonify_system_live_updating_metrics(self):
        """
        Convert metric data to a JSON-friendly format
        """
        timestmp = str(time()).split(".")[0]
        hashiden = sha256(timestmp.encode()).hexdigest()
        keyvalpr = {
            timestmp:
            json.dumps({
                "hashiden": hashiden,
                "liveupdt": LiveUpdatingElements().return_live_data()
            })
        }
        return keyvalpr

    def continuously_store_data(self):
        """
        Periodically push passive metrics to Redis store
        """
        self.baseobjc.flushall()
        try:
            while True:
                if self.baseobjc.dbsize() == self.recsqant:
                    self.baseobjc.keys().sort()
                    self.baseobjc.delete(self.baseobjc.keys()[0])
                self.baseobjc.mset(self.jsonify_system_live_updating_metrics())
                # echo(" * [" + ctime() + "] Stored system metrics now...")
                sleep(self.duration)
        except KeyboardInterrupt as expt:
            self.baseobjc.close()
            echo("\n" + " * Closing storage connection...")
            exit()
Example #10
0
class Catalog(dict):
    def __init__(self, host='localhost', port=6379, db=0):
        self.redis = Redis(host=host, port=port, db=db)
        self.save = self.redis.save

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

    def get(self, key):
        subject = key.strip("() ")
        key = subject.lower()
        if self.redis.exists(key):
            subject = cPickle.loads(self.redis.get(key))
        else:
            subject = Subject(key, subject)
            self.set(key, subject)
        return subject

    def set(self, key, value):
        return self.redis.set(key,
                              cPickle.dumps(value, cPickle.HIGHEST_PROTOCOL))
Example #11
0
class TestCreateRandomTypeKeys(unittest.TestCase):
    def setUp(self):
        self.client = Redis(decode_responses=True)
        self.client.flushdb()

        self.key = "key"

    def tearDown(self):
        self.client.flushdb()

    def test_create_string(self):
        create_string(self.client, self.key)
        self.assertEqual(self.client.type(self.key), "string")

    def test_create_hash(self):
        create_hash(self.client, self.key)
        self.assertEqual(self.client.type(self.key), "hash")

    def test_create_list(self):
        create_list(self.client, self.key)
        self.assertEqual(self.client.type(self.key), "list")

    def test_create_set(self):
        create_set(self.client, self.key)
        self.assertEqual(self.client.type(self.key), "set")

    def test_create_zset(self):
        create_zset(self.client, self.key)
        self.assertEqual(self.client.type(self.key), "zset")

    def test_create_stream(self):
        create_stream(self.client, self.key)
        self.assertEqual(self.client.type(self.key), "stream")

    def test_create_random_type_keys(self):
        dbsize = 100
        create_random_type_keys(self.client, dbsize)
        self.assertEqual(self.client.dbsize(), dbsize)
Example #12
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)
Example #13
0
#coding:utf-8

import sys
from redis import Redis
from question63_pre import buildKVSforTags
"""
正常に動作しない場合はquestion63_pre.pyを先に実行してください
(多分これだけ実行しても大丈夫なはず)
"""

if __name__ == "__main__":

    client = Redis(db=2)

    #DBが存在しない場合、新たに作成
    if client.dbsize() == 0:
        buildKVSforTags()

    print("アーティスト名を入力してください")
    sys.stdout.write("-> ")  #改行なしの出力
    sys.stdout.flush()

    artist_name = input()

    for artist_id, artist_tags in sorted(
            list(client.hgetall(artist_name).items()),
            key=lambda d: int(d[0].decode('utf-8'))):

        #bytes型になってるので変換
        artist_id = artist_id.decode('utf-8')
        artist_tags = artist_tags.decode('utf-8')
Example #14
0
class ZWRedis():
    """Class defining a Redis driver"""
    def __init__(self, db_url, **kwargs):
        self.db_url = db_url or os.environ.get('DATABASE_URL')
        if not self.db_url:
            raise ValueError('You must provide a db_url.')

        o = utils.db_url_parser(db_url)
        self.dbcfg = {
            'host'      : o['host'],
            'port'      : o['port'] or 6379,
            'username'  : o['usr'],
            'password'  : o['pwd'],
            'db'        : o['db'] if 'db' in o and o['db'] and o['db'] != '' else 0,
            'decode_responses' : True,
        }
        try:
            self.dbcfg['db'] = int(o['db'])
        except (AttributeError, ValueError):
            self.dbcfg['db'] = 0

        self.dbcfg.update(kwargs)
        self._conn = Redis(connection_pool=BlockingConnectionPool(**self.dbcfg))
    
    def close(self):
        self._conn.connection_pool.disconnect()

    def set(self, key, value):
        rtn = None
        if isinstance(value, str):
            rtn = self._conn.set(key, value)
        elif isinstance(value, dict):
            rtn = self._conn.hmset(key, value)
        elif isinstance(value, list):
            self._conn.delete(key)
            rtn = self._conn.rpush(key, *value)
        elif isinstance(value, set):
            self._conn.delete(key)
            rtn = self._conn.sadd(key, *value)
        else:
            rtn = self._conn.set(key, value)
        return rtn

    def get(self, key, data_type=None):
        rtn = None
        t = data_type if data_type is not None else self._conn.type(key)
        if t == 'string':
            rtn = self._conn.get(key)
        elif t == 'hash':
            rtn = self._conn.hgetall(key)
        elif t == 'list':
            rtn = self._conn.lrange(key, 0, -1)
        elif t == 'set':
            rtn = self._conn.smembers(key)
        else:
            rtn = self._conn.get(key)
        return rtn

    def setby(self, key, field, value, data_type=None):
        '''key: key(hash) or index(list)
        return None if not support
        '''
        rtn = None
        t = data_type if data_type is not None else self._conn.type(key)
        if t == 'hash':
            rtn = self._conn.hset(key, field, value)
        elif t == 'list':
            rtn = self._conn.lset(key, field, value)
        return rtn
    
    def getby(self, key, field, data_type=None):
        '''key: key(hash) or index(list)
        return None if not support
        '''
        rtn = None
        t = data_type if data_type is not None else self._conn.type(key)
        if t == 'hash':
            rtn = self._conn.hget(key, field)
        elif t == 'list':
            rtn = self._conn.lindex(key, field)
        return rtn
    
    def delby(self, key, fields, data_type=None):
        '''fields: fields(hash) or indexes(list) or values(set)
        return None if not support
        '''
        rtn = None
        t = data_type if data_type is not None else self._conn.type(key)
        if t == 'hash':
            rtn = self._conn.hdel(key, *fields)
        elif t == 'list':
            with self._conn.pipeline() as p:
                p.multi()
                for idx in fields:
                    p.lset(key, idx, '__ZWREDIS_DELETED__')
                rtn = p.lrem(key, 0, '__ZWREDIS_DELETED__')
                p.execute()
        elif t == 'set':
            self._conn.srem(key, *fields)
        return rtn
    
    def append(self, key, value, data_type=None):
        rtn = None
        t = data_type if data_type is not None else self._conn.type(key)
        if t == 'string':
            rtn = self._conn.append(key, value)
        elif t == 'hash':
            rtn = self._conn.hmset(key, value)
        elif t == 'list':
            rtn = self._conn.rpush(key, *value)
        elif t == 'set':
            rtn = self._conn.sadd(key, *value)
        else:
            rtn = self._conn.append(key, value)
        return rtn
    
    def contains(self, key, field, data_type=None):
        '''key: key(hash) or value(list/set) or substring(string)'''
        rtn = None
        t = data_type if data_type is not None else self._conn.type(key)
        if t == 'string':
            rtn = field in self._conn.get(field)
        elif t == 'hash':
            rtn = self._conn.hexists(key, field)
        elif t == 'list':
            with self._conn.pipeline() as p:
                p.multi()
                set_name = '_%s_tmp_set' % key
                p.delete(set_name)
                arr = self._conn.lrange(key, 0, -1)
                p.sadd(set_name, *arr)
                p.sismember(set_name, field)
                p.delete(set_name)
                rtn = p.execute()
                rtn = rtn[2]
        elif t == 'set':
            rtn = self._conn.sismember(key, field)
        else:
            rtn = field in self._conn.get(field)
        return rtn
    
    def len(self, key, data_type=None):
        rtn = None
        t = data_type if data_type is not None else self._conn.type(key)
        if t == 'string':
            rtn = self._conn.strlen(key)
        elif t == 'hash':
            rtn = self._conn.hlen(key)
        elif t == 'list':
            rtn = self._conn.llen(key)
        elif t == 'set':
            rtn = self._conn.scard(key)
        else:
            rtn = self._conn.strlen(key)
        return rtn
    
    def all(self):
        rtn = []
        keys = self._conn.keys('*')
        for key in keys:
            rtn.append({
                'key': key,
                'value': self.get(key)
            })
        return rtn
    
    def all_iter(self, cbfunc):
        for key in self._conn.scan_iter():
            cbfunc(key)

    def delete(self, name):
        return self._conn.delete(name)

    def exists(self, key):
        return self._conn.exists(key) == 1

    def dbsize(self):
        return self._conn.dbsize()

    @property
    def conn(self):
        return self._conn

    def __repr__(self):
        return '<Database host={}:{}>'.format(self.dbcfg['host'], self.dbcfg['port'])

    def __enter__(self):
        return self

    def __exit__(self, exc, val, traceback):
        self.close()
Example #15
0
class RedisBase(object):
    def __init__(self, db):
        self.conf = {"host": "127.0.0.1", "port": 6379, "passwd": ""}

        host = self.conf['host']
        port = self.conf['port']
        passwd = self.conf['passwd']

        self.db = db
        self.__pool = ConnectionPool(host=host,
                                     port=port,
                                     db=self.db,
                                     password=passwd)
        self.__conn = RawRedis(connection_pool=self.__pool)

        print("*** Connect to redis-server succeed.")

    def rset(self, k, v):
        rval = self.rget(k)
        if rval is not None:
            try:
                rval = json.loads(rval)
            except Exception:
                pass

        if equal(v, rval):
            print("db{}:set【{} => <=】".format(self.db, k))
            return

        elif rval is None:
            print("db{}:set【{} () => {}】".format(self.db, k, v))
        else:
            print("db{}:set【{} {} => {}】".format(self.db, k, rval, v))

        if isinstance(v, (dict, list)):
            v = json.dumps(v)

        self.__conn.set(k, v)
        return

    def rget(self, k):
        try:
            res = self.__conn.get(k)
            return None if res is None else res.decode('utf-8')

        except Exception as e:
            print("*** Get value from redis failed.", k, e)
            return None

    def delete(self, k):
        self.__conn.delete(k)
        print("*** db%s:删除【%s】的缓存" % (self.db, k))

    @property
    def dbsize(self):
        return self.__conn.dbsize()

    def pipeset(self, lists):

        pipe = self.__conn.pipeline(transaction=True)

        for list_detail in lists:
            k = list(list_detail.keys())[0]
            v = list_detail[k]
            self.rset(k, v)

        pipe.execute()

    @property
    def scan_iter(self):
        ''' Scan Redis db to iterator.
        '''
        for k in self.__conn.keys():
            yield k.decode('utf-8'), self.rget(k)

    def __update_dict_to_redis__(self, k, v):
        ''' __update_dict_to_redis__
        Merge dict rather than replace it.
        '''
        if self.rget(k) is not None:
            bf_val = self.rget(k)
            try:
                bf_val = json.loads(bf_val)
                bf_val = dict(bf_val, **v)
                self.rset(k, bf_val)
            except Exception as e:
                print("__update_dict_to_redis__ failed.", e)
                pass
        else:
            self.rset(k, v)
Example #16
0
from redis import Redis
redis_client=Redis()
print redis_client.keys()
redis_client.set('name','vvsong')

name=redis_client.get('name')
print name

redis_client.sadd('friends:vv','jenny','mike','tom')
redis_client.sadd('friends:song','kate','mike','tom')
for i in redis_client.sinter('friends:vv','friends:song'):
    print i
#print co-friends
#for friend in co-friends:
#    print friend
#print co-friends
print redis_client.dbsize()

#redis_client.shutdown()
Example #17
0
class RedisStore(object):
    """Caching implementation that uses Redis as data storage.

    :param host: String representing the hostname or IP of the Redis server

    :param port: Port number (int) on which the Redis server is listening

    :param db: DB querystring option (Default: 0, e.g. redis://localhost?db=0)

    :param password: Redis server password (Default: No Password)

    :param socket_timeout: Connection timeout to Redis server

    :param connection_pool: ConnectionPool for Redis instance (See redis-py docs)

    :param charset: Default character set

    :param errors: Default error settings

    :param decode_responses: Default: False (values in message dictionaries will be
        byte strings (str on Python 2, bytes on Python 3)

    :param unix_socket_path: Socker path. For using UnixDomainSocketConnection
        (see redis-py docs for more details)

    :param ttl: Default TTL
    """

    DEFAULT_TTL = 5 * 60  # seconds

    def __init__(self,
                 host='localhost',
                 port=6379,
                 db=0,
                 password=None,
                 socket_timeout=None,
                 connection_pool=None,
                 charset='utf-8',
                 errors='strict',
                 decode_responses=False,
                 unix_socket_path=None,
                 ttl=DEFAULT_TTL):
        self.ttl = ttl
        try:
            from redis import Redis
        except ImportError:
            raise RuntimeError(
                'Redis support is not available. Run "pip install redis".')

        self.redis = Redis(host=host,
                           port=port,
                           db=db,
                           password=password,
                           socket_timeout=socket_timeout,
                           connection_pool=connection_pool,
                           charset=charset,
                           errors=errors,
                           decode_responses=decode_responses,
                           unix_socket_path=unix_socket_path)

    def __getitem__(self, key):
        entry = self.redis.get(key)
        if entry is None:
            return None

        entry = loads(entry.decode('utf-8'))
        return CacheEntry.parse(entry)

    def __setitem__(self, key, entry):
        data = dumps(entry.to_dict()).encode('utf-8')
        self.redis.setex(key, data, self.ttl)

    def __delitem__(self, key):
        self.redis.delete(key)

    def clear(self):
        self.redis.flushdb()

    def __len__(self):
        return self.redis.dbsize()
class RedisStore(object):
    """Caching implementation that uses Redis as data storage.

    :param host: String representing the hostname or IP of the Redis server

    :param port: Port number (int) on which the Redis server is listening

    :param db: DB querystring option (Default: 0, e.g. redis://localhost?db=0)

    :param password: Redis server password (Default: No Password)

    :param socket_timeout: Connection timeout to Redis server

    :param connection_pool: ConnectionPool for Redis instance (See redis-py docs)

    :param charset: Default character set

    :param errors: Default error settings

    :param decode_responses: Default: False (values in message dictionaries will be
        byte strings (str on Python 2, bytes on Python 3)

    :param unix_socket_path: Socker path. For using UnixDomainSocketConnection
        (see redis-py docs for more details)

    :param ttl: Default TTL
    """

    DEFAULT_TTL = 5 * 60  # seconds

    def __init__(self, host='localhost', port=6379, db=0, password=None,
            socket_timeout=None, connection_pool=None, charset='utf-8',
            errors='strict', decode_responses=False, unix_socket_path=None,
            ttl=DEFAULT_TTL):
        self.ttl = ttl
        try:
            from redis import Redis
        except ImportError:
            raise RuntimeError('Redis support is not available. Run "pip install redis".')

        self.redis = Redis(host=host, port=port, db=db,
                password=password, socket_timeout=socket_timeout,
                connection_pool=connection_pool, charset=charset,
                errors=errors, decode_responses=decode_responses,
                unix_socket_path=unix_socket_path)

    def __getitem__(self, key):
        entry = self.redis.get(key)
        if entry is None:
            return None

        entry = loads(entry.decode('utf-8'))
        return CacheEntry.parse(entry)

    def __setitem__(self, key, entry):
        data = dumps(entry.to_dict()).encode('utf-8')
        self.redis.setex(key, data, self.ttl)

    def __delitem__(self, key):
        self.redis.delete(key)

    def clear(self):
        self.redis.flushdb()

    def __len__(self):
        return self.redis.dbsize()
from  redis import Redis
r = Redis()

#set方法
print(r.set('nosql','redis'))
print(r.get('nosql'))

#getset方法,为存在的key关联新的value,并返回旧值
print(r.getset('nosql','mongodb'))

#mget返回多个key对应的value,
print(r.mget('qq','pp','yy','star'))
print('*'*40)
#-------------------------------------------------------------
#key 操作
print(r.exists('qq'))
print(r.delete('pp'))
print(r.type('nosql'))
print(r.randomkey())
print(r.rename('yy','star'))
print(r.move('star',7))
#获取当前数据库中的key个数
print(r.dbsize())
#删除当前数据库中所有key
print(r.flushdb())
print(r.dbsize())
class RedisController(LogBase):
        
    def __init__(self, db, project_name="sample"):
        LogBase.__init__(self, project_name, "redis")

        host, port = REDIS_CFG['host'], REDIS_CFG['port']
        self.db = db
        self.__pool__ = ConnectionPool(host=host, port=port, db=self.db)
        self._redis_conn = Redis(connection_pool=self.__pool__)
        self.info("Connect to redis-server SUCCEED.", host=host, port=port, db=self.db)

    def rset(self, key, value):
        rvalue = self.rget(key)
        if rvalue is not None:
            try:
                rvalue = json.loads(rvalue)
            except Exception:
                pass

        if equal(value, rvalue):
            self.info("db{}:set【{} => <=】".format(self.db, key))
        elif rvalue == None:
            self.info("db{}:set【{} () => {}】".format(self.db, key, value))
        else:
            self.info("db{}:set【{} {} => {}】".format(self.db, key, rvalue, value))
        
        if isinstance(value, dict):
            value = json.dumps(value)
        
        self._redis_conn.set(key, value)
    
    def rget(self, key):
        try:
            res = self._redis_conn.get(key)
            return None if res is None else res.decode('utf-8')
            
        except Exception as e:
            self.error("Get value from redis error!", key=key, err=e)
            return None

    def rdel(self, key):
        self._redis_conn.delete(key)
        self.info("db%s:删除【%s】的缓存"%(self.db,key))

    @property
    def dbsize(self):
        return self._redis_conn.dbsize()

    def rpipeset(self, lists):

        pipe = self._redis_conn.pipeline(transaction=True)

        for list_detail in lists:
            key = list(list_detail.keys())[0]
            value = list_detail[key]
            self.rset(key, value)
        
        pipe.execute()

    @property
    def rscan(self):
        '''扫描Redis'''
        for key in self._redis_conn.keys():
            yield key.decode('utf-8'), self.rget(key)

    def __update_dict_to_redis__(self, k, v):
        '''__update_dict_to_redis__
        Merge dict rather than replace it.
        '''
        if self.rget(k) is not None:
            bf_val = self.rget(k)
            try:
                bf_val = json.loads(bf_val)
                bf_val = dict(bf_val, **v)
                self.rset(k, bf_val)
            except Exception as e:
                self.warn("__update_dict_to_redis__ failed.",err=e)
                pass
        else:
            self.rset(k, v)
Example #21
0
                     m.append(data['itemId'])
                 if getNeedJson['itemId'] not in m:
                     DATA.append(getNeedJson)
                 else:
                     continue
             #DATA = list(set(DATA))
             '''
             print "添加商品成功{item_id}".format(item_id=need['itemId'])
 except Exception, e:
     logging.error("爬取{shopname}是出错:{e}".format(shopname=shopname, e=e.message))
     return get_data(shop_id, item_ids, total_items, shopname)
 # 想通过mongdb查询得到已经有的宝贝数量
 # database = collection.dout({'shop_id':shop_id,'crawl_time':{'$gt':int(time)}})
 # list(del_repeat(DATA))
 try:
     size = int(r.dbsize())
     # 每次存储DATA时获取随机itemId的方法
     # ranNum = random.randint(0,size-1)
     # re_itemId = r.get([ranNum])['itemId']
     re_itemId = r.randomkey()
     # size = len(DATA)
     global COUNT
     print COUNT
     if size == int(total_items):
         logging.info("爬取数量和预期相同,数量为:{size}".format(size=size))
         COUNT = 0
     elif size != int(total_items):
         COUNT += 1
         # 当爬取次数大于100且已经爬取的数量和需求总数差2个的时候
         if COUNT > 100 and size > int(total_items) - 3:
             logging.info("爬取数量和目标数量差额在2个,爬取到的数量为:{size}".format(size=size))
Example #22
0
    # 测试各个类型键的创建函数

    r.flushdb()

    create_string(r, "str_key")
    assert (r.type("str_key") == "string")

    create_hash(r, "hash_key")
    assert (r.type("hash_key") == "hash")

    create_list(r, "list_key")
    assert (r.type("list_key") == "list")

    create_set(r, "set_key")
    assert (r.type("set_key") == "set")

    create_zset(r, "zset_key")
    assert (r.type("zset_key") == "zset")

    # 测试随机创建函数

    r.flushdb()

    create_random_type_keys(r, 10)

    assert (r.dbsize() == 10)

    for k in r.keys("*"):
        print("Keyname:<{0}> - Type:<{1}>".format(k, r.type(k)))