Guest User

Untitled

a guest
Jul 21st, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.95 KB | None | 0 0
  1. require 'rubygems'
  2. require 'redis'
  3.  
  4. $redis = Redis.new()
  5. $redis.select(3)
  6.  
  7. # do a zdiffstore only on scores that match
  8. # ie [23:12345] will only be removed by [23:12345], not [23:12350]
  9. def zdiffstore(x, y)
  10. $redis.zunionstore "tmp.zu", [x, y], :weights=>[1,-1], :aggregate=>:sum
  11. $redis.zremrangebyscore("tmp.zu", "0", "+inf")
  12. $redis.zinterstore "o", ["tmp.zu", y], :weights=>[1,1], :aggregate=>:max
  13. x = $redis.zrange "o", 0, -1, :with_scores => true
  14. return Hash[*x.flatten]
  15. end
  16.  
  17. # do a zdiffstore ignoring scores that differ
  18. # ie [23:12345] will be removed by [23:12350]
  19. def zdiffstore_justkeys(x, y)
  20. $redis.zunionstore "tmp.zu", [x, y], :weights=>['-inf',1], :aggregate=>:sum
  21. $redis.zremrangebyscore("tmp.zu", "-inf", "0")
  22. $redis.zinterstore "o", ["tmp.zu", y], :weights=>[1,1], :aggregate=>:max
  23. x = $redis.zrange "o", 0, -1, :with_scores => true
  24. return Hash[*x.flatten]
  25. end
  26.  
  27. a = zdiffstore("user:rjp:read", "all:messages")
  28. p a.size
Add Comment
Please, Sign In to add comment