1GB in the cinnamon process alone seems relatively high to me. At least two sources, including links in other answers, suggest the whole system should use on the order of 800M when you initially boot and log in to Cinnamon.
1) It looks like Cinnamon version 4.0 includes significant fixes to memory management, based on the upstream GNOME project(s). I don't know if the fixes have been ported to earlier versions. (Also I am not 100% certain that Cinnamon suffered the same problem as upstream GNOME, but it is looking very suggestive :-).
I note the gnome-shell process on my Fedora Workstation 29 (which includes these upstream fixes) currently shows as using somewhere between 200-400M. (Although processes like this may be pinning more memory in less obvious ways).
2) The bug tracker and other sources say to be wary of any Cinnamon "spice applets, desklets, extensions", and non-default themes. They may cause the main cinnamon process to leak memory. I.e. make sure to test without them.
3) ghu knows what cinnamon-screensaver needs over 200M resident for when it's not active. It does not make me happy. Maybe also be some sort of leak. i) Try using whatever the default screensaver setting is, if you changed it. If you're not sure what the default was, try a blank screen option. ii) This might suggest a graphics driver problem - this can definitely be an issue, though I don't know if it's your main problem.
I make no promises! Maybe you can keep memory usage down to 3GB on idle, maybe not. If you can, it is not clear from your question that you would not consider 3GB on your "idle" load to be "high" as well :-).
4) If you are interested in learning about Terminal tools to look at memory usage:
At a basic level, please use free -h . free -g only shows the nearest gigabyte, e.g. it will show "0 shared" even if you have 499 megabytes used as "shared".
(Don't make too many assumptions about what "shared" means in free, without very careful testing. Except that free does not count "shared" as part of "used"; for technical reasons it counts "shared" as part of "cached". But unlike the rest of the cache, the "shared" is not automatically freed up when you need to allocate more memory).
atop is a bit complex but worth the effort IMO. sudo atop -r, press m and M to show PSIZE for each process. This avoids you double-counting memory which is shared between multiple processes. The atop package also includes a service which can log per-process memory usage every ten minutes - great for seeing if something tends to leak increase its memory usage over time :-P.
freedisplays the data depends on the kernel. See How can I get the amount of available memory portably across distributions?