Adding ttls to redis stats sampler.

This commit is contained in:
Samuel Clay 2013-06-03 15:50:03 -07:00
parent 318aa32a80
commit b50986388a
3 changed files with 26 additions and 8 deletions

View file

@ -141,7 +141,7 @@ class UserSubscription(models.Model):
story_ids = byscorefunc(unread_ranked_stories_key, min_score,
max_score, start=offset, num=500,
withscores=withscores)[:limit]
r.expire(unread_ranked_stories_key, 24*60*60)
r.expire(unread_ranked_stories_key, 1*60*60)
if not ignore_user_stories:
r.delete(unread_stories_key)

View file

@ -890,7 +890,7 @@ class MSocialSubscription(mongo.Document):
max_score, start=offset, num=limit,
withscores=withscores)
r.expire(unread_ranked_stories_key, 24*60*60)
r.expire(unread_ranked_stories_key, 1*60*60)
if not ignore_user_stories:
r.delete(unread_stories_key)
@ -939,8 +939,8 @@ class MSocialSubscription(mongo.Document):
r.zinterstore(read_ranked_stories_keys, [ranked_stories_keys, "RS:%s" % user_id])
story_hashes = range_func(ranked_stories_keys, offset, limit, withscores=True)
read_story_hashes = range_func(read_ranked_stories_keys, offset, limit)
r.expire(ranked_stories_keys, 24*60*60)
r.expire(read_ranked_stories_keys, 24*60*60)
r.expire(ranked_stories_keys, 1*60*60)
r.expire(read_ranked_stories_keys, 1*60*60)
if story_hashes:
story_hashes, story_dates = zip(*story_hashes)

View file

@ -70,19 +70,37 @@ class RStats:
pool = settings.REDIS_STORY_HASH_POOL
r = redis.Redis(connection_pool=pool)
p = r.pipeline()
keys = set()
prefixes = defaultdict(set)
prefixes_ttls = defaultdict(lambda: defaultdict(int))
prefix_re = re.compile(r"(\w+):(.*)")
for k in range(sample):
key = r.randomkey()
keys.add(key)
[p.randomkey() for _ in range(sample)]
keys = set(p.execute())
p = r.pipeline()
[p.ttl(key) for key in keys]
ttls = p.execute()
for k, key in enumerate(keys):
prefix, rest = prefix_re.match(key).groups()
prefixes[prefix].add(rest)
ttl = ttls[k]
if ttl < 60*60: # 1 hour
prefixes_ttls[prefix]['1'] += 1
elif ttl < 60*60*12:
prefixes_ttls[prefix]['12'] += 1
elif ttl < 60*60*24:
prefixes_ttls[prefix]['24'] += 1
elif ttl < 60*60*168:
prefixes_ttls[prefix]['168'] += 1
elif ttl < 60*60*336:
prefixes_ttls[prefix]['336'] += 1
else:
prefixes_ttls[prefix]['1000'] += 1
keys_count = len(keys)
print " ---> %s total keys" % keys_count
for prefix, rest in prefixes.items():
print " ---> %4s: (%.4s%%) %s keys" % (prefix, 100. * (len(rest) / float(keys_count)), len(rest))
print " ---> %4s: (%.4s%%) %s keys (%s)" % (prefix, 100. * (len(rest) / float(keys_count)), len(rest), dict(prefixes_ttls[prefix]))
def round_time(dt=None, round_to=60):