diff --git a/changelogs/unreleased/jprovazn-fix-mr-caching.yml b/changelogs/unreleased/jprovazn-fix-mr-caching.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7ad7ed54143675fe68888cdeb83918222528142b
--- /dev/null
+++ b/changelogs/unreleased/jprovazn-fix-mr-caching.yml
@@ -0,0 +1,5 @@
+---
+title: Invalidate merge request diffs cache if diff data change.
+merge_request:
+author:
+type: fixed
diff --git a/lib/gitlab/diff/file_collection/merge_request_diff.rb b/lib/gitlab/diff/file_collection/merge_request_diff.rb
index c358ae428cf9542fcbe66d70619dd1f16749900a..be25e1bab21be6ed0db578eca32fc1ec5d04dd64 100644
--- a/lib/gitlab/diff/file_collection/merge_request_diff.rb
+++ b/lib/gitlab/diff/file_collection/merge_request_diff.rb
@@ -34,7 +34,7 @@ module Gitlab
         end
 
         def cache_key
-          [@merge_request_diff, 'highlighted-diff-files', diff_options]
+          [@merge_request_diff, 'highlighted-diff-files', Gitlab::Diff::Line::SERIALIZE_KEYS, diff_options]
         end
 
         private
diff --git a/lib/gitlab/diff/line.rb b/lib/gitlab/diff/line.rb
index 2b3ebfbb9ffb12f67dda77f0856e82be97f795ad..1faf77706345a4607ed60980a4760678761c37c8 100644
--- a/lib/gitlab/diff/line.rb
+++ b/lib/gitlab/diff/line.rb
@@ -1,6 +1,8 @@
 module Gitlab
   module Diff
     class Line
+      SERIALIZE_KEYS = %i(line_code text type index old_pos new_pos).freeze
+
       attr_reader :line_code, :type, :index, :old_pos, :new_pos
       attr_writer :rich_text
       attr_accessor :text
@@ -19,13 +21,9 @@ module Gitlab
         new(hash[:text], hash[:type], hash[:index], hash[:old_pos], hash[:new_pos], line_code: hash[:line_code])
       end
 
-      def serialize_keys
-        @serialize_keys ||= %i(line_code text type index old_pos new_pos)
-      end
-
       def to_hash
         hash = {}
-        serialize_keys.each { |key| hash[key] = send(key) } # rubocop:disable GitlabSecurity/PublicSend
+        SERIALIZE_KEYS.each { |key| hash[key] = send(key) } # rubocop:disable GitlabSecurity/PublicSend
         hash
       end
 
diff --git a/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb b/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb
index f48ee8924e8c8a0ebde967e0d0583ad1e2077795..79287021981e747183958660bf69e97b6ac516ee 100644
--- a/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb
+++ b/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb
@@ -20,6 +20,15 @@ describe Gitlab::Diff::FileCollection::MergeRequestDiff do
     diff_files
   end
 
+  it 'it uses a different cache key if diff line keys change' do
+    mr_diff = described_class.new(merge_request.merge_request_diff, diff_options: nil)
+    key = mr_diff.cache_key
+
+    stub_const('Gitlab::Diff::Line::SERIALIZE_KEYS', [:foo])
+
+    expect(mr_diff.cache_key).not_to eq(key)
+  end
+
   shared_examples 'initializes a DiffCollection' do
     it 'returns a valid instance of a DiffCollection' do
       expect(diff_files).to be_a(Gitlab::Git::DiffCollection)