lock_expires_in ||= 30 response = orig_read(key, options) return nil if response.nil? data, expires_at = response if Time.now > expires_at && !orig_read("lock_#{key}").present? orig_write("lock_#{key}", true, :expires_in => lock_expires_in) return nil else data end end Todas requests antes de 12:05 recebem cache hit do cache válido
lock_expires_in ||= 30 response = orig_read(key, options) return nil if response.nil? data, expires_at = response if Time.now > expires_at && !orig_read("lock_#{key}").present? orig_write("lock_#{key}", true, :expires_in => lock_expires_in) return nil else data end end Ao 12:06 o cache vai estar stale
lock_expires_in ||= 30 response = orig_read(key, options) return nil if response.nil? data, expires_at = response if Time.now > expires_at && !orig_read("lock_#{key}").present? orig_write("lock_#{key}", true, :expires_in => lock_expires_in) return nil else data end end novas requests percebem que tem um lock criado
lock_expires_in ||= 30 response = orig_read(key, options) return nil if response.nil? data, expires_at = response if Time.now > expires_at && !orig_read("lock_#{key}").present? orig_write("lock_#{key}", true, :expires_in => lock_expires_in) return nil else data end end elas serão servidas com o cache antigo novas requests percebem que tem um lock criado