Skip to content

Instantly share code, notes, and snippets.

@jgeiger
Created April 22, 2011 18:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jgeiger/937370 to your computer and use it in GitHub Desktop.
Save jgeiger/937370 to your computer and use it in GitHub Desktop.
using redis to reserve a set of records from a larger group
def find_for_curation(conditions, user_id)
RedisConnection.db.sadd('curators', user_id)
RedisConnection.db.del("curator-#{user_id}")
curator_ids = RedisConnection.db.smembers('curators')
curator_keys = curator_ids.map { |id| "curator-#{id}" }
active_annotation_ids = RedisConnection.db.sunion(*curator_keys)
annotations = Annotation.where(conditions).where("annotations.id NOT IN (#{active_annotation_ids.to_in_query_string})").joins(:ontology_term).joins(:ontology).limit(15).order('ontology_terms.name')
annotations.each do |annotation|
RedisConnection.db.sadd("curator-#{user_id}", annotation.id)
end
RedisConnection.db.expire("curator-#{user_id}", 300)
annotations
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment