I would like a page to be cached when it is accessed, not when it is saved.
I don't think you'll be able to do that. SS will get stuck in a violent loop if you say 'Only cache a page when you visit it, but in order to 'cache' it the filesystem publisher loads the page. You would need to perform quite a bit of custom code from FilesystemPublisher to get it working I think.
You may be better off trying partial caching.
in relation to this... I would like to ask where does the cached page saved?
It goes wherever you specify in the setup http://doc.silverstripe.org/staticpublisher#setup
relative to the installation location of SilverStripe.