If your game is real-time:
You should make sure that as soon as a movement is completed, if a key is currently pressed, the character will immediately start moving in that direction. This ensures that the game does not require the player to have exact keypress timing to move efficiently, which in my experience is very frustrating.
There are two possible ways to do this:
Any time there is no movement in progress, check the movement keys' state and start another movement if one is down. (If you only have key events, then remember the last one seen for a movement key.)
This is sort of like "ignoring input", but note that it will not ignore a key which was pressed before movement finished but is still down when it does finish.
Any time a movement key is pressed, remember its direction. Any time there is no movement in progress, use the single recorded keypress to start a new movement.
The difference between these two cases is whether a key which is pressed and released before movement becomes possible will still cause another movement. I recommend trying both to see which feels better.
If your game is turn-based:
I recommend, for turn-based games, that you take your second approach: use all the keypresses you got, in sequence. Furthermore, if you have keypresses buffered like this, speed up your animations. This allows the player to quickly move through parts of the game they're replaying without it getting tedious.
If it is infeasible to speed up the game when there is buffered input, then you should either ignore input or buffer exactly one keypress (first or last doesn't matter much).