mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
Adding ttls to redis stats sampler.
This commit is contained in:
parent
318aa32a80
commit
b50986388a
3 changed files with 26 additions and 8 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Reference in a new issue