Support connection pooled Redis

This commit is contained in:
Matt Larraz
2020-03-19 17:21:15 -07:00
parent b02c256c25
commit 3a37a74982

View File

@@ -9,21 +9,31 @@ module Suo
end end
def clear def clear
@client.del(@key) with { |r| r.del(@key) }
end end
private private
def with(&block)
if @client.respond_to?(:with)
@client.with(&block)
else
yield @client
end
end
def get def get
[@client.get(@key), nil] [with { |r| r.get(@key) }, nil]
end end
def set(newval, _, expire: false) def set(newval, _, expire: false)
ret = @client.multi do |multi| ret = with do |r|
if expire r.multi do |rr|
multi.setex(@key, @options[:ttl], newval) if expire
else rr.setex(@key, @options[:ttl], newval)
multi.set(@key, newval) else
rr.set(@key, newval)
end
end end
end end
@@ -31,11 +41,9 @@ module Suo
end end
def synchronize def synchronize
@client.watch(@key) do with { |r| r.watch(@key) { yield } }
yield
end
ensure ensure
@client.unwatch with { |r| r.unwatch }
end end
def initial_set(val = BLANK_STR) def initial_set(val = BLANK_STR)