1. A method for controlling a cache, comprising: managing data in the cache by assigning at least one state to each portion of the cache data, wherein managing each portion of the cache data is enabled by a state machine comprising a plurality of states and a set of state transitions; associating each of the plurality of states with a control structure; associating each portion of the cache data with a set of attributes; and enabling each of the plurality of states to be aware of the cache data, wherein each state includes at least one of: a Free state where the cache data contains unvalidated data; a Clean state where the cache data is valid and clean and no flush is required; a Dirty state where the cache data is valid and dirty and a flush is required; a Sticky state where the cache data is valid and clean and was accessed at least twice by at least one of a read operation or a write operation; a StickyDirty state where the cache data contains valid dirty data that was accessed at least twice by at least one of a read operation or a write operation; a Flush state where the cache data contains valid dirty data that is to be written to a storage device; and a Hash state where the cache is in the process of getting valid data from at least one of the physical storage device or a host.