Alvarez singled in Andrew McCutchen in the third inning and delivered his 16th home run of the season in the sixth, an inning before he drove a pitch into the right-field corner with the bases loaded.
Cincinnati starter Homer Bailey left the game after six innings with a 3-2 lead but reliever Alfredo Simon (5-3) allowed singles to Bryan Morris and Starling Marte. After an out, McCutchen walked to load the bases. Tony Cingrani replaced Simon and struck out Garrett Jones.
Alvarez drilled the second pitch he saw from Cingrani into the corner and all three runners ahead of him scored easily.
That handed the win to Bryan Morris (4-2) won gave up three hits and a run in two innings of relief. Tony Watson added two innings of no-hit relief in earning his second save.
Joey Votto singled in a run for the Reds in the first inning but Alvarez tied the score with his third-inning hit. Cincinnati went up 2-1 in the fourth on Jay Bruce's 15th home run of the season. Alvarez's home run tied the score again before his three-run double.
The Reds got the final run in the bottom of the seventh on a fielder's choice.