Only store ephemeral objects in the cache
The application cache should never be used as the sole store for long-lived objects. An engineer should be able to run Rails.cache.clear
at any time and not break a feature or raise any exceptions.
Good 🔗
def user_clicked_link(user, link)
LinkClick.create!(user:, link:)
end
def user_clicked_link?(user, link)
Rails.cache.fetch("clicked-linked/#{user.id}/#{link.id}", expires_in: 1.week) do
LinkClick.exist?(user:, link:)
end
end
Bad 🔗
def user_clicked_link(user, link)
Rails.cache.write("clicked-link/#{user.id}/#{link.id}", true)
end
def user_clicked_link?(user, link)
!!Rails.cache.read("clicked-link/#{user.id}/#{link.id}")
end