discourse/spec/components/redis_store_spec.rb
Sam Saffron 14db879a31 DEV: Implement a faster Discourse.cache
This is a bottom up rewrite of Discourse cache to support faster performance
and a limited surface area.

ActiveSupport::Cache::Store accepts many options we do not use, this partial
implementation only picks the bits out that we do use and want to support.

Additionally params are named which avoids typos such as "expires_at" vs "expires_in"

This also moves a few spots in Discourse to use Discourse.cache over setex
Performance of setex and Discourse.cache.write is similar.
2019-12-03 14:03:30 +01:00

66 lines
975 B
Ruby

# frozen_string_literal: true
require 'rails_helper'
require 'cache'
describe "Redis Store" do
let :cache do
Cache.new(namespace: 'foo')
end
let :store do
DiscourseRedis.new_redis_store
end
before(:each) do
cache.redis.del "key"
store.delete "key"
end
it "can store stuff" do
store.fetch "key" do
"key in store"
end
r = store.read "key"
expect(r).to eq("key in store")
end
it "doesn't collide with our Cache" do
store.fetch "key" do
"key in store"
end
cache.fetch "key" do
"key in cache"
end
r = store.read "key"
expect(r).to eq("key in store")
end
it "can be cleared without clearing our cache" do
cache.clear
store.clear
store.fetch "key" do
"key in store"
end
cache.fetch "key" do
"key in cache"
end
store.clear
expect(store.read("key")).to eq(nil)
expect(cache.fetch("key")).to eq("key in cache")
end
end