Sha256: ebe38c8c53f39616ccb2b63ac41f852f2aeb9f6ca4ad685f18f0bdcf1d4ec87e
Contents?: true
Size: 1.24 KB
Versions: 3
Compression:
Stored size: 1.24 KB
Contents
module Asynchronic module DataStore class Redis LOCKED = 'locked' include Helper def initialize(scope, *args) @scope = Key[scope] @redis = Redic.new(*args) end def [](key) value = @redis.call! 'GET', @scope[key] value ? Marshal.load(value) : nil rescue => ex Asynchronic.logger.warn('Asynchronic') { ex.message } value end def []=(key, value) @redis.call! 'SET', @scope[key], Marshal.dump(value) end def delete(key) @redis.call! 'DEL', @scope[key] end def delete_cascade(key) @redis.call! 'DEL', @scope[key] @redis.call!('KEYS', @scope[key]['*']).each { |k| @redis.call! 'DEL', k } end def keys @redis.call!('KEYS', @scope['*']).map { |k| Key[k].remove_first } end def synchronize(key) while @redis.call!('GETSET', @scope[key][LOCKED], LOCKED) == LOCKED sleep Asynchronic.redis_data_store_sync_timeout end yield ensure @redis.call! 'DEL', @scope[key][LOCKED] end def connection_args [@scope, @redis.url] end def self.connect(*args) new(*args) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
asynchronic-3.0.3 | lib/asynchronic/data_store/redis.rb |
asynchronic-3.0.2 | lib/asynchronic/data_store/redis.rb |
asynchronic-3.0.1 | lib/asynchronic/data_store/redis.rb |