Client
def log(msg, count=1):
local_redis.sadd('tracked_keys', msg)
local_redis.incrby(msg, count)
log('ask', 5)
log('respond')
log('homepage_view')| space, → | next slide |
| ← | previous slide |
| d | debug mode |
| ## <ret> | go to slide # |
| c | table of contents (vi) |
| f | toggle footer |
| r | reload slides |
| z | toggle help (this) |

def log(msg, count=1):
local_redis.sadd('tracked_keys', msg)
local_redis.incrby(msg, count)
log('ask', 5)
log('respond')
log('homepage_view')def fetch(host):
r = Redis(host)
keys = r.smembers('tracked_keys')
pipe = r.pipeline()
for key in keys:
pipe.getset(key, 0)
counts = pipe.execute()
return zip(keys, [int(c) for c in counts])SADD tracked_keys "ask"
:1
INCRBY ask 5
:5
SADD tracked_keys "respond"
:1
INCRBY respond 1
:1
SADD tracked_keys "homepage_view"
:1
INCRBY homepage_view 1
:1SMEMBERS tracked_keys
*3
$9
"respond"
$5
"ask"
$15
"homepage_view"
GETSET respond 0
$1
1
GETSET ask 0
$1
5
GETSET homepage_view 0
$1
1
def parallel_fetch(hosts):
pool = gevent.pool.Pool(100)
coros = []
with gevent.Timeout(10, False):
for host in hosts:
coros.append(pool.spawn(fetch, host))
pool.join()
stats = defaultdict(lambda: 0)
for job in coros:
if job.ready() and job.value:
for msg, count in job.value:
stats[msg] += count
return stats