Skip to content

Instantly share code, notes, and snippets.

@shreyansb
Last active August 29, 2015 14:16
Show Gist options
  • Save shreyansb/989e1a894bb3e36aba3e to your computer and use it in GitHub Desktop.
Save shreyansb/989e1a894bb3e36aba3e to your computer and use it in GitHub Desktop.
import config
import redis as _redis
redis = _redis.Redis(host=config.REDIS_HOST, port=int(config.REDIS_PORT))
REDIS_KEY_PATTERN = "feed:%s:%s"
feed_key = lambda _type, _id: REDIS_KEY_PATTERN % (_type, _id)
DEFAULT_MAX_LENGTH = 1000
DEFAULT_LIMIT = 50
def add_to_feed(feed_type, feed_id, items_dict, max_length=DEFAULT_MAX_LENGTH):
key = feed_key(feed_type, feed_id)
resp = redis.zadd(key, **items_dict)
trim_feed(key, max_length)
return resp
def remove_from_feed(feed_type, feed_id, *item_ids):
key = feed_key(feed_type, feed_id)
resp = redis.zrem(key, *item_ids)
return resp
def get_feed(feed_type, feed_id, limit=DEFAULT_LIMIT, page=0, with_scores=False):
key = feed_key(feed_type, feed_id)
min_rank = (limit * page)
max_rank = max(min_rank + limit - 1, 1)
return redis.zrevrange(key, min_rank, max_rank, withscores=with_scores)
def delete_feed(feed_type, feed_id):
key = feed_key(feed_type, feed_id)
return redis.delete(key)
def trim_feed(key, length):
if isinstance(length, int) and length > 0:
return redis.zremrangebyrank(key, 0, (-1 * length) - 1)
return 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment