ST. LOUIS — After Tuesday's torrential rains subsided, the sun indeed came out Wednesday, just like that song from "Annie" promised. Instead of the adorable little redhead singing the tune, though, 6-foot-5, 230-pound right-hander Brad Keller made the sweetest music of any Royals starting pitcher in weeks.

Keller set the tone and the Royals followed, beating the St. Louis Cardinals 8-2 in front of an announced 42,725 in the first game of a split doubleheader at Busch Stadium. The Royals never trailed, breaking the game open with a six-run third inning.

Jorge Soler hit his team-leading 11th home run of the season, and Whit Merrifield went 2 for 5 with a double and an RBI. Nicky Lopez reached base three times (one hits, two walks), while Adalberto Mondesi and Hunter Dozier drove in two runs apiece.

Tuesday night's game was postponed because of severe weather that included thunderstorms, heavy rain and tornado warnings in St. Louis and a state of emergency for anticipated flooding.

Keller (3-5) pitched into the eighth inning, including seven scoreless to start the day, and held the Cardinals to one hit until the eighth. He allowed two runs, two hits and four walks in seven innings after he didn't record an out in the eighth.

"Anytime you get run support like that, you just basically go out there and say here it is and try to get in deep in the game as possible," Keller said.

Keller hadn't recorded a win since April 12 against Cleveland, and he'd lost each of his last four decisions over six starts. He'd walked 14 batters in his previous 16 innings.

On Wednesday, Keller needed just 75 pitches to get through six innings. He allowed just one hit, in the second, then went on cruise control through seven.

Keller hadn't pitched seven innings since the season opener, when he held the Chicago White Sox scoreless after a rain-delayed start at Kauffman Stadium.

Keller gave up a walk and a single to start the eighth inning. Kevin McCarthy, called up Tuesday, took over. McCarthy, who'd posted a 0.87 ERA in the minors since April 28, gave up a two-run double.

"I felt like my misses were a lot more around the zone, sliders in the dirt — not hanging," said Keller, who retired 10 consecutive batters during one stretch. "That last inning, just some splitters got away from and kind of sailed. For the most part, I felt like the fastball was close."

The Royals' six-run third inning, after they'd already grabbed a 1-0 lead, only added to Keller's comfort level. Keller came into the day having muddled through recent starts distinguished by a lack of command and an inconsistent pitching delivery.

The Royals' six-run third started off with a single lined up the middle by backup catcher Cam Gallagher, his second hit in his past two games.

Keller laid down a sacrifice bunt to put a runner in scoring position, and Merrifield's second single of the day scored Gallagher.

After Lopez's single left runners on the corners, Mondesi singled through the right side of the infield to score Merrifield. The Cardinals intentionally walked Alex Gordon to pitch to Dozier, and he hit a sacrifice fly to center field for the third run of the inning.

The next three came all at once when Soler, who'd homered twice against Cardinals starter Michael Wacha in 10 previous at-bats, smoked the first pitch an estimated 411 feet into the left-field stands. By the end of the third, the Royals led 7-0.

"Dozier had a couple of really good at-bats, sac flies and Soler with the big home run really got us going right there," Royals manager Ned Yost said. "Big at-bats by Mondi, by Whit, by Nicky. The top six guys were really, really good and Cam had a couple good hits."

In the seventh, Mondesi hit his major league-leading seventh triple of the season, driving in Lopez.