Рейтлимитеры предназначены не для защиты от (D)DoS-атак, а для ограничения количества запросов на эндпоинт(ы) в единицу времени. А если на ваш сервак пустят хороший поток UDP-трафа, то вас не спасет ни какой рейтлимитер, т.к. до него даже дело не дойдет.
Банальная очередь. Хотите in-process, хотите отдельный сервер (NAST, RabbitMQ etc.).
Из SQL пишете в очередь, из горутины читаете и обрабатываете как хотите. В случае отдельно стоящего сервера получите еще и масштабируемость.
MGET key [key ...]
Returns the values of all specified keys. For every key that does not hold a string value or does not exist, the special value nil is returned. Because of this, the operation never fails. https://redis.io/commands/mget
Если поля структуры не экспортируемые, а этот кусок кода говорит, что это именно так, то все поля структуры будут иметь пустые значения.
Index out of range говорит о том, что settingList пуст.
У вас с дизайном беда. Нельзя изменять количество доступного для покупки товара ДО оформления заказа. Иначе вам достаточно быстро скликают все стоки. От того, что пользователь положил товар в корзину, на складе его меньше не становится.
А уже в момент оформения заказа обновляйте стоки. И следите за тем, чтобы в корзину не положили товара больше, чем реально есть на складе.