if you have aggregate that live for a longer period of time (persisting hundreds of events), a snapshotter is really recommended. The threshold that suits your application best is something you should find out using load tests. A couple of hundred events is generally fine.
A cache is recommended when aggregates are subject to periods of high activity. Since your aggregate can be easily loaded from disk using the snapshot, you don’t want the cache to store to disk. Just set overflowToDisk to false in your ehcache config. Check out the ehcache config for exactly how to configure your cache.
If your aggregate has at most 5 events, you might not need either cache nor snapshotter. Loading the aggregate from 4 events will not give you a tremendous latency. If all 5 events happen in a very short amount of time, you could consider using a cache for improved performance or latency reduction.