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