The 33-year-old will get $6 million in 2020 and $8 million the following year. Cincinnati has a $10 million club option for 2022 with a $1 million, and Miley can earn $500,000 annually in performance bonuses based on innings.
He joins a rotation that includes All-Stars Luis Castillo and Sonny Gray, along with Trevor Bauer and Anthony DeSclafani. Bauer came from Cleveland last July as part of the deal for outfielder Yasiel Puig and head into the final year of his contract.
"We felt it was important to add more innings and depth to the pitching staff, and as a left-hander he will be a great complement to our existing group," president of baseball operations Dick Williams said.
It's the Reds' second notable offseason deal. Former Brewers second baseman Mike Moustakas got a $64 million, four-year deal to fill the Reds' hole at second base and upgrade an offense that was near the bottom of the NL in runs last season.
Miley went 14-6 with a 3.98 ERA in 33 starts for the American League champion Houston Astros last season. He made only one appearance in the playoffs, giving up three runs in 2 2/3 innings in a Division Series loss to Tampa Bay.
The left-hander had a rough September as well. He went 1-2 in five starts and lasted only 11 1/3 innings overall. He gave up 28 hits and 21 runs in the month.
Miley made $5 million last season in base salary and performance bonuses.
Miley was an All-Star in 2012. He's 85-82 career with a 4.23 ERA in nine seasons with Arizona (2011-14), Boston (2015), Seattle (2016), Baltimore (2016-17), Milwaukee (2018) and Houston.