module MeRedis::ZipToHash

include

Public Class Methods

included(base) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 32
def self.included(base)
  base.extend(MeRedis::ClassMethods)
  base.prepend(PrependMethods)
end

Public Instance Methods

me_del( *keys ) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 37
def me_del( *keys )
  keys.length == 1 ? hdel( *split_key(*keys) ) : pipelined{ keys.each{ |key| hdel( *split_key(key) ) } }
end
me_exists?(key) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 52
def me_exists?(key); hexists(*split_key(key)) end
me_get( key ) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 43
def me_get( key ); hget(*split_key(key)) end
me_getset(key, value) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 45
def me_getset(key, value)
  # multi returns array of results, also we can use raw results in case of commpression take place
  # but inside pipeline, multi returns nil
  ftr = []
  ( multi{ ftr << me_get( key ); me_set( key, value ) } || ftr )[0]
end
me_incr(key) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 54
def me_incr(key); hincrby( *split_key(key), 1 ) end
me_incrby(key, value) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 56
def me_incrby(key, value); hincrby(*split_key(key), value) end
me_mget( *keys ) click to toggle source

be aware: you cant save result of me_mget inside pipeline or multi cause pipeline returns nil

# File lib/me_redis/zip_to_hash.rb, line 66
def me_mget( *keys )
  pipelined { keys.each{ |key| me_get( key ) } }
end
me_mget_p( *keys ) click to toggle source

version to be called inside pipeline, to get values, call map(&:value)

# File lib/me_redis/zip_to_hash.rb, line 71
def me_mget_p( *keys )
  ftr = []
  pipelined { keys.each{ |key| ftr << me_get( key ) } }
  ftr
end
me_mset( *args ) click to toggle source

must be noticed it's not a equal replacement for a mset, because me_mset can be partially executed, since redis doesn't rollbacks partially failed transactions

# File lib/me_redis/zip_to_hash.rb, line 60
def me_mset( *args )
  #it must be multi since it keeps an order of commands
  multi{ args.each_slice(2) { |key, value| me_set( key, value ) } }
end
me_set( key, value ) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 41
def me_set( key, value ); hset( *split_key(key), value ) end
me_setnx( key, value ) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 42
def me_setnx( key, value ); hsetnx( *split_key(key), value ) end

Private Instance Methods

split_key(key) click to toggle source
# File lib/me_redis/zip_to_hash.rb, line 79
def split_key(key)
  split = key.to_s.scan(/\A(.*?)(\d+)\z/).flatten
  raise ArgumentError.new("Cannot split key: #{key}, key doesn't end with the numbers after zipping(#{key})!" ) if split.length == 0

  split[0] = split[0] + (split[1].to_i / @hash_max_ziplist_entries).to_s
  split[1] = ( split[1].to_i % @hash_max_ziplist_entries)
  split[1] = split[1].to_base62 if self.class.me_config.integers_to_base62

  split
end