cache(key) { ... } helper executes the contents of the block and caches the result with the given key for a certain period of time.
The documentation describes in detail all the various options and functions.
In your case ['store',Product.latest] are the parameters that create the cache key name. Array elements are combined to create a String , similar to store/products/100-20140101-163830 , which is then used as a cache key to store the result of the block.
The reason Product.latest is passed as an argument to the cache key is a trick to make sure the fragment has expired as soon as a new product is added to the database. This approach is often referred to as a key expiration model.
source share