diff --git a/lib/classes/StudipMemcachedCache.php b/lib/classes/StudipMemcachedCache.php
index 0e44dd57e1c5176468afc0db610ff47cd2099bea..709ee2189973c965659c184a9fc6544c5a538bde 100644
--- a/lib/classes/StudipMemcachedCache.php
+++ b/lib/classes/StudipMemcachedCache.php
@@ -42,15 +42,27 @@ class StudipMemcachedCache implements StudipCache
         }
 
         $prefix = Config::get()->STUDIP_INSTALLATION_ID;
-        $this->memcache = new Memcached('studip' . $prefix ? '-' . $prefix : '');
+        $this->memcache = new Memcached(md5(json_encode($servers)));
 
         if (count($this->memcache->getServerList()) === 0) {
-            foreach ($servers as $server) {
-                $status = $this->memcache->addServer($server['hostname'], (int) $server['port']);
-
-                if (!$status) {
-                    throw new Exception("Could not add server: {$server['hostname']} @ port {$server['port']}");
-                }
+            // Set options (see https://www.php.net/manual/en/memcached.addservers.php#118940)
+            $this->memcache->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
+            $this->memcache->setOption(Memcached::OPT_SERVER_FAILURE_LIMIT, 2);
+            $this->memcache->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true);
+            $this->memcache->setOption(Memcached::OPT_RETRY_TIMEOUT, 1);
+            $this->memcache->setOption(Memcached::OPT_PREFIX_KEY, $prefix);
+
+            $status = $this->memcache->addServers(
+                array_map(
+                    function ($server) {
+                        return [$server['hostname'], (int) $server['port']];
+                    },
+                    $servers
+                )
+            );
+
+            if (!$status) {
+                throw new \Exception('Could not add memcached servers');
             }
         }
     }