Castillo struck out nine in 6 2/3 innings and Woodruff struck out nine in 5 2/3 innings.
Each gave up one home run. Castillo was nicked for a solo home run by Jedd Gyorko that gave the Brewers a 1-0 lead in the fifth after Castillo had retired 10 straight.
It didn’t last long. Eugenio Suarez homered in the sixth and it was a two-run blast to give the Reds a 2-1 lead.
And the Reds wiped away all doubt with four runs in the eighth.
Curt Casali gave his team a little breathing room with a leadoff home run and then Mike Moustakas shoved a sword into the stomachs of his former Milwaukee teammates with a three-run home run.
As is their usual modus operandi, all six Reds runs were produced by home runs.
Suarez became the father of a girl last week and said, "That home run was for my little princess.
“I was ready for that pitch,” Suarez said of the 0-and-2 pitch from Woodruff. “They threw me a lot of breaking balls and I didn’t want to chase those pitches. I was waiting for a pitch in my strike zone and he made that mistake right in my power zone and I hit that ball so good.”
It could turn out to be the biggest home run of the year for the Reds, winners in eight of their last nine.
“Right now I don’t pay attention to my numbers,” said Suarez. “I know what I can do and I just want to help my team keep winning. These games are like the playoffs for us.”
It was 0-0 until the fifth when Milwaukee’s Gyorko fell behind 0-and-2 leading off the inning, then launched one into the left field upper deck for a 1-0 Brewers lead.
The Reds wasted opportunities in the second and fourth when Woodruff wriggled out of jam-ups.
Suarez walked and Moustakas doubled to open the second, putting runners on third and second with no outs.
Jesse Winker crushed one directly to first baseman Daniel Vogelbach. Brian Goodwin struck out on a full count and Freddy Galvis grounded to second, leaving both runners anchored.
Suarez singled with one out in the fourth and Moustakas walked, but Winker grounded into an inning-ending double play.
Woodruff was one pitch away from getting out of another problem in the sixth, but Suarez made certain there was no escape this time. And with one swing of the bat, Suarez unscrewed the bottle and runs poured across like olives out of a jar after the first one is pried out.
Nick Castellanos doubled with one out and moved to third on a wild pitch. Joey Votto grounded out and Woodruff had a 1-and-2 count on Suarez.
The next pitch, a center-cut fastball, was blasted into the great beyond. And that pitch ended Woodruff’s night, his 100th and most devastating pitch.
Suarez’s departing gift left Woodruff with a line of 5 2/3 innings, two runs, four hits, two walks and nine strikeouts.
Castillo exited in the top of the seventh. He issued a leadoff walk and a one-out double to Jace Peterson, putting runners on third and second. Castillo struck out Orlando Arcia for the second out, but manager David Bell decided that was enough and brought in Amir Garrett.
Garrett faced pinch-hitter Tyrone Taylor and induced an inning-ending ground ball, stranding the potential tying and go-ahead runs.
Garrett issued a one-out walk in the eighth and closer Raisel Iglesias was rushed to the mound to face Ryan Braun. And the inning quickly ended when Braun hit into a double play.
Milwaukee’s Drew Rasmussen started the eighth and with one pitch it was 3-1. Casali cleared the left field wall for a first-pitch home run and Moustakas put the exclamation point on this one with his three-run rip.
Nate Jones pitched the ninth and gave up a meaningless two-out, two-run home run to Jace Peterson.
Castillo was rewarded with the victory, his fourth straight after losing his first five decisions this season.
“We were mixing our pitches (with catcher Curt Casali) very well tonight,” said Castillo. “We’re working perfectly right now, working perfectly as a team. We’ve won eight of nine and everything is going our way.”