Leake (8-9) gave up five hits in 7 2-3 innings, repeatedly pitching out of threats by getting ground balls.
''That ball was moving more than normal,'' Arizona catcher Miguel Montero said. ''His sinker was working.''
The Reds won for only the second time in 11 games since the All-Star break. The offense has been the biggest problem, scoring only 20 runs - by far the fewest in the majors over that span. Leake pitched in that way, too.
His single off the glove of diving third baseman Martin Prado drove in a run in the second off Cahill (1-8), who has yet to win as a starter this season.
''Fantastic job,'' third baseman Todd Frazier said. ''We needed it.''
Frazier and Brayan Pena had RBI singles off Cahill, who fell to 0-6 in seven starts this season.
Cahill gave up seven hits in six innings. He retired 11 straight over one stretch and didn't walk a batter for the second consecutive start.
''I can't remember the last time that happened,'' Cahill said.
It was an encouraging performance for Cahill.
''He threw the ball better,'' manager Kirk Gibson said. ''He's going to get confidence out of it. We've got to score some runs for him.''
A Reds lineup already missing first baseman Joey Votto and second baseman Brandon Phillips - both on the disabled list - also was without right fielder Jay Bruce, who went on bereavement leave for his grandfather's death.
Aroldis Chapman pitched the ninth for his 23rd save in 25 chances. He extended his streak of at least one strikeout in 45 consecutive appearances, a major league record for a reliever.
Diamondbacks: Gibson needs one more win to tie Bob Melvin (337) for most by a Diamondbacks manager. ... Left-hander Wade Miley (6-7) starts the final game of the series before Arizona returns home to face Pittsburgh. Miley is 3-1 with a 2.94 ERA in his last five starts.
Reds: Right-hander Alfredo Simon (12-5) tries for his first win since being chosen for his first All-Star team. In two starts since then, he's 0-2 and has given up seven runs - five earned - in 9 1-3 innings. ... The Reds start a series in Miami on Thursday.
Diamondbacks: Second baseman Aaron Hill was back in the starting lineup after being limited to one pinch-hitting appearance in the last two games because of a bruised right hand. ... Right-hander Bo Schultz was called up from Triple-A Reno to restock a bullpen depleted by two extra-inning games in the last three. Outfielder Alfredo Marte was optioned.
Reds: Right-hander Logan Ondrusek resumed throwing. He's been on the 15-day disabled list since July 22 with a sore pitching shoulder. ... Manager Bryan Price said left-hander Manny Parra hasn't pitched since July 20 because he's had a stiff back. ... Reliever Curtis Partch was called up from Triple-A Louisville to take Bruce's spot while he's on bereavement leave.
HURTS TO WATCH
Montero would rather try to hit Chapman's fastball than to catch it. He watched Reds All-Star catcher Devin Mesoraco catch fastballs clocked at 104 and 103 mph during Arizona's 2-1, 15-inning win on Monday and decided he wanted no part of that.
''You see the reaction from Mesoraco,'' Montero said. ''Every time he catches the ball it's like, `Oh, pain!'''
Arizona has lost six of its last eight against Cincinnati. ... Didi Gregorius has four triples, a career high. ... Arizona's bullpen hasn't allowed a run in the last 18 2-3 innings. ... The Reds' three runs matched their highest total in 11 games since the All-Star break. ... Billy Hamilton of the Reds opened the first with a double that snapped his career-worst slump at 0 for 15. Zack Cozart had an infield single - he was originally out at first but the call was overturned on appeal - that ended his 0-for-22 slump, which matched his career worst. ... Leake has 63 career hits, the most by a pitcher in the majors since 2010.
Follow Joe Kay on Twitter: http://twitter.com/apjoekay