Terms of the deal weren't revealed but CBSSports.com reported it was worth a total of $15 million.
Ludwick in October turned down a $5 million mutual option for 2013, becoming a free agent.
The veteran played a key role the Reds' run to the National League Central crown this past season, smacking 26 homers with 80 RBI while batting .275 over 125 games.
"We know he had other offers, and we're glad we were able to reach an agreement to bring Ryan back for at least two more years," Reds General Manager Walt Jocketty said.
The 10-year veteran has also played for Texas, Cleveland, St. Louis, San Diego and Pittsburgh.