diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 78f24dbd7efc6dc51a789a1834cfe1da7ed62198..f61baf00525b32b4170193a548ad5fe6d6718259 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -276,4 +276,18 @@ module ProjectsHelper
   def readme_cache_key
     [@project.id, @project.commit.sha, "readme"].join('-')
   end
+
+  def round_commit_count(project)
+    count = project.commit_count
+
+    if count > 10000
+      '10000+'
+    elsif count > 5000
+      '5000+'
+    elsif count > 1000
+      '1000+'
+    else
+      count
+    end
+  end
 end
diff --git a/app/models/project.rb b/app/models/project.rb
index b161cbe86b9972394522c9cca7353bf2ad978056..ff372ea9aa50cb180e1a865dce8200e52f63d596 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -683,6 +683,10 @@ class Project < ActiveRecord::Base
     update_attribute(:repository_size, repository.size)
   end
 
+  def update_commit_count
+    update_attribute(:commit_count, repository.commit_count)
+  end
+
   def forks_count
     ForkedProjectLink.where(forked_from_project_id: self.id).count
   end
diff --git a/app/models/repository.rb b/app/models/repository.rb
index bca14aa1a33a923d1e448deae50df3b7e7e66238..2985619fd2e5eecc77cb7e4b1ae8a24ca520bb09 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -94,18 +94,6 @@ class Repository
     gitlab_shell.rm_tag(path_with_namespace, tag_name)
   end
 
-  def round_commit_count
-    if commit_count > 10000
-      '10000+'
-    elsif commit_count > 5000
-      '5000+'
-    elsif commit_count > 1000
-      '1000+'
-    else
-      commit_count
-    end
-  end
-
   def branch_names
     cache.fetch(:branch_names) { raw_repository.branch_names }
   end
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index c36113329ea795833cc00ed1f99f440b2658a312..3511392d1d82b52833f89d6ef5998873a1408379 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -21,7 +21,6 @@ class GitPushService
 
     project.ensure_satellite_exists
     project.repository.expire_cache
-    project.update_repository_size
 
     if push_remove_branch?(ref, newrev)
       @push_commits = []
diff --git a/app/views/explore/projects/_project.html.haml b/app/views/explore/projects/_project.html.haml
index d65fb529373131b7bae68e3f217644124380854b..d769c91545d0a9bc201b876bba295f9f82cd3ec5 100644
--- a/app/views/explore/projects/_project.html.haml
+++ b/app/views/explore/projects/_project.html.haml
@@ -14,7 +14,7 @@
 
     .repo-info
       - unless project.empty_repo?
-        = link_to pluralize(project.repository.round_commit_count, 'commit'), namespace_project_commits_path(project.namespace, project, project.default_branch)
+        = link_to pluralize(round_commit_count(project), 'commit'), namespace_project_commits_path(project.namespace, project, project.default_branch)
         &middot;
         = link_to pluralize(project.repository.branch_names.count, 'branch'), namespace_project_branches_path(project.namespace, project)
         &middot;
diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml
index 98d9053eb1d98cd8ff52e740cc02f634d2f9bf01..b90cadfb1e20c46814791e263cb43bbfceedd184 100644
--- a/app/views/projects/show.html.haml
+++ b/app/views/projects/show.html.haml
@@ -13,7 +13,7 @@
   %ul.nav.nav-pills
     %li
       = link_to namespace_project_commits_path(@project.namespace, @project, @ref || @repository.root_ref) do
-        = pluralize(number_with_delimiter(@repository.commit_count), 'commit')
+        = pluralize(number_with_delimiter(@project.commit_count), 'commit')
     %li
       = link_to namespace_project_branches_path(@project.namespace, @project) do
         = pluralize(number_with_delimiter(@repository.branch_names.count), 'branch')
diff --git a/app/workers/project_cache_worker.rb b/app/workers/project_cache_worker.rb
index 4c14565dce52fd7668ea3e5d0fb2499bdf3ce54c..61416d634bdc25d43d52ad6a08238484e6f422f0 100644
--- a/app/workers/project_cache_worker.rb
+++ b/app/workers/project_cache_worker.rb
@@ -4,6 +4,9 @@ class ProjectCacheWorker
   sidekiq_options queue: :default
 
   def perform(project_id)
-    Project.find(project_id).repository.build_cache
+    project = Project.find(project_id)
+    project.update_repository_size
+    project.update_commit_count
+    project.repository.build_cache
   end
 end
diff --git a/app/workers/repository_import_worker.rb b/app/workers/repository_import_worker.rb
index e6a50afedb12003bb99c3ebb09056097767733c3..94832872d13ddccb192eaf05ac1d29f269b1bd57 100644
--- a/app/workers/repository_import_worker.rb
+++ b/app/workers/repository_import_worker.rb
@@ -28,7 +28,7 @@ class RepositoryImportWorker
     project.import_finish
     project.save
     project.satellite.create unless project.satellite.exists?
-    project.update_repository_size
+    ProjectCacheWorker.perform_async(project.id)
     Gitlab::BitbucketImport::KeyDeleter.new(project).execute if project.import_type == 'bitbucket'
   end
 end
diff --git a/db/migrate/20150717130904_add_commits_count_to_project.rb b/db/migrate/20150717130904_add_commits_count_to_project.rb
new file mode 100644
index 0000000000000000000000000000000000000000..9b46daa5933901797740130f80a672c965f21463
--- /dev/null
+++ b/db/migrate/20150717130904_add_commits_count_to_project.rb
@@ -0,0 +1,5 @@
+class AddCommitsCountToProject < ActiveRecord::Migration
+  def change
+    add_column :projects, :commit_count, :integer, default: 0
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index d6c34a77ee614b2776774540cc0f89affa502b88..a63c2d05821226bd0a556f68333306891f9d2bec 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20150713160110) do
+ActiveRecord::Schema.define(version: 20150717130904) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -374,6 +374,7 @@ ActiveRecord::Schema.define(version: 20150713160110) do
     t.integer  "star_count",             default: 0,        null: false
     t.string   "import_type"
     t.string   "import_source"
+    t.integer  "commit_count",           default: 0
   end
 
   add_index "projects", ["created_at", "id"], name: "index_projects_on_created_at_and_id", using: :btree
diff --git a/lib/repository_cache.rb b/lib/repository_cache.rb
index 639687067ecf49e6ccbc864242f25325a9b4b66b..8ddc3511293e5dfd7419bb368dd022cbbd604eda 100644
--- a/lib/repository_cache.rb
+++ b/lib/repository_cache.rb
@@ -20,6 +20,10 @@ class RepositoryCache
   end
 
   def exist?(key)
-    backend.exist?(key)
+    backend.exist?(cache_key(key))
+  end
+
+  def read(key)
+    backend.read(cache_key(key))
   end
 end