diff --git a/apps/reader/models.py b/apps/reader/models.py index 5b1cce46b..51bd8debd 100644 --- a/apps/reader/models.py +++ b/apps/reader/models.py @@ -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) diff --git a/apps/social/models.py b/apps/social/models.py index 866f9093f..af87d9851 100644 --- a/apps/social/models.py +++ b/apps/social/models.py @@ -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) diff --git a/apps/statistics/rstats.py b/apps/statistics/rstats.py index 1430768c5..953148d59 100644 --- a/apps/statistics/rstats.py +++ b/apps/statistics/rstats.py @@ -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):