1) Autosave at predefined intervals.
2) Keep a local save, and upload the info whenever something major happens. Like you don't need to send each and every slash on a monster, rather the experience gained or lost at the end of the battle.
But, the best way is to limit how often the player can take an action, and query the server such that the actual task is performed serverside, and the result is returned to the game, instead of the other way around. This is the way games like travian work.
For example, if you hit a monster, send that info to server, and wait for the server to return how much health the monster has left. This way, the player relies on the server, and can't really force it to overload

, also if for some reason the player suddenly disconnects, your server already will be updated to latest change.