Skip to content

Commit

Permalink
Add delete and expire methods
Browse files Browse the repository at this point in the history
  • Loading branch information
joker1007 committed Apr 7, 2014
1 parent da6b8d7 commit 2fbda5d
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 3 deletions.
38 changes: 36 additions & 2 deletions lib/redis_cacheable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ def find_from_redis(key)
end
end

def del_from_redis(key)
redis do |conn|
conn.del(key)
end
end

# @private
# for internal use
def __redis_cache_key__
Expand All @@ -80,9 +86,37 @@ def __redis_cache_attrs__
end
end

def cache_to_redis
def cache_to_redis(expire: nil)
redis do |conn|
if expire
conn.setex(redis_cache_key, expire, MultiJson.dump(redis_cache_data))
else
conn.set(redis_cache_key, MultiJson.dump(redis_cache_data))
end
end
end

def del_from_redis
redis do |conn|
conn.del(redis_cache_key)
end
end

def expire_redis(sec)
redis do |conn|
conn.expire(redis_cache_key, sec)
end
end

def expireat_redis(unix_time)
redis do |conn|
conn.expireat(redis_cache_key, unix_time)
end
end

def ttl_redis
redis do |conn|
conn.set(redis_cache_key, MultiJson.dump(redis_cache_data))
conn.ttl(redis_cache_key)
end
end

Expand Down
2 changes: 1 addition & 1 deletion redis-cacheable.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
spec.require_paths = ["lib"]

spec.add_dependency "activesupport", ">= 3"
spec.add_dependency "redis"
spec.add_dependency "redis", ">= 3"
spec.add_dependency "redis-namespace"
spec.add_dependency "connection_pool"
spec.add_dependency "multi_json"
Expand Down
48 changes: 48 additions & 0 deletions spec/lib/redis_cacheable_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ class InheritBase < CacheableObject
class InheritChild < InheritBase; end

describe RedisCacheable do
before do
Redis.new.flushall
end

describe "Object including RedisCacheable" do
describe "#cache_to_redis" do
context "if redis_attrs is symbols" do
Expand Down Expand Up @@ -70,5 +74,49 @@ class InheritChild < InheritBase; end
end
end
end

describe "#del_from_redis" do
it "delete cached data from redis" do
object = CacheableObject.new(id: 1, name: "target")
object.cache_to_redis
expect(CacheableObject.find_from_redis(1)).to eq({"id" => 1, "name" => "target"})
object.del_from_redis

expect(CacheableObject.find_from_redis(1)).to be_nil
end
end

describe "#expire_redis" do
it "set expire time to cached data" do
object = CacheableObject.new(id: 1, name: "target")
object.cache_to_redis
expect(CacheableObject.find_from_redis(1)).to eq({"id" => 1, "name" => "target"})
object.expire_redis(2)
expect(CacheableObject.find_from_redis(1)).to eq({"id" => 1, "name" => "target"})
sleep 2
expect(CacheableObject.find_from_redis(1)).to be_nil
end
end

describe "#expireat_redis" do
it "set expire time to cached data by unix_time" do
object = CacheableObject.new(id: 1, name: "target")
object.cache_to_redis
expect(CacheableObject.find_from_redis(1)).to eq({"id" => 1, "name" => "target"})
object.expireat_redis((Time.now + 2).to_i)
expect(CacheableObject.find_from_redis(1)).to eq({"id" => 1, "name" => "target"})
sleep 2
expect(CacheableObject.find_from_redis(1)).to be_nil
end
end

describe "#ttl_redis" do
it "returns time to expire as second" do
object = CacheableObject.new(id: 1, name: "target")
object.cache_to_redis
object.expire_redis(2)
expect((1.0..2.0).cover?(object.ttl_redis)).to be_true
end
end
end
end

0 comments on commit 2fbda5d

Please sign in to comment.