Medplum's cache usage sets items to expire after 24 hours. Redis will naturally hold on to cached items until it's full and needs to evict. It's not that it "needed 3 GB" of cache, but rather that your Redis instance supported it, so Medplum used it.
For a small deployment, you can definitely get away with ElastiCache cache.t2.micro or cache.t3.micro, which fit into AWS free tier, and would therefore cost $0.
If you truly want to minimize costs, you can run everything on a single EC2 host. See:
https://www.medplum.com/docs/self-hosting/install-on-ubuntu
Medplum requires BullMQ for background job management, which is pretty integral to the system. BullMQ requires Redis, so it's essentially part of the stack today. It's conceivably possible to disable enough parts of the system to make BullMQ and Redis optional. We would happily accept pull requests if anyone wants to help out!