Class: Familia::SortedSet

Inherits:
RedisObject show all
Defined in:
lib/familia/redisobject.rb

Instance Attribute Summary

Attributes inherited from RedisObject

#cache, #name, #parent, #redis

Instance Method Summary collapse

Methods inherited from RedisObject

#class?, #clear_cache, #db, #dump_method, #echo, #exists?, #expire, #expireat, #from_redis, inherited, #initialize, #load_method, #move, #multi_from_redis, #parent?, #persist, #qstamp, #realttl, #rediskey, register, registration, #rename, #renamenx, #to_redis, #ttl, #type, #update_expiration

Constructor Details

This class inherits a constructor from Familia::RedisObject

Instance Method Details

#[]=(v, score) ⇒ Object

NOTE: The argument order is the reverse of #add e.g. obj.metrics = SCORE



635
636
637
# File 'lib/familia/redisobject.rb', line 635

def []= v, score
  add score, v
end

#add(score, v) ⇒ Object

NOTE: The argument order is the reverse of #[]=



640
641
642
643
644
# File 'lib/familia/redisobject.rb', line 640

def add score, v
  ret = redis.zadd rediskey, score, to_redis(v)
  update_expiration
  ret
end

#at(idx) ⇒ Object



791
792
793
# File 'lib/familia/redisobject.rb', line 791

def at idx
  range(idx, idx).first
end

#collect(&blk) ⇒ Object



701
702
703
# File 'lib/familia/redisobject.rb', line 701

def collect &blk
  members.collect &blk
end

#collectraw(&blk) ⇒ Object



717
718
719
# File 'lib/familia/redisobject.rb', line 717

def collectraw &blk
  membersraw.collect &blk
end

#decrement(v, by = 1) ⇒ Object Also known as: decr, decrby



778
779
780
# File 'lib/familia/redisobject.rb', line 778

def decrement v, by=1
  increment v, -by
end

#delete(v) ⇒ Object Also known as: remove, rem, del



784
785
786
# File 'lib/familia/redisobject.rb', line 784

def delete v
  redis.zrem rediskey, to_redis(v)
end

#each(&blk) ⇒ Object



693
694
695
# File 'lib/familia/redisobject.rb', line 693

def each &blk
  members.each &blk
end

#each_with_index(&blk) ⇒ Object



697
698
699
# File 'lib/familia/redisobject.rb', line 697

def each_with_index &blk
  members.each_with_index &blk
end

#eachraw(&blk) ⇒ Object



709
710
711
# File 'lib/familia/redisobject.rb', line 709

def eachraw &blk
  membersraw.each &blk
end

#eachraw_with_index(&blk) ⇒ Object



713
714
715
# File 'lib/familia/redisobject.rb', line 713

def eachraw_with_index &blk
  membersraw.each_with_index &blk
end

#empty?Boolean

Returns:

  • (Boolean)


629
630
631
# File 'lib/familia/redisobject.rb', line 629

def empty?
  size == 0
end

#firstObject

Return the first element in the list. Redis: ZRANGE(0)



796
797
798
# File 'lib/familia/redisobject.rb', line 796

def first
  at(0)
end

#increment(v, by = 1) ⇒ Object Also known as: incr, incrby



772
773
774
# File 'lib/familia/redisobject.rb', line 772

def increment v, by=1
  redis.zincrby(rediskey, by, v).to_i
end

#lastObject

Return the last element in the list. Redis: ZRANGE(-1)



801
802
803
# File 'lib/familia/redisobject.rb', line 801

def last
  at(-1)
end

#member?(v) ⇒ Boolean Also known as: include?

Returns:

  • (Boolean)


652
653
654
# File 'lib/familia/redisobject.rb', line 652

def member? v
  !rank(v).nil?
end

#members(count = -1,, opts = {}) ⇒ Object Also known as: to_a, all



669
670
671
672
673
# File 'lib/familia/redisobject.rb', line 669

def members count=-1, opts={}
  count -= 1 if count > 0
  el = membersraw count, opts
  multi_from_redis *el
end

#membersraw(count = -1,, opts = {}) ⇒ Object



677
678
679
680
# File 'lib/familia/redisobject.rb', line 677

def membersraw count=-1, opts={}
  count -= 1 if count > 0
  rangeraw 0, count, opts
end

#range(sidx, eidx, opts = {}) ⇒ Object



725
726
727
728
729
# File 'lib/familia/redisobject.rb', line 725

