From 2f09415d8897e19130ec2f0eb16a841034f895e9 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Mon, 18 Apr 2016 22:25:18 -0700 Subject: [PATCH] quick and dirty cache for popular tags result --- Gemfile | 1 + Gemfile.lock | 5 +++++ environment.rb | 3 +++ models/tag.rb | 10 +++++++++- 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 35a420e7..0f11c869 100644 --- a/Gemfile +++ b/Gemfile @@ -38,6 +38,7 @@ gem 'will_paginate' gem 'simpleidn' gem 'gandi' gem 'hoe', '3.14.2', require: nil +gem 'msgpack' platform :mri, :rbx do gem 'magic' # sudo apt-get install file, For OSX: brew install libmagic diff --git a/Gemfile.lock b/Gemfile.lock index 34d4e46c..c6597bfb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -101,6 +101,7 @@ GEM ruby-progressbar mocha (1.1.0) metaclass (~> 0.0.1) + msgpack (0.7.5) multi_json (1.11.2) net-scp (1.2.1) net-ssh (>= 2.6.5) @@ -259,6 +260,7 @@ DEPENDENCIES minitest minitest-reporters mocha + msgpack paypal-recurring pg poltergeist @@ -297,3 +299,6 @@ DEPENDENCIES webmock will_paginate zipruby + +BUNDLED WITH + 1.11.2 diff --git a/environment.rb b/environment.rb index 2314638b..6a3baa04 100644 --- a/environment.rb +++ b/environment.rb @@ -62,6 +62,9 @@ Sidekiq.configure_client do |config| config.redis = sidekiq_redis_config end +$redis = Redis.new +$redis_cache = Redis::Namespace.new :cache, redis: $redis + # :nocov: if ENV['RACK_ENV'] == 'development' # Run async jobs immediately in development. diff --git a/models/tag.rb b/models/tag.rb index 2ec4cce4..e5c7bdb0 100644 --- a/models/tag.rb +++ b/models/tag.rb @@ -23,6 +23,14 @@ class Tag < Sequel::Model end def self.popular_names(limit=10) - DB["select tags.name,count(*) as c from sites_tags inner join tags on tags.id=sites_tags.tag_id where tags.name != '' and tags.is_nsfw='f' group by tags.name having count(*) > 1 order by c desc LIMIT ?", limit].all + cache = $redis_cache.get :tag_popular_names + if cache.nil? + res = DB["select tags.name,count(*) as c from sites_tags inner join tags on tags.id=sites_tags.tag_id where tags.name != '' and tags.is_nsfw='f' group by tags.name having count(*) > 1 order by c desc LIMIT ?", limit].all + $redis_cache.set :tag_popular_names, res.to_msgpack + $redis_cache.expire :tag_popular_names, 86400 # 24 hours + else + res = MessagePack.unpack cache, symbolize_keys: true + end + res end end