summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/core/cache/backends/memcached.py13
-rw-r--r--docs/topics/cache.txt9
-rw-r--r--tests/cache/tests.py12
3 files changed, 24 insertions, 10 deletions
diff --git a/django/core/cache/backends/memcached.py b/django/core/cache/backends/memcached.py
index ed3f2af492..6a7ced6073 100644
--- a/django/core/cache/backends/memcached.py
+++ b/django/core/cache/backends/memcached.py
@@ -26,12 +26,16 @@ class BaseMemcachedCache(BaseCache):
self._class = library.Client
self._options = params.get('OPTIONS') or {}
+ @property
+ def client_servers(self):
+ return self._servers
+
@cached_property
def _cache(self):
"""
Implement transparent thread-safe access to a memcached client.
"""
- return self._class(self._servers, **self._options)
+ return self._class(self.client_servers, **self._options)
def get_backend_timeout(self, timeout=DEFAULT_TIMEOUT):
"""
@@ -192,6 +196,13 @@ class PyLibMCCache(BaseMemcachedCache):
import pylibmc
super().__init__(server, params, library=pylibmc, value_not_found_exception=pylibmc.NotFound)
+ @property
+ def client_servers(self):
+ output = []
+ for server in self._servers:
+ output.append(server[5:] if server.startswith('unix:') else server)
+ return output
+
def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None):
key = self.make_key(key, version=version)
self.validate_key(key)
diff --git a/docs/topics/cache.txt b/docs/topics/cache.txt
index cc9b22ae65..ccaa82277f 100644
--- a/docs/topics/cache.txt
+++ b/docs/topics/cache.txt
@@ -114,15 +114,6 @@ In this example, Memcached is available through a local Unix socket file
}
}
-When using the ``pylibmc`` binding, do not include the ``unix:/`` prefix::
-
- CACHES = {
- 'default': {
- 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
- 'LOCATION': '/tmp/memcached.sock',
- }
- }
-
One excellent feature of Memcached is its ability to share a cache over
multiple servers. This means you can run Memcached daemons on multiple
machines, and the program will treat the group of machines as a *single*
diff --git a/tests/cache/tests.py b/tests/cache/tests.py
index 3aa01ccced..93f0d87ecb 100644
--- a/tests/cache/tests.py
+++ b/tests/cache/tests.py
@@ -1441,6 +1441,18 @@ class PyLibMCCacheTests(BaseMemcachedTests, TestCase):
self.assertTrue(cache._cache.binary)
self.assertEqual(cache._cache.behaviors['tcp_nodelay'], int(True))
+ def test_pylibmc_client_servers(self):
+ backend = self.base_params['BACKEND']
+ tests = [
+ ('unix:/run/memcached/socket', '/run/memcached/socket'),
+ ('/run/memcached/socket', '/run/memcached/socket'),
+ ('127.0.0.1:11211', '127.0.0.1:11211'),
+ ]
+ for location, expected in tests:
+ settings = {'default': {'BACKEND': backend, 'LOCATION': location}}
+ with self.subTest(location), self.settings(CACHES=settings):
+ self.assertEqual(cache.client_servers, [expected])
+
@override_settings(CACHES=caches_setting_for_tests(
BACKEND='django.core.cache.backends.filebased.FileBasedCache',