def range sidx, eidx, opts={}
  echo :range, caller[0] if Familia.debug
  el = rangeraw(sidx, eidx, opts)
  multi_from_redis *el
end

#rangebyscore(sscore, escore, opts = {}) ⇒ Object

e.g. obj.metrics.rangebyscore (now-12.hours), now, :limit => [0, 10]



753
754
755
756
757
# File 'lib/familia/redisobject.rb', line 753

def rangebyscore sscore, escore, opts={}
  echo :rangebyscore, caller[0] if Familia.debug
  el = rangebyscoreraw(sscore, escore, opts)
  multi_from_redis *el
end

#rangebyscoreraw(sscore, escore, opts = {}) ⇒ Object



759
760
761
762
# File 'lib/familia/redisobject.rb', line 759

def rangebyscoreraw sscore, escore, opts={}
  echo :rangebyscoreraw, caller[0] if Familia.debug
  redis.zrangebyscore(rediskey, sscore, escore, **opts)
end

#rangeraw(sidx, eidx, opts = {}) ⇒ Object



731
732
733
734
735
736
737
738
739
740
# File 'lib/familia/redisobject.rb', line 731

def rangeraw sidx, eidx, opts={}
  # NOTE: :withscores (no underscore) is the correct naming for the
  # redis-4.x gem. We pass :withscores through explicitly b/c
  # redis.zrange et al only accept that one optional argument.
  # Passing `opts`` through leads to an ArgumentError:
  #
  #   sorted_sets.rb:374:in `zrevrange': wrong number of arguments (given 4, expected 3) (ArgumentError)
  #
  redis.zrange(rediskey, sidx, eidx, **opts)
end

#rank(v) ⇒ Object

rank of member v when ordered lowest to highest (starts at 0)



658
659
660
661
# File 'lib/familia/redisobject.rb', line 658

def rank v
  ret = redis.zrank rediskey, to_redis(v)
  ret.nil? ? nil : ret.to_i
end

#remrangebyrank(srank, erank) ⇒ Object



764
765
766
# File 'lib/familia/redisobject.rb', line 764

def remrangebyrank srank, erank
  redis.zremrangebyrank rediskey, srank, erank
end

#remrangebyscore(sscore, escore) ⇒ Object



768
769
770
# File 'lib/familia/redisobject.rb', line 768

def remrangebyscore sscore, escore
  redis.zremrangebyscore rediskey, sscore, escore
end

#revmembers(count = -1,, opts = {}) ⇒ Object



682
683
684
685
686
# File 'lib/familia/redisobject.rb', line 682

def revmembers count=-1, opts={}
  count -= 1 if count > 0
  el = revmembersraw count, opts
  multi_from_redis *el
end

#revmembersraw(count = -1,, opts = {}) ⇒ Object



688
689
690
691
# File 'lib/familia/redisobject.rb', line 688

def revmembersraw count=-1, opts={}
  count -= 1 if count > 0
  revrangeraw 0, count, opts
end

#revrange(sidx, eidx, opts = {}) ⇒ Object



742
743
744
745
746
# File 'lib/familia/redisobject.rb', line 742

def revrange sidx, eidx, opts={}
  echo :revrange, caller[0] if Familia.debug
  el = revrangeraw(sidx, eidx, opts)
  multi_from_redis *el
end

#revrangeraw(sidx, eidx, opts = {}) ⇒ Object



748
749
750
# File 'lib/familia/redisobject.rb', line 748

def revrangeraw sidx, eidx, opts={}
  redis.zrevrange(rediskey, sidx, eidx, **opts)
end

#revrank(v) ⇒ Object

rank of member v when ordered highest to lowest (starts at 0)



664
665
666
667
# File 'lib/familia/redisobject.rb', line 664

def revrank v
  ret = redis.zrevrank rediskey, to_redis(v)
  ret.nil? ? nil : ret.to_i
end

#score(v) ⇒ Object Also known as: []



646
647
648
649
# File 'lib/familia/redisobject.rb', line 646

def score v
  ret = redis.zscore rediskey, to_redis(v)
  ret.nil? ? nil : ret.to_f
end

#select(&blk) ⇒ Object



705
706
707
# File 'lib/familia/redisobject.rb', line 705

def select &blk
  members.select &blk
end

#selectraw(&blk) ⇒ Object



721
722
723
# File 'lib/familia/redisobject.rb', line 721

def selectraw &blk
  membersraw.select &blk
end

#sizeObject Also known as: length



624
625
626
# File 'lib/familia/redisobject.rb', line 624

def size
  redis.zcard rediskey
end