redis几个常见操作的性能测试 发表于 2015-07-28 | 分类于 blog new beginning | redis 的 set/mset/get/mget/hset/hmset/hget/hmget/hgetall 等操作的性能测试 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154#!/usr/bin/env python# -*- coding:utf-8 -*-'''Author : mythDate : 15-7-28Email : belongmyth at 163.com'''from datetime import datetimefrom datetime import timedeltaimport redisimport randomimport functoolsdef timer(func): @functools.wraps(func) def wrapper(*args, **kwargs): title = kwargs.pop(u'title', func.func_name) no_timer = kwargs.pop(u'no_timer', False) if no_timer: v = func(*args, **kwargs) else: s = datetime.now() v = func(*args, **kwargs) e = datetime.now() print u'%s total use %s'%(title, e-s) return v return wrapper@timerdef gen_datas(): datas = [] start_time = datetime.strptime(u'2015-06-01 00:00:00', u'%Y-%m-%d %H:%M:%S') intervel = 300#s for i in range(12000): t = (start_time+timedelta(seconds=i*intervel)) ts = t.strftime(u'%Y-%m-%d %H:%M:%S') vs = u'%.3f'%(random.randint(5000000, 50000000) * random.random(), ) datas.append((ts, vs)) return datas@timerdef save_datas_use_set(): for ts, vs in DATAS: c.set(ts, vs)@timerdef save_datas_use_mset(): ds = dict(DATAS) c.mset(ds)@timerdef save_datas_use_hset(): for ts, vs in DATAS: c.hset(CHANNEL_ID, ts, vs)@timerdef save_datas_use_hmset(): ds = dict(DATAS) c.hmset(CHANNEL_ID, ds)@timerdef get_datas_use_get(): vdatas = [] for ts in tss: vs = c.get(ts) vdatas.append((ts, vs)) return vdatas@timerdef get_datas_use_mget(): vss = c.mget(tss) return vss@timerdef test_mget(times): for i in range(times): get_datas_use_mget(no_timer = True)@timerdef get_datas_use_hget(): vdatas = [] for ts in tss: vs = c.hget(CHANNEL_ID, ts) vdatas.append((ts, vs)) return vdatas@timerdef test_hget(times): for i in range(times): get_datas_use_hget(no_timer=True)@timerdef get_datas_use_hmget(): vss = c.hmget(CHANNEL_ID, tss) return vss@timerdef test_hmget(times): for i in range(times): get_datas_use_hmget(no_timer = True)@timerdef get_datas_use_hgetall(): vss = c.hgetall(CHANNEL_ID) return vss@timerdef test_hgetall(times): for i in range(times): get_datas_use_hgetall(no_timer = True)c = redis.StrictRedis()CHANNEL_ID = u'channel_xxxxxxxxxxxxxxxxxxxxxxxx'DATAS = gen_datas()tss = [d[0] for d in DATAS]times = 5save_datas_use_set()save_datas_use_mset()get_datas_use_get()get_datas_use_mget()test_mget(times, title=u'get_datas_use_mget %d times'%times)save_datas_use_hset()save_datas_use_hmset()get_datas_use_hget()get_datas_use_hmget()get_datas_use_hgetall()test_hget(times, title=u'get_datas_use_hget %d times'%times)test_hmget(times, title=u'get_datas_use_hmget %d times'%times)test_hgetall(times, title=u'get_datas_use_hgetall %d times'%times)'''gen_datas total use 0:00:00.109303save_datas_use_set total use 0:00:00.583253save_datas_use_mset total use 0:00:00.072797get_datas_use_get total use 0:00:00.540243get_datas_use_mget total use 0:00:00.072904get_datas_use_mget 5 times total use 0:00:00.370845save_datas_use_hset total use 0:00:00.596802save_datas_use_hmset total use 0:00:00.070581get_datas_use_hget total use 0:00:00.640865get_datas_use_hmget total use 0:00:00.069553get_datas_use_hgetall total use 0:00:00.099832get_datas_use_hget 5 times total use 0:00:02.704983get_datas_use_hmget 5 times total use 0:00:00.364204get_datas_use_hgetall 5 times total use 0:00:00.497511''' 结论很明显啦