Gordon's home run to lead off the fourth snapped a 4-4 tie. Cain homered to open the fifth. Teaford struck out four in three innings to pick up the victory in relief.
Jay Bruce homered in the first inning to extend his hitting streak to six games, the longest by the Reds this spring.
Neither starting pitcher was sharp. Reds right-hander Mike Leake allowed four runs on eight hits and two walks in three innings. Royals left-hander Jonathan Sanchez left after 51 pitches in two-plus innings, charged with four runs on three hits and two walks.
Royals catcher Salvador Perez left after one inning with a knee injury and was taken for an MRI.