2016-12-28 3 views
1

django-redis 백엔드와 django.core.cache.cache 모듈을 사용하고 있습니다. django 캐시 모듈은 목록으로 이동하고 특정 데이터 구조를 조작하는 적절한 기능을 지원하지 않습니다.Django redis LPUSH/RPUSH

장고 캐시 모듈의 목록을 업데이트하는 데 사용되는 암시 구현 : 전체 목록은 응용 프로그램 서버의 메모리에로드되고 있기 때문에

my_list = cache.get('my_list') 
my_list.append('my value') 

cache.set('my_list', my_list) 

이러한 접근 방식은 효율적이지 않습니다.

Redis는 목록을 동적으로 업데이트하기 위해 LPUSH/RPUSH 명령을 지원합니다. 그러나 장고 캐시 모듈에서 이러한 메서드를 사용할 수없는 것처럼 보입니다.

공식 python redis 클라이언트는 이러한 방법을 구현하는 것으로 보입니다. 장고가이 구현을 제공하지 않는 이유가 있습니까? 나는 호기심을 묻고있다. 아마도 몇 가지 세부 사항을 놓친 것일까 요?

답변

2

원시 클라이언트 및 명령 액세스를 지원하므로 django 캐시를 사용하는 대신 원시 클라이언트에 액세스해야합니다.

3.12

http://niwinz.github.io/django-redis/latest/#_raw_client_access

. 원시 클라이언트 액세스 어떤 상황에서는 응용 프로그램이 Django 캐시 인터페이스에 의해 노출 된 이 아닌 몇 가지 고급 기능을 사용하려면 원시 Redis 클라이언트에 액세스해야합니다. raw connection을 생성하기위한 또 다른 설정을 저장하는 것을 피하기 위해 django-redis는 캐시 연결 문자열을 재사용하는 원시 클라이언트를 얻을 수있는 함수를 노출합니다. get_redis_connection (alias).

코드 예제 :

>>> from django_redis import get_redis_connection 
>>> con = get_redis_connection("default") 
>>> con 
<redis.client.StrictRedis object at 0x2dc4510> 
>>> con.lpush('mylist',1) 
+0

감사합니다! @druvatak –