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



633
634
635
# File 'lib/familia/redisobject.rb', line 633

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

#add(score, v) ⇒ Object

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



638
639
640
641
642
# File 'lib/familia/redisobject.rb', line 638

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

#at(idx) ⇒ Object



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

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

#collect(&blk) ⇒ Object



699
700
701
# File 'lib/familia/redisobject.rb', line 699

def collect &blk
  members.collect &blk
end

#collectraw(&blk) ⇒ Object



715
716
717
# File 'lib/familia/redisobject.rb', line 715

def collectraw &blk
  membersraw.collect &blk
end

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



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

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

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



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

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

#each(&blk) ⇒ Object



691
692
693
# File 'lib/familia/redisobject.rb', line 691

def each &blk
  members.each &blk
end

#each_with_index(&blk) ⇒ Object



695
696
697
# File 'lib/familia/redisobject.rb', line 695

def each_with_index &blk
  members.each_with_index &blk
end

#eachraw(&blk) ⇒ Object



707
708
709
# File 'lib/familia/redisobject.rb', line 707

def eachraw &blk
  membersraw.each &blk
end

#eachraw_with_index(&blk) ⇒ Object



711
712
713
# File 'lib/familia/redisobject.rb', line 711

def eachraw_with_index &blk
  membersraw.each_with_index &blk
end

#empty?Boolean

Returns:

  • (Boolean)


627
628
629
# File 'lib/familia/redisobject.rb', line 627

def empty?
  size == 0
end

#firstObject

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



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

def first
  at(0)
end

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



766
767
768
# File 'lib/familia/redisobject.rb', line 766

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

#lastObject

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



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

def last
  at(-1)
end

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

Returns:

  • (Boolean)


650
651
652
# File 'lib/familia/redisobject.rb', line 650

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

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



667
668
669
670
671
# File 'lib/familia/redisobject.rb', line 667

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

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



675
676
677
678
# File 'lib/familia/redisobject.rb', line 675

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

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



723
724
725
726
727
# File 'lib/familia/redisobject.rb', line 723

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]



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

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



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

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

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



729
730
731
732
# File 'lib/familia/redisobject.rb', line 729

def rangeraw sidx, eidx, opts={}
  opts[:with_scores] = true if opts[:withscores]
  redis.zrange(rediskey, sidx, eidx, opts)
end

#rank(v) ⇒ Object

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



656
657
658
659
# File 'lib/familia/redisobject.rb', line 656

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

#remrangebyrank(srank, erank) ⇒ Object



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

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

#remrangebyscore(sscore, escore) ⇒ Object



762
763
764
# File 'lib/familia/redisobject.rb', line 762

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

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



680
681
682
683
684
# File 'lib/familia/redisobject.rb', line 680

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

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



686
687
688
689
# File 'lib/familia/redisobject.rb', line 686

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

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



734
735
736
737
738
# File 'lib/familia/redisobject.rb', line 734

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



740
741
742
743
# File 'lib/familia/redisobject.rb', line 740

def revrangeraw sidx, eidx, opts={}
  opts[:with_scores] = true if opts[:withscores]
  redis.zrevrange(rediskey, sidx, eidx, opts)
end

#revrank(v) ⇒ Object

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



662
663
664
665
# File 'lib/familia/redisobject.rb', line 662

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

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



644
645
646
647
# File 'lib/familia/redisobject.rb', line 644

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

#select(&blk) ⇒ Object



703
704
705
# File 'lib/familia/redisobject.rb', line 703

def select &blk
  members.select &blk
end

#selectraw(&blk) ⇒ Object



719
720
721
# File 'lib/familia/redisobject.rb', line 719

def selectraw &blk
  membersraw.select &blk
end

#sizeObject Also known as: length



622
623
624
# File 'lib/familia/redisobject.rb', line 622

def size
  redis.zcard rediskey
end