Files
chatwoot/app/models/concerns/cache_keys.rb
Shivam Mishra 3ed80fa867 feat: expiry for cache keys [CW-3038] (#8793)
* feat: set cache keys for 3 days only

* feat: invalidate should set the latest timestamp

* refactor: cache_keys concern

* remove invalidate_cache method
* refactor reset to set to new value instead of delete
* ensure only one event is dispatched

* feat: set expiry to 24 hours

* chore: make expiry 48 hours

* feat: include destroy event

* feat: set expiry to 72 days

* fix: typo

* test: cache update after `touch`

* test: update cache keys

* refactor: remove after_touch, it's already handled in commit
2024-01-29 15:27:26 +05:30

47 lines
1.1 KiB
Ruby

module CacheKeys
extend ActiveSupport::Concern
include CacheKeysHelper
include Events::Types
CACHE_KEYS_EXPIRY = 72.hours
included do
class_attribute :cacheable_models
self.cacheable_models = [Label, Inbox, Team]
end
def cache_keys
keys = {}
self.class.cacheable_models.each do |model|
keys[model.name.underscore.to_sym] = fetch_value_for_key(id, model.name.underscore)
end
keys
end
def update_cache_key(key)
update_cache_key_for_account(id, key)
dispatch_cache_update_event
end
def reset_cache_keys
self.class.cacheable_models.each do |model|
update_cache_key_for_account(id, model.name.underscore)
end
dispatch_cache_update_event
end
private
def update_cache_key_for_account(account_id, key)
prefixed_cache_key = get_prefixed_cache_key(account_id, key)
Redis::Alfred.setex(prefixed_cache_key, Time.now.utc.to_i, CACHE_KEYS_EXPIRY)
end
def dispatch_cache_update_event
Rails.configuration.dispatcher.dispatch(ACCOUNT_CACHE_INVALIDATED, Time.zone.now, cache_keys: cache_keys, account: self)
end
end