Сохранить временную шкалу Twitter в кеше (используя Sinatra)?

Я делаю простое приложение Sinatra для отображения временной шкалы пользователя в Твиттере, используя драгоценный камень Twitter. После входа я получаю его / ее упоминания. Что-то вроде:

get '/' do
  @mentions = Twitter.mentions_timeline

  erb :home
end

Проблема в том, что я звоню в Twitter API каждый раз, когда пользователь заходит на домашнюю страницу. Я получаю ограниченную скорость, и это также неэффективно, так как я хочу только повторять выборку временной шкалы, скажем, каждые 3 минуты. Или, если это проще, я мог бы просто использовать кэш, как только достигну предела скорости.

После прочтения кажется, что лучший способ сделать это - сохранить эти данные в кеше, поэтому я не продолжаю делать запросы API. Как бы я поступил так?

2 ответа

Решение

Я делаю это, сохраняя твиты в Redis. Я загружаю твиты в виде вспомогательной функции, чтобы получить доступ к одной и той же кэшированной копии несколькими маршрутами.

Весь мой код на https://github.com/timmillwood/millwoodonline/blob/master/helpers/main.rb#L38 стесняйтесь брать то, что вам нужно.

Очевидным способом было бы сохранить временную шкалу пользователя в базе данных. Использование чего-то вроде MongoDB довольно тривиально, так как API Twitter возвращает json, и вы можете просто добавлять туда твиты по мере их поступления. Перед вызовом API Twitter проверьте возраст последнего упоминания пользователя и не звоните, если он относительно новый (например, 30 минут или меньше).

Другие вопросы по тегам