I remember we made a switch to redis because java's memcached library was unmaintained. I made I joke that it's just feature-complete and cannot be improved upon, people chuckled, but we still did the switch.
Quite a bit of risk telescoping there...because you had the source code to the memcached library so in the theoretical case you found a bug in mature code (how many times have you seen that?), you weren't SOL. So instead you switched to an entirely new system? If you were trying to minimize risk and cost, you did the opposite unless memcached was doing something else that was a problem.
It wasn't entirely just that, we had to switch to redis for another sub-system and IIRC there some positive implication for cache layer as well. It's been awhile it wasn't just because memcached libary was unmaintained.
Honestly having looked at the memcached clients available for Java recently, I don't think any of the options could be considered feature-complete. None of the main ones support the meta protocol at all, meaning most of the advanced features aren't possible (and these are things that can't be emulated on the client side).
Hell, the main feature I needed (bulk CAS get) didn't even require the meta protocol or recent memcached features - spymemcached just never bothered to implement it. I ended up abandoning the change I was working on, because the upstream never looked at my PR and it wasn't worth forking over (bigco bureaucracy etc).
There are also quite a few legitimate bugs open for years that haven't had so much as a comment from maintainers.