shared lock for reads and unique lock for writes
declare cache as object and not pointer in serach engine data to simulate singleton declaration
put a lock infront of the clear function to make it threadsafe
remove clear function from cache because cache will never get dropped
unit tests
unit tests and timestamp as part of key
cache generations
hash the key
500 mb
1000 mb
250 mb
rebase against implement-cache