A WooCommerce store captures payments normally and customers receive confirmation emails, but some orders never appear in the WordPress Orders screen.
The problem started after enabling Redis object caching.
Disabling the cache plugin instantly brings the orders back. Why so?!
This happens because Redis is serving stale query results, not because the orders are missing.
WooCommerce writes order data correctly to the database, but when Redis or Memcached is misconfigured, WordPress reads cached query results instead of fetching fresh rows. That makes it look like orders never existed even though they are safely stored.
You can confirm this by disabling the object-cache plugin and refreshing the Orders page. If the missing orders suddenly appear, the database is fine and the cache is the problem.