The functionality of both Replica Controller and Replica Set is quiet the same – they are responsible to make sure that X number of pods with label that is equal to there label selector will be scheduled to different nodes on the cluster.
ReplicaSet is the next generation of Replication Controller. Replication controller is kinda imperative, but replica sets try to be as declarative as possible.
The difference should be insignificant in most cases. ReplicaSet has a generalized label selector. ReplicaSet should support all the features the replication controller supports.
ReplicaSet is a replacement for the Replica controller and supports richer expressions for the label selector. You can choose between 4 values of operators In, NotIn, Exists, DoesNotExist
The main difference between a Replica Set and a Replication Controller right now is the selector support.
The second thing is the updating the pods