Is cache memory unnecessary in microcontrollers?
Cache memory adds a level of latency unpredictability that may be unwanted. A lot (most?) of microcontrollers are used in a realtime setting where you have to budget for worst-case timing. It does not matter if your code is fast on average, if there is a chance that it won't meet the deadline in worst case. Worst case would be that your code or data is not in the cache, and since you have to budget for it anyway, the cache just adds extra cost and complexity.

Some microcontrollers I have worked with has a small embedded SRAM that can be used as a "manual cache". You put stuff there that must have a low latency, be it code or data.

Now, the term "microcontroller" is becoming more and more bloated. Is the 8-core ARM processor in your phone a microcontroller? If so, then yes, of course it should have a cache.