diff --git a/config/config.sample.php b/config/config.sample.php
index a9fafe7b4f12473146bc4d183285cc1f3d15047d..23a27fa3ec0dbdb66ddb52fba2cafc99294f9d67 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -1039,6 +1039,12 @@ $CONFIG = array(
  */
 'filelocking.enabled' => false,
 
+/**
+ * Memory caching backend for file locking
+ * Because most memcache backends can clean values without warning using redis is recommended
+ */
+'memcache.locking' => '\OC\Memcache\Redis',
+
 /**
  * This entry is just here to show a warning in case somebody copied the sample
  * configuration. DO NOT ADD THIS SWITCH TO YOUR CONFIGURATION!
diff --git a/lib/private/memcache/factory.php b/lib/private/memcache/factory.php
index bbfd775c7749e58c931d0cdcdaff2d38d96aef26..6e9aaa11d85e7bc3215ebb8354adfebb643c0dfe 100644
--- a/lib/private/memcache/factory.php
+++ b/lib/private/memcache/factory.php
@@ -46,13 +46,19 @@ class Factory implements ICacheFactory {
 	 */
 	private $distributedCacheClass;
 
+	/**
+	 * @var string $lockingCacheClass
+	 */
+	private $lockingCacheClass;
+
 	/**
 	 * @param string $globalPrefix
 	 * @param string|null $localCacheClass
 	 * @param string|null $distributedCacheClass
+	 * @param string|null $lockingCacheClass
 	 */
 	public function __construct($globalPrefix,
-		$localCacheClass = null, $distributedCacheClass = null)
+		$localCacheClass = null, $distributedCacheClass = null, $lockingCacheClass = null)
 	{
 		$this->globalPrefix = $globalPrefix;
 
@@ -62,8 +68,23 @@ class Factory implements ICacheFactory {
 		if (!($distributedCacheClass && $distributedCacheClass::isAvailable())) {
 			$distributedCacheClass = $localCacheClass;
 		}
+		if (!($lockingCacheClass && $lockingCacheClass::isAvailable())) {
+			// dont fallback since the fallback might not be suitable for storing lock
+			$lockingCacheClass = '\OC\Memcache\Null';
+		}
 		$this->localCacheClass = $localCacheClass;
 		$this->distributedCacheClass = $distributedCacheClass;
+		$this->lockingCacheClass = $lockingCacheClass;
+	}
+
+	/**
+	 * create a cache instance for storing locks
+	 *
+	 * @param string $prefix
+	 * @return \OCP\IMemcache
+	 */
+	public function createLocking($prefix = '') {
+		return new $this->lockingCacheClass($this->globalPrefix . '/' . $prefix);
 	}
 
 	/**
diff --git a/lib/private/server.php b/lib/private/server.php
index 551012d8355bb041845102a526455bd239aceb9a..ab1506fa13acea1eafd0bb980a8404dc4a42f22d 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -234,7 +234,8 @@ class Server extends SimpleContainer implements IServerContainer {
 				$prefix = md5($instanceId.'-'.$version.'-'.$path);
 				return new \OC\Memcache\Factory($prefix,
 					$config->getSystemValue('memcache.local', null),
-					$config->getSystemValue('memcache.distributed', null)
+					$config->getSystemValue('memcache.distributed', null),
+					$config->getSystemValue('memcache.locking', null)
 				);
 			}
 
@@ -426,7 +427,7 @@ class Server extends SimpleContainer implements IServerContainer {
 			if ($c->getConfig()->getSystemValue('filelocking.enabled', false) or (defined('PHPUNIT_RUN') && PHPUNIT_RUN)) {
 				/** @var \OC\Memcache\Factory $memcacheFactory */
 				$memcacheFactory = $c->getMemCacheFactory();
-				$memcache = $memcacheFactory->createDistributed('lock');
+				$memcache = $memcacheFactory->createLocking('lock');
 				if (!($memcache instanceof \OC\Memcache\Null)) {
 					return new MemcacheLockingProvider($memcache);
 				}