With Duke leading 57-54, Melchionni missed a shot from the top of the circle as the shot clock expired, but Daniel Ewing for the rebound for the Blue Devils and was fouled with 31 seconds left. Ewing missed two free throws, but the second miss was rebounded by Duke's Shelden Williams.
A free throw by DeMarcus Nelson pushed Duke's lead to four points before a putback by Tech's Luke Schenscher cut the lead to 58-56 with 11 seconds left.
Mario West was called for a foul on the inbounds play, and Redick, who led Duke with 21 points, made two free throws to push the lead back to four.
Jarrett Jack led Tech (15-9, 6-7) with 20 points and Schenscher added 16.
The Yellow Jackets have not won consecutive games since early January.
Fouls were an issue for both teams in the first half.
Georgia Tech's B.J. Elder picked up his second foul less than 5 minutes into the game and sat out the rest of the half. He finished with two points.
Duke was limited after Nelson drew his third foul and went to the bench with 11:42 left in the half.
Jack, who became accustomed to taking the lead role for Tech when Elder missed nine full games and most of another with a strained left hamstring early in the ACC schedule, had 14 first-half points.
Duke countered with the outside shooting of Redick and Ewing, who combined for 27 points in the first half that ended in a 33-33 tie.
Tech missed its first 11 shots from the field in the second half until Elder finally broke the drought with his first basket of the game at the 13:52 mark. But Duke also struggled early in the half as its foul troubles worsened.
Ewing was called for his fourth foul less than 5 minutes into the half, and Nelson picked up his fourth at the 12:05 mark. Krzyzewski turned to sophomore Patrick Davidson, who had logged only 12 minutes in conference games.
Redick scored Duke's first points of the second half on a 3-pointer but he didn't score again until the free throws in the final seconds.
Ewing had 14 points for Duke, while Williams added 12, 10 in the second half.