mirror of
https://github.com/discourse/discourse.git
synced 2024-12-14 04:53:54 +08:00
88ecb650a9
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.
66 lines
975 B
Ruby
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
|