Mercurial > rsstweet
comparison app/models/tweet.rb @ 97:ff5557f9902c
Avoid uniformly expiring cache
| author | nanaya <me@myconan.net> | 
|---|---|
| date | Thu, 28 Jul 2016 07:08:52 +0900 | 
| parents | cf9a9ce2d034 | 
| children | c1d5d8be92c6 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 96:148d8c17cb79 | 97:ff5557f9902c | 
|---|---|
| 1 class Tweet | 1 class Tweet | 
| 2 def cache_expires_time | |
| 3 (10 + rand(15)).minutes | |
| 4 end | |
| 5 | |
| 2 def timeline | 6 def timeline | 
| 3 start_client_config_id = @client_config_id | 7 start_client_config_id = @client_config_id | 
| 4 | 8 | 
| 5 begin | 9 begin | 
| 6 @timeline ||= | 10 @timeline ||= | 
| 7 Rails.cache.fetch({ :timeline => @twitter_id }, :expires_in => 20.minutes) do | 11 Rails.cache.fetch({ :timeline => @twitter_id }, :expires_in => cache_expires_time) do | 
| 8 @client.user_timeline(@twitter_id, :count => 40, :exclude_replies => false, :include_rts => true) | 12 @client.user_timeline(@twitter_id, :count => 40, :exclude_replies => false, :include_rts => true) | 
| 9 end | 13 end | 
| 10 rescue Twitter::Error::TooManyRequests | 14 rescue Twitter::Error::TooManyRequests | 
| 11 next_client_config_id = @client_config_id + 1 | 15 next_client_config_id = @client_config_id + 1 | 
| 12 init_client next_client_config_id | 16 init_client next_client_config_id | 
| 22 def user | 26 def user | 
| 23 @user ||= | 27 @user ||= | 
| 24 if timeline.any? | 28 if timeline.any? | 
| 25 timeline.first.user | 29 timeline.first.user | 
| 26 else | 30 else | 
| 27 Rails.cache.fetch({ :user => @twitter_id }, :expires_in => 20.minutes) do | 31 Rails.cache.fetch({ :user => @twitter_id }, :expires_in => cache_expires_time) do | 
| 28 @client.user(@twitter_id) | 32 @client.user(@twitter_id) | 
| 29 end | 33 end | 
| 30 end | 34 end | 
| 31 end | 35 end | 
| 32 | 36 | 
