Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Invalidation problem #75

Closed
MikeVL opened this issue Feb 19, 2014 · 32 comments
Closed

Invalidation problem #75

MikeVL opened this issue Feb 19, 2014 · 32 comments

Comments

@MikeVL
Copy link
Contributor

MikeVL commented Feb 19, 2014

Заметил такое странное поведение при инвалидации кэша.

  1. Стартую приложение
  2. Делаю запрос к вьюхе, в которой есть обращение к БД
    b = Brand.objects.get(slug='slug_key')
  3. redis-cli показывает:
    redis 127.0.0.1:6379[2]> smembers "schemes:catalog.brand"
    1. "slug"
    2. "id"
  4. Делаю flushdb
  5. Повторяю запрос п. 2
  6. Ключи для инвалидации не создаются
    redis 127.0.0.1:6379[2]> smembers "schemes:catalog.brand"
    (empty list or set)

Хотя в кэше они есть:

redis 127.0.0.1:6379[2]> keys brand

  1. "conj:catalog.brand:id=1"
  2. "conj:catalog.brand:slug=slug_key"

Что можно сделать, чтобы запросы по slug=*** проходили инвалидацию?

@Suor
Copy link
Owner

Suor commented Feb 19, 2014

Делать flushdb во время работы не надо просто. Либо одновременно с
перезапуском процесса. Так что это не баг, нельзя вмешиваться в работу
системы и потом жаловаться на неё.

Дело в том, что схемы кешируются в памяти процесса, поэтому при втором
запросе cacheops думает что такие есть и не пересоздаёт их.

@Suor Suor closed this as completed Feb 19, 2014
@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 19, 2014

Ну я не жалуюсь. Так мы делали на тестовом сервере.
А вобще начали разбираться, потому, что у нас есть проблема с инвалидацией.
Почему то кеш не обновляется по полю slug=.
Сервер уже много раз был перезагружен, но все равно инвалидация не проходит.

Поле slug никак не хочет добавляться в ключ:

smembers "schemes:catalog.brand"

Вот и пытаемся разобраться.

@Suor
Copy link
Owner

Suor commented Feb 20, 2014

Что значит кэш не обновляется по полю slug? Идеальный ответ был бы в виде
теста :-)

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 20, 2014

У нас запросы вида Brand.objects.get(slug=***) не инвалидируются.
Я начал искать проблему, и думал проблема в том, что я описал в первом посте.

Вчера вечером в ключ "schemes:catalog.brand" я в ручную добавил поле slug.
Но сегодня утром проверил, и оказалось что данный ключ вобще не существует.

Я создал его в ручную. Добавил в него поля id и slug.

Через несколько часов, slug удалился, но добавился is_active.

Каким образом могло поле slug удалиться из ключа "schemes:catalog.brand" ?
Деплоев не делали, не перезагружали.
Запущено 8 демонов uwsgi с тредами.

@Suor
Copy link
Owner

Suor commented Feb 20, 2014

Сейчас, просмотрел код. Теоретически возможна ситуация когда происходит рассинхронизация схем в памяти процесса и в редисе при частом обновлении какого-то m2m.

Стоит попробовать использовать master кешопса отсюда, в нём проблема устранена.

@Suor Suor reopened this Feb 20, 2014
@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 20, 2014

Поставил из мастера, понаблюдаю как будет работать.

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 24, 2014

Не знаю, нормально или нет, создались вот такие ключики:

redis 127.0.0.1:6379> smembers schemes:catalog.brand
 1) "geo_id,geo_id,is_active"
 2) "geo_id,geo_id,geo_id,geo_id,is_active"
 3) "office_id"
 4) "is_active"
 5) "geo_id,geo_id,geo_id,is_active"
 6) "id"
 7) "is_active,geo_id,geo_id,geo_id,geo_id"
 8) "is_active,geo_id,geo_id,geo_id"
 9) "is_active,geo_id,geo_id"
10) "geo_id,is_active"
11) "is_active,geo_id"
12) "slug"

В коде есть такие запросы:

Brand.objects.filter(is_active=True).exclude(geo__in=[19, 25, 4, 13]).defer(*defer_fields).order_by('title')
Brand.objects.filter(is_active=True, geo=19).defer(*defer_fields).order_by('title')
Brand.objects.filter(is_active=True, geo=25).defer(*defer_fields).order_by('title')
Brand.objects.filter(is_active=True, geo=4).defer(*defer_fields).order_by('title')
Brand.objects.filter(is_active=True, geo=13).defer(*defer_fields).order_by('title')

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 24, 2014

Также, в случае рестарта Redis, пока не рестартану приложение, получаю такую ошибку:

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.5-py2.7.egg/django/core/handlers/base.py", line 115, in get_response response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/newrelic-2.12.0.10-py2.7-linux-x86_64.egg/newrelic/hooks/framework_django.py", line 492, in wrapper return wrapped(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/vluki-5.2.3-py2.7.egg/vluki/contrib/news/views.py", line 126, in day_archive page_item = paginator.page(page)
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.5-py2.7.egg/django/core/paginator.py", line 40, in page number = self.validate_number(number)
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.5-py2.7.egg/django/core/paginator.py", line 31, in validate_number if number > self.num_pages:
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.5-py2.7.egg/django/core/paginator.py", line 63, in _get_num_pages if self.count == 0 and not self.allow_empty_first_page:
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.5-py2.7.egg/django/core/paginator.py", line 51, in _get_count self._count = self.object_list.count()
File "/usr/local/lib/python2.7/dist-packages/cacheops/query.py", line 365, in count return cached_as(self, extra='count')(self._no_monkey.count)(self)
File "/usr/local/lib/python2.7/dist-packages/cacheops/query.py", line 100, in wrapper queryset._cache_results(cache_key, result, timeout)
File "/usr/local/lib/python2.7/dist-packages/cacheops/query.py", line 258, in _cache_results cache_thing(self.model, cache_key, results, cond_dnf, timeout or self._cacheconf['timeout'])
File "/usr/local/lib/python2.7/dist-packages/cacheops/query.py", line 58, in cache_thing model._cacheprofile['timeout'] + 10
File "/usr/local/lib/python2.7/dist-packages/redis-2.8.0-py2.7.egg/redis/client.py", line 2047, in __call__ return client.evalsha(self.sha, len(keys), *args)
File "/usr/local/lib/python2.7/dist-packages/redis-2.8.0-py2.7.egg/redis/client.py", line 1470, in evalsha return self.execute_command('EVALSHA', sha, numkeys, *keys_and_args)
File "/usr/local/lib/python2.7/dist-packages/redis-2.8.0-py2.7.egg/redis/client.py", line 394, in execute_command return self.parse_response(connection, command_name, **options)
File "/usr/local/lib/python2.7/dist-packages/redis-2.8.0-py2.7.egg/redis/client.py", line 404, in parse_response response = connection.read_response()
File "/usr/local/lib/python2.7/dist-packages/redis-2.8.0-py2.7.egg/redis/connection.py", line 316, in read_response raise response

ResponseError: NOSCRIPT No matching script. Please use EVAL.

@Suor
Copy link
Owner

Suor commented Feb 24, 2014

Ключики - ненормально, даже 2 ненормальности:

  • имена полей неупорядочены (я это поправил только что)
  • поля дублируются. Это, по-идее, может возникать только при запросах вида Brand.objects.cache().filter(id=1).filter(id=2). Совсем не исключено, если запросы строятся в результате какой-то логики, в цикле там.

@Suor
Copy link
Owner

Suor commented Feb 24, 2014

Ах, да. главный вопрос. Инвалидация-то работает?

@Suor
Copy link
Owner

Suor commented Feb 24, 2014

Проблема с ResponseError: NOSCRIPT No matching script. решается обновлением питоньего redis клиента до последней версии:

pip install -U redis

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 24, 2014

Инвалидация да, работает. Пока проблем не было.

  • По поводу дубликации полей. Я на тестовом сервере очистил кэш и сделал вот этот запрос:
    Brand.objects.filter(is_active=True).exclude(geo__in=[19, 25, 4, 13]).defer(*defer_fields).order_by('title')

Результат:

redis 127.0.0.1:6379[2]> smembers "schemes:catalog.brand"
1) "geo_id,geo_id,geo_id,is_active"
2) "geo_id,geo_id,is_active"
3) "geo_id,geo_id,geo_id,geo_id,is_active"
4) "geo_id,is_active"
5) "is_active"

@Suor
Copy link
Owner

Suor commented Feb 24, 2014

Попробовал воспроизвести, у меня не получается. Можно попробовать следующее:

  1. Выполнить то же самое при включеном мониторе редиса redis-cli -n <cacheops-db> monitor и послать мне лог.
  2. Постепенно упрощать запрос и модель пока косяк сохраняется. Послать мне оставшийся код, включая модель или оформить из него тест.

1 можно сделать быстро. 2 - в идеале. И обновить cacheops до последнего мастера перед тем как начинать )

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 24, 2014

Код питона:

>>> from elec.contrib.catalog.models import Brand
>>> defer_fields = ['text', 'tizer', 'url', 'url_rus', 'keywords']
>>> Brand.objects.filter(is_active=True).exclude(geo__in=[19, 25, 4, 13]).defer(*defer_fields).order_by('title')

Лог redis:

mike@iMac-Mikhail:elec:master$ redis-cli -n 2 monitor
OK
1393245148.301567 [0 127.0.0.1:58483] "SELECT" "2"
1393245148.301692 [2 127.0.0.1:58483] "GET" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.315951 [2 127.0.0.1:58483] "MULTI"
1393245148.316002 [2 127.0.0.1:58483] "GET" "schemes:catalog.brand:version"
1393245148.316031 [2 127.0.0.1:58483] "SMEMBERS" "schemes:catalog.brand"
1393245148.316058 [2 127.0.0.1:58483] "EXEC"
1393245148.316438 [2 127.0.0.1:58483] "MULTI"
1393245148.316461 [2 127.0.0.1:58483] "INCRBY" "schemes:catalog.brand:version" "1"
1393245148.316478 [2 127.0.0.1:58483] "SADD" "schemes:catalog.brand" "geo_id,is_active"
1393245148.316501 [2 127.0.0.1:58483] "SADD" "schemes:catalog.brand" "geo_id,geo_id,geo_id,geo_id,is_active"
1393245148.316518 [2 127.0.0.1:58483] "SADD" "schemes:catalog.brand" "geo_id,geo_id,is_active"
1393245148.316532 [2 127.0.0.1:58483] "SADD" "schemes:catalog.brand" "geo_id,geo_id,geo_id,is_active"
1393245148.316548 [2 127.0.0.1:58483] "SADD" "schemes:catalog.brand" "is_active"
1393245148.316563 [2 127.0.0.1:58483] "EXEC"
1393245148.318246 [2 127.0.0.1:58483] "MULTI"
1393245148.318316 [2 127.0.0.1:58483] "SETEX" "q:8f23cc431f27fd3c2d2fe9d519a40351" "900" "\x80\x02]q\x01(cdjango.db.models.base\nmodel_unpickle\nq\x02X\a\x00\x00\x00catalogq\x03U\x05Brandq\x04\x86]q\x05(U\x05tizerq\x06U\x04textq\aU\bkeywordsq\bU\x03urlq\tU\aurl_rusq\necdjango.db.models.query_utils\ndeferred_class_factory\nq\x0b\x87Rq\x0c}q\r(U\x05titleq\x0eX\x02\x00\x00\x003MU\tis_activeq\x0f\x88U\x06_stateq\x10cdjango.db.models.base\nModelState\nq\x11)\x81q\x12}q\x13(U\x06addingq\x14\x89U\x02dbq\x15U\adefaultq\x16ubU\x04slugq\x17X\x02\x00\x00\x003mU\toffice_idq\x18NU\x0clastmodifiedq\x19cdatetime\ndatetime\nq\x1aU\n\a\xde\x02\x13\x121'\x0e\xd2\xfc\x85Rq\x1bU\x04logoq\x1cX\"\x00\x00\x00files/2010/07/21/brand/3m-logo.gifU\x06geo_idq\x1dM\xdc\x01U\bpub_dateq\x1eh\x1aU\n\a\xda\a\x15\x15\x12\x18\x00\x00\x00\x85Rq\x1fU\x02idq M\xaf\x01ubh\x02h\x03h\x04\x86]q!(h\x06h\ah\bh\th\neh\x0b\x87Rq\"}q#(h\x0eX\x03\x00\x00\x00ABBh\x0f\x88h\x10h\x11)\x81q$}q%(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00abbh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x10\x150/\x00\x00\x00\x85Rq&h\x1cX\x13\x00\x00\x00brands/abb/logo.gifh\x1dM\xd7\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq'h K#ubh\x02h\x03h\x04\x86]q((h\x06h\ah\bh\th\neh\x0b\x87Rq)}q*(h\x0eX\n\x00\x00\x00ABL SURSUMh\x0f\x88h\x10h\x11)\x81q+}q,(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00abl-sursumh\x18Nh\x19h\x1aU\n\a\xdd\b\x1b\x15\x037\x00\x00\x00\x85Rq-h\x1cX\x1f\x00\x00\x00files/2013/08/27/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq.h K\x90ubh\x02h\x03h\x04\x86]q/(h\x06h\ah\bh\th\neh\x0b\x87Rq0}q1(h\x0eX\x0e\x00\x00\x00ABTECH Limitedh\x0f\x88h\x10h\x11)\x81q2}q3(h\x14\x89h\x15h\x16ubh\x17X\x0e\x00\x00\x00abtech-limitedh\x18Nh\x19h\x1aU\n\a\xdd\x05\x0f\x13\x166\x00\x00\x00\x85Rq4h\x1cX&\x00\x00\x00files/2012/03/05/brand/Abtech-logo.jpgh\x1dM\xd3\x01h\x1eh\x1aU\n\a\xdc\x03\x05\x11\"\x00\x00\x00\x00\x85Rq5h M\xd9\x01ubh\x02h\x03h\x04\x86]q6(h\x06h\ah\bh\th\neh\x0b\x87Rq7}q8(h\x0eX\x13\x00\x00\x00AEG Power Solutionsh\x0f\x88h\x10h\x11)\x81q9}q:(h\x14\x89h\x15h\x16ubh\x17X\x13\x00\x00\x00aeg-power-solutionsh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x05\x0f\x00\x00\x00\x00\x00\x85Rq;h\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.jpgh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x19\r.\x1c\x00\x00\x00\x85Rq<h Mo\x01ubh\x02h\x03h\x04\x86]q=(h\x06h\ah\bh\th\neh\x0b\x87Rq>}q?(h\x0eX\x05\x00\x00\x00AEMSAh\x0f\x88h\x10h\x11)\x81q@}qA(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00aemsah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\r:;\x00\x00\x00\x85RqBh\x1cX\x15\x00\x00\x00brands/aemsa/logo.gifh\x1dM\xda\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85RqCh K\xd1ubh\x02h\x03h\x04\x86]qD(h\x06h\ah\bh\th\neh\x0b\x87RqE}qF(h\x0eX\x04\x00\x00\x00AKSAh\x0f\x88h\x10h\x11)\x81qG}qH(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00aksah\x18Nh\x19h\x1aU\n\a\xdd\x06\r\x1507\x00\x00\x00\x85RqIh\x1cX\x1f\x00\x00\x00files/2011/06/21/brand/logo.jpgh\x1dK\x18h\x1eh\x1aU\n\a\xd8\a\a\r\x05*\x00\x00\x00\x85RqJh M\x03\x01ubh\x02h\x03h\x04\x86]qK(h\x06h\ah\bh\th\neh\x0b\x87RqL}qM(h\x0eX\x05\x00\x00\x00ALFRAh\x0f\x88h\x10h\x11)\x81qN}qO(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00alfrah\x18Nh\x19h\x1aU\n\a\xdd\t\n\x14\x1d\r\x00\x00\x00\x85RqPh\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x04\x123\x0b\x00\x00\x00\x85RqQh Mh\x01ubh\x02h\x03h\x04\x86]qR(h\x06h\ah\bh\th\neh\x0b\x87RqS}qT(h\x0eX\x15\x00\x00\x00ALL-BRIGHT TECHNOLOGYh\x0f\x88h\x10h\x11)\x81qU}qV(h\x14\x89h\x15h\x16ubh\x17X\x1c\x00\x00\x00all-bright-technology-co-ltdh\x18Nh\x19h\x1aU\n\a\xdd\b\b\x139\x1e\x00\x00\x00\x85RqWh\x1cX\x1f\x00\x00\x00files/2013/06/17/brand/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x051\x00\x00\x00\x85RqXh M\xfe\x01ubh\x02h\x03h\x04\x86]qY(h\x06h\ah\bh\th\neh\x0b\x87RqZ}q[(h\x0eX\b\x00\x00\x00ALPPILUXh\x0f\x88h\x10h\x11)\x81q\\}q](h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00alppiluxh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x02\n\x00\x00\x00\x85Rq^h\x1cX \x00\x00\x00files/2013/02/05/brand/logo0.jpgh\x1dK\th\x1eh\x1aU\n\a\xd9\x05\r\x14\x02,\x00\x00\x00\x85Rq_h Mb\x01ubh\x02h\x03h\x04\x86]q`(h\x06h\ah\bh\th\neh\x0b\x87Rqa}qb(h\x0eX\x0c\x00\x00\x00ANAM-Legrandh\x0f\x88h\x10h\x11)\x81qc}qd(h\x14\x89h\x15h\x16ubh\x17X\x0c\x00\x00\x00anam-legrandh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x03\t\x00\x00\x00\x85Rqeh\x1cX\x1c\x00\x00\x00brands/anam-legrand/logo.JPGh\x1dM\xf3\x01h\x1eh\x1aU\n\a\xd9\x06\x1d\x0e\x19.\x00\x00\x00\x85Rqfh Mv\x01ubh\x02h\x03h\x04\x86]qg(h\x06h\ah\bh\th\neh\x0b\x87Rqh}qi(h\x0eX\x06\x00\x00\x00APATORh\x0f\x88h\x10h\x11)\x81qj}qk(h\x14\x89h\x15h\x16ubh\x17X\x06\x00\x00\x00apatorh\x18Nh\x19h\x1aU\n\a\xdd\b\x13\x13\t7\x00\x00\x00\x85Rqlh\x1cX\"\x00\x00\x00files/2013/02/06/brand/Logotip.jpgh\x1dK\x12h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rqmh K%ubh\x02h\x03h\x04\x86]qn(h\x06h\ah\bh\th\neh\x0b\x87Rqo}qp(h\x0eX\x03\x00\x00\x00APCh\x0f\x88h\x10h\x11)\x81qq}qr(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00apch\x18Nh\x19h\x1aU\n\a\xdd\x02\x06\x12\x02\x12\x00\x00\x00\x85Rqsh\x1cX\x13\x00\x00\x00brands/apc/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x05\x1a\x13\r\n\x00\x00\x00\x85Rqth Mg\x01ubh\x02h\x03h\x04\x86]qu(h\x06h\ah\bh\th\neh\x0b\x87Rqv}qw(h\x0eX\x05\x00\x00\x00APE\xd0\x9ch\x0f\x88h\x10h\x11)\x81qx}qy(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00apemh\x18Nh\x19h\x1aU\n\a\xdd\x04\b\r 2\x00\x00\x00\x85Rqzh\x1cX$\x00\x00\x00files/2013/03/29/brand/logo-apem.gifh\x1dM\xd4\x01h\x1eh\x1aU\n\a\xdd\x03\x1d\x10\x031\x00\x00\x00\x85Rq{h M\xe3\x01ubh\x02h\x03h\x04\x86]q|(h\x06h\ah\bh\th\neh\x0b\x87Rq}}q~(h\x0eX\x04\x00\x00\x00APPAh\x0f\x88h\x10h\x11)\x81q\x7f}q\x80(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00appah\x18Nh\x19h\x1aU\n\a\xdd\b\b\x14;\x0b\x00\x00\x00\x85Rq\x81h\x1cX\x1f\x00\x00\x00files/2013/02/06/brand/appa.gifh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xda\x05\x1c\x12-1\x00\x00\x00\x85Rq\x82h M\xa6\x01ubh\x02h\x03h\x04\x86]q\x83(h\x06h\ah\bh\th\neh\x0b\x87Rq\x84}q\x85(h\x0eX\a\x00\x00\x00AUSONIAh\x0f\x88h\x10h\x11)\x81q\x86}q\x87(h\x14\x89h\x15h\x16ubh\x17X\a\x00\x00\x00ausoniah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\b\x1b\x00\x00\x00\x85Rq\x88h\x1cX\x17\x00\x00\x00brands/ausonia/logo.gifh\x1dM\xd5\x01h\x1eh\x1aU\n\a\xd8\n\x1c\x10\a'\x00\x00\x00\x85Rq\x89h M\x1b\x01ubh\x02h\x03h\x04\x86]q\x8a(h\x06h\ah\bh\th\neh\x0b\x87Rq\x8b}q\x8c(h\x0eX\n\x00\x00\x00AUSPICIOUSh\x0f\x88h\x10h\x11)\x81q\x8d}q\x8e(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00auspicioush\x18Nh\x19h\x1aU\n\a\xdd\n\x1e\x0e+\x1b\x00\x00\x00\x85Rq\x8fh\x1cX\x1a\x00\x00\x00brands/auspicious/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq\x90h K\xedubh\x02h\x03h\x04\x86]q\x91(h\x06h\ah\bh\th\neh\x0b\x87Rq\x92}q\x93(h\x0eX\t\x00\x00\x00Advantechh\x0f\x88h\x10h\x11)\x81q\x94}q\x95(h\x14\x89h\x15h\x16ubh\x17X\t\x00\x00\x00advantechh\x18Nh\x19h\x1aU\n\a\xdd\t\n\x13\x1e\"\x00\x00\x00\x85Rq\x96h\x1cX\x19\x00\x00\x00brands/advantech/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x01\x1b\x0c *\x00\x00\x00\x85Rq\x97h MB\x01ubh\x02h\x03h\x04\x86]q\x98(h\x06h\ah\bh\th\neh\x0b\x87Rq\x99}q\x9a(h\x0eX\b\x00\x00\x00Aeroflexh\x0f\x88h\x10h\x11)\x81q\x9b}q\x9c(h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00aeroflexh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x0b\x00\x00\x00\x85Rq\x9dh\x1cX#\x00\x00\x00files/2013/06/17/brand/Aeroflex.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x116\x00\x00\x00\x85Rq\x9eh M\xff\x01ubh\x02h\x03h\x04\x86]q\x9f(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa0}q\xa1(h\x0eX\x14\x00\x00\x00Agilent Technologiesh\x0f\x88h\x10h\x11)\x81q\xa2}q\xa3(h\x14\x89h\x15h\x16ubh\x17X\x14\x00\x00\x00agilent-technologiesh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x05\x00\x00\x00\x85Rq\xa4h\x1cX \x00\x00\x00files/2013/06/17/brand/logo0.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14&\x16\x00\x00\x00\x85Rq\xa5h M\x00\x02ubh\x02h\x03h\x04\x86]q\xa6(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa7}q\xa8(h\x0eX\x06\x00\x00\x00Alberth\x0f\x88h\x10h\x11)\x81q\xa9}q\xaa(h\x14\x89h\x15h\x16ubh\x17X\x11\x00\x00\x00albert-gmbh-co-kgh\x18Nh\x19h\x1aU\n\a\xdd\x02\x06\x15\x11:\x00\x00\x00\x85Rq\xabh\x1cX!\x00\x00\x00brands/albert-gmbh-co-kg/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd9\x05\r\x12\x06\x1d\x00\x00\x00\x85Rq\xach Ma\x01ube."
1393245148.319300 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319323 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:is_active=True" "910"
1393245148.319338 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319363 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&is_active=True" "910"
1393245148.319381 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319405 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&is_active=True" "910"
1393245148.319422 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319449 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319469 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319493 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&is_active=True" "910"
1393245148.319510 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319536 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319555 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319581 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319601 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319630 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319653 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319676 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&is_active=True" "910"
1393245148.319693 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319719 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319739 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319765 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319785 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319814 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319836 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319862 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319881 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319910 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319932 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.319960 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&is_active=True" "910"
1393245148.319982 [2 127.0.0.1:58483] "SADD" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&geo_id=None&is_active=True" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393245148.320014 [2 127.0.0.1:58483] "EXPIRE" "conj:catalog.brand:geo_id=None&geo_id=None&geo_id=None&geo_id=None&is_active=True" "910"
1393245148.320065 [2 127.0.0.1:58483] "EXEC"

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 24, 2014

Вариант 1: Brand.objects.filter(is_active=True).exclude(geo__in=[19, 25, 4, 13])

redis 127.0.0.1:6379[2]> smembers "schemes:catalog.brand"
1) "geo_id,geo_id,geo_id,is_active"
2) "geo_id,geo_id,is_active"
3) "geo_id,geo_id,geo_id,geo_id,is_active"
4) "geo_id,is_active"
5) "is_active"

Вариант 2 Brand.objects.exclude(geo__in=[19, 25, 4, 13])

redis 127.0.0.1:6379[2]> smembers "schemes:catalog.brand"
(empty list or set)

@Suor
Copy link
Owner

Suor commented Feb 24, 2014

Это явно очень старая версия cacheops, в последнем мастере не используются транзакции.

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 24, 2014

Хм, я обновил до последнего мастера.

>>> cacheops.VERSION
(1, 3, 0)

Сейчас его полностью удалю и заново поставлю.

@Suor
Copy link
Owner

Suor commented Feb 24, 2014

Под очень старой я имею в виду "по сравнению с мастером".

И вообще происходит что-то странное, т.к. ошибка со скриптами (NOSCRIPT) может происходить только если используется новая версия, а MULTI может использоваться только если используется старая. Возможно, у вас там несколько версий cacheops завалялось.

@Suor
Copy link
Owner

Suor commented Feb 24, 2014

cacheops.VERSION показывает предыдущую версию. Я обновляю её только при релизе.

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 24, 2014

redis-cli:

redis 127.0.0.1:6379[2]> keys *
1) "conj:catalog.brand:is_active=true"
2) "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true"
3) "conj:catalog.brand:geo_id=userdata: 0x0&is_active=true"
4) "schemes:catalog.brand"
5) "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true"
6) "q:8f23cc431f27fd3c2d2fe9d519a40351"
7) "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true"
redis 127.0.0.1:6379[2]> smembers "schemes:catalog.brand"
1) "geo_id,geo_id,geo_id,is_active"
2) "geo_id,is_active"
3) "geo_id,geo_id,is_active"
4) "geo_id,geo_id,geo_id,geo_id,is_active"
5) "is_active"

monitor log:

$ redis-cli -n 2 monitor
OK
1393246276.588530 [0 127.0.0.1:58621] "SELECT" "2"
1393246276.588642 [2 127.0.0.1:58621] "GET" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.603684 [2 127.0.0.1:58621] "SCRIPT" "LOAD" "local key = KEYS[1]\nlocal data = ARGV[1]\nlocal model = ARGV[2]\nlocal dnf = cjson.decode(ARGV[3])\nlocal timeout = ARGV[4]\nlocal inv_timeout = ARGV[5]\n\n-- Update schemes\nlocal schemes = {}\nfor _, conj in ipairs(dnf) do\n    local s = {}\n    for _, eq in ipairs(conj) do\n        table.insert(s, eq[1])\n    end\n    table.insert(schemes, table.concat(s, ','))\nend\nredis.call('sadd', 'schemes:' .. model, unpack(schemes))\n\n-- Write data to cache\nredis.call('setex', key, timeout, data)\n\nlocal conj_cache_key = function (model, conj)\n    local parts = {}\n    for _, eq in ipairs(conj) do\n        table.insert(parts, eq[1] .. '=' .. tostring(eq[2]))\n    end\n\n    return 'conj:' .. model .. ':' .. table.concat(parts, '&')\nend\n\n-- Add new cache_key to list of dependencies for every conjunction in dnf\nfor _, conj in ipairs(dnf) do\n    local conj_key = conj_cache_key(model, conj)\n    redis.call('sadd', conj_key, key)\n    redis.call('expire', conj_key, inv_timeout)\nend\n"
1393246276.604326 [2 127.0.0.1:58621] "EVALSHA" "988c4725c0487b06835d92253314c64fbc0d0607" "1" "q:8f23cc431f27fd3c2d2fe9d519a40351" "\x80\x02]q\x01(cdjango.db.models.base\nmodel_unpickle\nq\x02X\a\x00\x00\x00catalogq\x03U\x05Brandq\x04\x86]q\x05(U\x05tizerq\x06U\x04textq\aU\bkeywordsq\bU\x03urlq\tU\aurl_rusq\necdjango.db.models.query_utils\ndeferred_class_factory\nq\x0b\x87Rq\x0c}q\r(U\x05titleq\x0eX\x02\x00\x00\x003MU\tis_activeq\x0f\x88U\x06_stateq\x10cdjango.db.models.base\nModelState\nq\x11)\x81q\x12}q\x13(U\x06addingq\x14\x89U\x02dbq\x15U\adefaultq\x16ubU\x04slugq\x17X\x02\x00\x00\x003mU\toffice_idq\x18NU\x0clastmodifiedq\x19cdatetime\ndatetime\nq\x1aU\n\a\xde\x02\x13\x121'\x0e\xd2\xfc\x85Rq\x1bU\x04logoq\x1cX\"\x00\x00\x00files/2010/07/21/brand/3m-logo.gifU\x06geo_idq\x1dM\xdc\x01U\bpub_dateq\x1eh\x1aU\n\a\xda\a\x15\x15\x12\x18\x00\x00\x00\x85Rq\x1fU\x02idq M\xaf\x01ubh\x02h\x03h\x04\x86]q!(h\x06h\ah\bh\th\neh\x0b\x87Rq\"}q#(h\x0eX\x03\x00\x00\x00ABBh\x0f\x88h\x10h\x11)\x81q$}q%(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00abbh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x10\x150/\x00\x00\x00\x85Rq&h\x1cX\x13\x00\x00\x00brands/abb/logo.gifh\x1dM\xd7\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq'h K#ubh\x02h\x03h\x04\x86]q((h\x06h\ah\bh\th\neh\x0b\x87Rq)}q*(h\x0eX\n\x00\x00\x00ABL SURSUMh\x0f\x88h\x10h\x11)\x81q+}q,(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00abl-sursumh\x18Nh\x19h\x1aU\n\a\xdd\b\x1b\x15\x037\x00\x00\x00\x85Rq-h\x1cX\x1f\x00\x00\x00files/2013/08/27/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq.h K\x90ubh\x02h\x03h\x04\x86]q/(h\x06h\ah\bh\th\neh\x0b\x87Rq0}q1(h\x0eX\x0e\x00\x00\x00ABTECH Limitedh\x0f\x88h\x10h\x11)\x81q2}q3(h\x14\x89h\x15h\x16ubh\x17X\x0e\x00\x00\x00abtech-limitedh\x18Nh\x19h\x1aU\n\a\xdd\x05\x0f\x13\x166\x00\x00\x00\x85Rq4h\x1cX&\x00\x00\x00files/2012/03/05/brand/Abtech-logo.jpgh\x1dM\xd3\x01h\x1eh\x1aU\n\a\xdc\x03\x05\x11\"\x00\x00\x00\x00\x85Rq5h M\xd9\x01ubh\x02h\x03h\x04\x86]q6(h\x06h\ah\bh\th\neh\x0b\x87Rq7}q8(h\x0eX\x13\x00\x00\x00AEG Power Solutionsh\x0f\x88h\x10h\x11)\x81q9}q:(h\x14\x89h\x15h\x16ubh\x17X\x13\x00\x00\x00aeg-power-solutionsh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x05\x0f\x00\x00\x00\x00\x00\x85Rq;h\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.jpgh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x19\r.\x1c\x00\x00\x00\x85Rq<h Mo\x01ubh\x02h\x03h\x04\x86]q=(h\x06h\ah\bh\th\neh\x0b\x87Rq>}q?(h\x0eX\x05\x00\x00\x00AEMSAh\x0f\x88h\x10h\x11)\x81q@}qA(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00aemsah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\r:;\x00\x00\x00\x85RqBh\x1cX\x15\x00\x00\x00brands/aemsa/logo.gifh\x1dM\xda\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85RqCh K\xd1ubh\x02h\x03h\x04\x86]qD(h\x06h\ah\bh\th\neh\x0b\x87RqE}qF(h\x0eX\x04\x00\x00\x00AKSAh\x0f\x88h\x10h\x11)\x81qG}qH(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00aksah\x18Nh\x19h\x1aU\n\a\xdd\x06\r\x1507\x00\x00\x00\x85RqIh\x1cX\x1f\x00\x00\x00files/2011/06/21/brand/logo.jpgh\x1dK\x18h\x1eh\x1aU\n\a\xd8\a\a\r\x05*\x00\x00\x00\x85RqJh M\x03\x01ubh\x02h\x03h\x04\x86]qK(h\x06h\ah\bh\th\neh\x0b\x87RqL}qM(h\x0eX\x05\x00\x00\x00ALFRAh\x0f\x88h\x10h\x11)\x81qN}qO(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00alfrah\x18Nh\x19h\x1aU\n\a\xdd\t\n\x14\x1d\r\x00\x00\x00\x85RqPh\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x04\x123\x0b\x00\x00\x00\x85RqQh Mh\x01ubh\x02h\x03h\x04\x86]qR(h\x06h\ah\bh\th\neh\x0b\x87RqS}qT(h\x0eX\x15\x00\x00\x00ALL-BRIGHT TECHNOLOGYh\x0f\x88h\x10h\x11)\x81qU}qV(h\x14\x89h\x15h\x16ubh\x17X\x1c\x00\x00\x00all-bright-technology-co-ltdh\x18Nh\x19h\x1aU\n\a\xdd\b\b\x139\x1e\x00\x00\x00\x85RqWh\x1cX\x1f\x00\x00\x00files/2013/06/17/brand/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x051\x00\x00\x00\x85RqXh M\xfe\x01ubh\x02h\x03h\x04\x86]qY(h\x06h\ah\bh\th\neh\x0b\x87RqZ}q[(h\x0eX\b\x00\x00\x00ALPPILUXh\x0f\x88h\x10h\x11)\x81q\\}q](h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00alppiluxh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x02\n\x00\x00\x00\x85Rq^h\x1cX \x00\x00\x00files/2013/02/05/brand/logo0.jpgh\x1dK\th\x1eh\x1aU\n\a\xd9\x05\r\x14\x02,\x00\x00\x00\x85Rq_h Mb\x01ubh\x02h\x03h\x04\x86]q`(h\x06h\ah\bh\th\neh\x0b\x87Rqa}qb(h\x0eX\x0c\x00\x00\x00ANAM-Legrandh\x0f\x88h\x10h\x11)\x81qc}qd(h\x14\x89h\x15h\x16ubh\x17X\x0c\x00\x00\x00anam-legrandh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x03\t\x00\x00\x00\x85Rqeh\x1cX\x1c\x00\x00\x00brands/anam-legrand/logo.JPGh\x1dM\xf3\x01h\x1eh\x1aU\n\a\xd9\x06\x1d\x0e\x19.\x00\x00\x00\x85Rqfh Mv\x01ubh\x02h\x03h\x04\x86]qg(h\x06h\ah\bh\th\neh\x0b\x87Rqh}qi(h\x0eX\x06\x00\x00\x00APATORh\x0f\x88h\x10h\x11)\x81qj}qk(h\x14\x89h\x15h\x16ubh\x17X\x06\x00\x00\x00apatorh\x18Nh\x19h\x1aU\n\a\xdd\b\x13\x13\t7\x00\x00\x00\x85Rqlh\x1cX\"\x00\x00\x00files/2013/02/06/brand/Logotip.jpgh\x1dK\x12h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rqmh K%ubh\x02h\x03h\x04\x86]qn(h\x06h\ah\bh\th\neh\x0b\x87Rqo}qp(h\x0eX\x03\x00\x00\x00APCh\x0f\x88h\x10h\x11)\x81qq}qr(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00apch\x18Nh\x19h\x1aU\n\a\xdd\x02\x06\x12\x02\x12\x00\x00\x00\x85Rqsh\x1cX\x13\x00\x00\x00brands/apc/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x05\x1a\x13\r\n\x00\x00\x00\x85Rqth Mg\x01ubh\x02h\x03h\x04\x86]qu(h\x06h\ah\bh\th\neh\x0b\x87Rqv}qw(h\x0eX\x05\x00\x00\x00APE\xd0\x9ch\x0f\x88h\x10h\x11)\x81qx}qy(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00apemh\x18Nh\x19h\x1aU\n\a\xdd\x04\b\r 2\x00\x00\x00\x85Rqzh\x1cX$\x00\x00\x00files/2013/03/29/brand/logo-apem.gifh\x1dM\xd4\x01h\x1eh\x1aU\n\a\xdd\x03\x1d\x10\x031\x00\x00\x00\x85Rq{h M\xe3\x01ubh\x02h\x03h\x04\x86]q|(h\x06h\ah\bh\th\neh\x0b\x87Rq}}q~(h\x0eX\x04\x00\x00\x00APPAh\x0f\x88h\x10h\x11)\x81q\x7f}q\x80(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00appah\x18Nh\x19h\x1aU\n\a\xdd\b\b\x14;\x0b\x00\x00\x00\x85Rq\x81h\x1cX\x1f\x00\x00\x00files/2013/02/06/brand/appa.gifh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xda\x05\x1c\x12-1\x00\x00\x00\x85Rq\x82h M\xa6\x01ubh\x02h\x03h\x04\x86]q\x83(h\x06h\ah\bh\th\neh\x0b\x87Rq\x84}q\x85(h\x0eX\a\x00\x00\x00AUSONIAh\x0f\x88h\x10h\x11)\x81q\x86}q\x87(h\x14\x89h\x15h\x16ubh\x17X\a\x00\x00\x00ausoniah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\b\x1b\x00\x00\x00\x85Rq\x88h\x1cX\x17\x00\x00\x00brands/ausonia/logo.gifh\x1dM\xd5\x01h\x1eh\x1aU\n\a\xd8\n\x1c\x10\a'\x00\x00\x00\x85Rq\x89h M\x1b\x01ubh\x02h\x03h\x04\x86]q\x8a(h\x06h\ah\bh\th\neh\x0b\x87Rq\x8b}q\x8c(h\x0eX\n\x00\x00\x00AUSPICIOUSh\x0f\x88h\x10h\x11)\x81q\x8d}q\x8e(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00auspicioush\x18Nh\x19h\x1aU\n\a\xdd\n\x1e\x0e+\x1b\x00\x00\x00\x85Rq\x8fh\x1cX\x1a\x00\x00\x00brands/auspicious/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq\x90h K\xedubh\x02h\x03h\x04\x86]q\x91(h\x06h\ah\bh\th\neh\x0b\x87Rq\x92}q\x93(h\x0eX\t\x00\x00\x00Advantechh\x0f\x88h\x10h\x11)\x81q\x94}q\x95(h\x14\x89h\x15h\x16ubh\x17X\t\x00\x00\x00advantechh\x18Nh\x19h\x1aU\n\a\xdd\t\n\x13\x1e\"\x00\x00\x00\x85Rq\x96h\x1cX\x19\x00\x00\x00brands/advantech/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x01\x1b\x0c *\x00\x00\x00\x85Rq\x97h MB\x01ubh\x02h\x03h\x04\x86]q\x98(h\x06h\ah\bh\th\neh\x0b\x87Rq\x99}q\x9a(h\x0eX\b\x00\x00\x00Aeroflexh\x0f\x88h\x10h\x11)\x81q\x9b}q\x9c(h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00aeroflexh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x0b\x00\x00\x00\x85Rq\x9dh\x1cX#\x00\x00\x00files/2013/06/17/brand/Aeroflex.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x116\x00\x00\x00\x85Rq\x9eh M\xff\x01ubh\x02h\x03h\x04\x86]q\x9f(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa0}q\xa1(h\x0eX\x14\x00\x00\x00Agilent Technologiesh\x0f\x88h\x10h\x11)\x81q\xa2}q\xa3(h\x14\x89h\x15h\x16ubh\x17X\x14\x00\x00\x00agilent-technologiesh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x05\x00\x00\x00\x85Rq\xa4h\x1cX \x00\x00\x00files/2013/06/17/brand/logo0.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14&\x16\x00\x00\x00\x85Rq\xa5h M\x00\x02ubh\x02h\x03h\x04\x86]q\xa6(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa7}q\xa8(h\x0eX\x06\x00\x00\x00Alberth\x0f\x88h\x10h\x11)\x81q\xa9}q\xaa(h\x14\x89h\x15h\x16ubh\x17X\x11\x00\x00\x00albert-gmbh-co-kgh\x18Nh\x19h\x1aU\n\a\xdd\x02\x06\x15\x11:\x00\x00\x00\x85Rq\xabh\x1cX!\x00\x00\x00brands/albert-gmbh-co-kg/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd9\x05\r\x12\x06\x1d\x00\x00\x00\x85Rq\xach Ma\x01ube." "catalog.brand" "[[[\"is_active\", true]], [[\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]], [[\"geo_id\", null], [\"geo_id\", null], [\"geo_id\", null], [\"geo_id\", null], [\"is_active\", true]]]" "900" "910"
1393246276.605760 [2 lua] "sadd" "schemes:catalog.brand" "is_active" "geo_id,is_active" "geo_id,is_active" "geo_id,geo_id,is_active" "geo_id,is_active" "geo_id,geo_id,is_active" "geo_id,geo_id,is_active" "geo_id,geo_id,geo_id,is_active" "geo_id,is_active" "geo_id,geo_id,is_active" "geo_id,geo_id,is_active" "geo_id,geo_id,geo_id,is_active" "geo_id,geo_id,is_active" "geo_id,geo_id,geo_id,is_active" "geo_id,geo_id,geo_id,is_active" "geo_id,geo_id,geo_id,geo_id,is_active"
1393246276.605885 [2 lua] "setex" "q:8f23cc431f27fd3c2d2fe9d519a40351" "900" "\x80\x02]q\x01(cdjango.db.models.base\nmodel_unpickle\nq\x02X\a\x00\x00\x00catalogq\x03U\x05Brandq\x04\x86]q\x05(U\x05tizerq\x06U\x04textq\aU\bkeywordsq\bU\x03urlq\tU\aurl_rusq\necdjango.db.models.query_utils\ndeferred_class_factory\nq\x0b\x87Rq\x0c}q\r(U\x05titleq\x0eX\x02\x00\x00\x003MU\tis_activeq\x0f\x88U\x06_stateq\x10cdjango.db.models.base\nModelState\nq\x11)\x81q\x12}q\x13(U\x06addingq\x14\x89U\x02dbq\x15U\adefaultq\x16ubU\x04slugq\x17X\x02\x00\x00\x003mU\toffice_idq\x18NU\x0clastmodifiedq\x19cdatetime\ndatetime\nq\x1aU\n\a\xde\x02\x13\x121'\x0e\xd2\xfc\x85Rq\x1bU\x04logoq\x1cX\"\x00\x00\x00files/2010/07/21/brand/3m-logo.gifU\x06geo_idq\x1dM\xdc\x01U\bpub_dateq\x1eh\x1aU\n\a\xda\a\x15\x15\x12\x18\x00\x00\x00\x85Rq\x1fU\x02idq M\xaf\x01ubh\x02h\x03h\x04\x86]q!(h\x06h\ah\bh\th\neh\x0b\x87Rq\"}q#(h\x0eX\x03\x00\x00\x00ABBh\x0f\x88h\x10h\x11)\x81q$}q%(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00abbh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x10\x150/\x00\x00\x00\x85Rq&h\x1cX\x13\x00\x00\x00brands/abb/logo.gifh\x1dM\xd7\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq'h K#ubh\x02h\x03h\x04\x86]q((h\x06h\ah\bh\th\neh\x0b\x87Rq)}q*(h\x0eX\n\x00\x00\x00ABL SURSUMh\x0f\x88h\x10h\x11)\x81q+}q,(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00abl-sursumh\x18Nh\x19h\x1aU\n\a\xdd\b\x1b\x15\x037\x00\x00\x00\x85Rq-h\x1cX\x1f\x00\x00\x00files/2013/08/27/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq.h K\x90ubh\x02h\x03h\x04\x86]q/(h\x06h\ah\bh\th\neh\x0b\x87Rq0}q1(h\x0eX\x0e\x00\x00\x00ABTECH Limitedh\x0f\x88h\x10h\x11)\x81q2}q3(h\x14\x89h\x15h\x16ubh\x17X\x0e\x00\x00\x00abtech-limitedh\x18Nh\x19h\x1aU\n\a\xdd\x05\x0f\x13\x166\x00\x00\x00\x85Rq4h\x1cX&\x00\x00\x00files/2012/03/05/brand/Abtech-logo.jpgh\x1dM\xd3\x01h\x1eh\x1aU\n\a\xdc\x03\x05\x11\"\x00\x00\x00\x00\x85Rq5h M\xd9\x01ubh\x02h\x03h\x04\x86]q6(h\x06h\ah\bh\th\neh\x0b\x87Rq7}q8(h\x0eX\x13\x00\x00\x00AEG Power Solutionsh\x0f\x88h\x10h\x11)\x81q9}q:(h\x14\x89h\x15h\x16ubh\x17X\x13\x00\x00\x00aeg-power-solutionsh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x05\x0f\x00\x00\x00\x00\x00\x85Rq;h\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.jpgh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x19\r.\x1c\x00\x00\x00\x85Rq<h Mo\x01ubh\x02h\x03h\x04\x86]q=(h\x06h\ah\bh\th\neh\x0b\x87Rq>}q?(h\x0eX\x05\x00\x00\x00AEMSAh\x0f\x88h\x10h\x11)\x81q@}qA(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00aemsah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\r:;\x00\x00\x00\x85RqBh\x1cX\x15\x00\x00\x00brands/aemsa/logo.gifh\x1dM\xda\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85RqCh K\xd1ubh\x02h\x03h\x04\x86]qD(h\x06h\ah\bh\th\neh\x0b\x87RqE}qF(h\x0eX\x04\x00\x00\x00AKSAh\x0f\x88h\x10h\x11)\x81qG}qH(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00aksah\x18Nh\x19h\x1aU\n\a\xdd\x06\r\x1507\x00\x00\x00\x85RqIh\x1cX\x1f\x00\x00\x00files/2011/06/21/brand/logo.jpgh\x1dK\x18h\x1eh\x1aU\n\a\xd8\a\a\r\x05*\x00\x00\x00\x85RqJh M\x03\x01ubh\x02h\x03h\x04\x86]qK(h\x06h\ah\bh\th\neh\x0b\x87RqL}qM(h\x0eX\x05\x00\x00\x00ALFRAh\x0f\x88h\x10h\x11)\x81qN}qO(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00alfrah\x18Nh\x19h\x1aU\n\a\xdd\t\n\x14\x1d\r\x00\x00\x00\x85RqPh\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x04\x123\x0b\x00\x00\x00\x85RqQh Mh\x01ubh\x02h\x03h\x04\x86]qR(h\x06h\ah\bh\th\neh\x0b\x87RqS}qT(h\x0eX\x15\x00\x00\x00ALL-BRIGHT TECHNOLOGYh\x0f\x88h\x10h\x11)\x81qU}qV(h\x14\x89h\x15h\x16ubh\x17X\x1c\x00\x00\x00all-bright-technology-co-ltdh\x18Nh\x19h\x1aU\n\a\xdd\b\b\x139\x1e\x00\x00\x00\x85RqWh\x1cX\x1f\x00\x00\x00files/2013/06/17/brand/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x051\x00\x00\x00\x85RqXh M\xfe\x01ubh\x02h\x03h\x04\x86]qY(h\x06h\ah\bh\th\neh\x0b\x87RqZ}q[(h\x0eX\b\x00\x00\x00ALPPILUXh\x0f\x88h\x10h\x11)\x81q\\}q](h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00alppiluxh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x02\n\x00\x00\x00\x85Rq^h\x1cX \x00\x00\x00files/2013/02/05/brand/logo0.jpgh\x1dK\th\x1eh\x1aU\n\a\xd9\x05\r\x14\x02,\x00\x00\x00\x85Rq_h Mb\x01ubh\x02h\x03h\x04\x86]q`(h\x06h\ah\bh\th\neh\x0b\x87Rqa}qb(h\x0eX\x0c\x00\x00\x00ANAM-Legrandh\x0f\x88h\x10h\x11)\x81qc}qd(h\x14\x89h\x15h\x16ubh\x17X\x0c\x00\x00\x00anam-legrandh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x03\t\x00\x00\x00\x85Rqeh\x1cX\x1c\x00\x00\x00brands/anam-legrand/logo.JPGh\x1dM\xf3\x01h\x1eh\x1aU\n\a\xd9\x06\x1d\x0e\x19.\x00\x00\x00\x85Rqfh Mv\x01ubh\x02h\x03h\x04\x86]qg(h\x06h\ah\bh\th\neh\x0b\x87Rqh}qi(h\x0eX\x06\x00\x00\x00APATORh\x0f\x88h\x10h\x11)\x81qj}qk(h\x14\x89h\x15h\x16ubh\x17X\x06\x00\x00\x00apatorh\x18Nh\x19h\x1aU\n\a\xdd\b\x13\x13\t7\x00\x00\x00\x85Rqlh\x1cX\"\x00\x00\x00files/2013/02/06/brand/Logotip.jpgh\x1dK\x12h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rqmh K%ubh\x02h\x03h\x04\x86]qn(h\x06h\ah\bh\th\neh\x0b\x87Rqo}qp(h\x0eX\x03\x00\x00\x00APCh\x0f\x88h\x10h\x11)\x81qq}qr(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00apch\x18Nh\x19h\x1aU\n\a\xdd\x02\x06\x12\x02\x12\x00\x00\x00\x85Rqsh\x1cX\x13\x00\x00\x00brands/apc/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x05\x1a\x13\r\n\x00\x00\x00\x85Rqth Mg\x01ubh\x02h\x03h\x04\x86]qu(h\x06h\ah\bh\th\neh\x0b\x87Rqv}qw(h\x0eX\x05\x00\x00\x00APE\xd0\x9ch\x0f\x88h\x10h\x11)\x81qx}qy(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00apemh\x18Nh\x19h\x1aU\n\a\xdd\x04\b\r 2\x00\x00\x00\x85Rqzh\x1cX$\x00\x00\x00files/2013/03/29/brand/logo-apem.gifh\x1dM\xd4\x01h\x1eh\x1aU\n\a\xdd\x03\x1d\x10\x031\x00\x00\x00\x85Rq{h M\xe3\x01ubh\x02h\x03h\x04\x86]q|(h\x06h\ah\bh\th\neh\x0b\x87Rq}}q~(h\x0eX\x04\x00\x00\x00APPAh\x0f\x88h\x10h\x11)\x81q\x7f}q\x80(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00appah\x18Nh\x19h\x1aU\n\a\xdd\b\b\x14;\x0b\x00\x00\x00\x85Rq\x81h\x1cX\x1f\x00\x00\x00files/2013/02/06/brand/appa.gifh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xda\x05\x1c\x12-1\x00\x00\x00\x85Rq\x82h M\xa6\x01ubh\x02h\x03h\x04\x86]q\x83(h\x06h\ah\bh\th\neh\x0b\x87Rq\x84}q\x85(h\x0eX\a\x00\x00\x00AUSONIAh\x0f\x88h\x10h\x11)\x81q\x86}q\x87(h\x14\x89h\x15h\x16ubh\x17X\a\x00\x00\x00ausoniah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\b\x1b\x00\x00\x00\x85Rq\x88h\x1cX\x17\x00\x00\x00brands/ausonia/logo.gifh\x1dM\xd5\x01h\x1eh\x1aU\n\a\xd8\n\x1c\x10\a'\x00\x00\x00\x85Rq\x89h M\x1b\x01ubh\x02h\x03h\x04\x86]q\x8a(h\x06h\ah\bh\th\neh\x0b\x87Rq\x8b}q\x8c(h\x0eX\n\x00\x00\x00AUSPICIOUSh\x0f\x88h\x10h\x11)\x81q\x8d}q\x8e(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00auspicioush\x18Nh\x19h\x1aU\n\a\xdd\n\x1e\x0e+\x1b\x00\x00\x00\x85Rq\x8fh\x1cX\x1a\x00\x00\x00brands/auspicious/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq\x90h K\xedubh\x02h\x03h\x04\x86]q\x91(h\x06h\ah\bh\th\neh\x0b\x87Rq\x92}q\x93(h\x0eX\t\x00\x00\x00Advantechh\x0f\x88h\x10h\x11)\x81q\x94}q\x95(h\x14\x89h\x15h\x16ubh\x17X\t\x00\x00\x00advantechh\x18Nh\x19h\x1aU\n\a\xdd\t\n\x13\x1e\"\x00\x00\x00\x85Rq\x96h\x1cX\x19\x00\x00\x00brands/advantech/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x01\x1b\x0c *\x00\x00\x00\x85Rq\x97h MB\x01ubh\x02h\x03h\x04\x86]q\x98(h\x06h\ah\bh\th\neh\x0b\x87Rq\x99}q\x9a(h\x0eX\b\x00\x00\x00Aeroflexh\x0f\x88h\x10h\x11)\x81q\x9b}q\x9c(h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00aeroflexh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x0b\x00\x00\x00\x85Rq\x9dh\x1cX#\x00\x00\x00files/2013/06/17/brand/Aeroflex.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x116\x00\x00\x00\x85Rq\x9eh M\xff\x01ubh\x02h\x03h\x04\x86]q\x9f(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa0}q\xa1(h\x0eX\x14\x00\x00\x00Agilent Technologiesh\x0f\x88h\x10h\x11)\x81q\xa2}q\xa3(h\x14\x89h\x15h\x16ubh\x17X\x14\x00\x00\x00agilent-technologiesh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x05\x00\x00\x00\x85Rq\xa4h\x1cX \x00\x00\x00files/2013/06/17/brand/logo0.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14&\x16\x00\x00\x00\x85Rq\xa5h M\x00\x02ubh\x02h\x03h\x04\x86]q\xa6(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa7}q\xa8(h\x0eX\x06\x00\x00\x00Alberth\x0f\x88h\x10h\x11)\x81q\xa9}q\xaa(h\x14\x89h\x15h\x16ubh\x17X\x11\x00\x00\x00albert-gmbh-co-kgh\x18Nh\x19h\x1aU\n\a\xdd\x02\x06\x15\x11:\x00\x00\x00\x85Rq\xabh\x1cX!\x00\x00\x00brands/albert-gmbh-co-kg/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd9\x05\r\x12\x06\x1d\x00\x00\x00\x85Rq\xach Ma\x01ube."
1393246276.606827 [2 lua] "sadd" "conj:catalog.brand:is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.606849 [2 lua] "expire" "conj:catalog.brand:is_active=true" "910"
1393246276.606870 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.606896 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&is_active=true" "910"
1393246276.606919 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.606945 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&is_active=true" "910"
1393246276.606970 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607000 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607028 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607053 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607078 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607108 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607136 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607166 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607196 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607231 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607264 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607289 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607313 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607346 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607375 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607405 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607434 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607469 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607502 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607532 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607561 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607596 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607635 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607667 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"
1393246276.607698 [2 lua] "sadd" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "q:8f23cc431f27fd3c2d2fe9d519a40351"
1393246276.607734 [2 lua] "expire" "conj:catalog.brand:geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&geo_id=userdata: 0x0&is_active=true" "910"

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 24, 2014

Вот еще интересное:

>>> from elec.contrib.catalog.models import Brand
>>> defer_fields = ['text', 'tizer', 'url', 'url_rus', 'keywords']
>>> Brand.objects.exclude(geo__in=[19, 25, 4, 13]).defer(*defer_fields).order_by('title')

redis-cli:

redis 127.0.0.1:6379[2]> keys *
1) "q:2cffc57652a84a521efb20a64730470f"
2) "conj:catalog.brand:"
3) "schemes:catalog.brand"
redis 127.0.0.1:6379[2]> smembers "schemes:catalog.brand"
1) ""

monitor log:

1393246487.573980 [0 127.0.0.1:58639] "SELECT" "2"
1393246487.574107 [2 127.0.0.1:58639] "GET" "q:2cffc57652a84a521efb20a64730470f"
1393246487.590006 [2 127.0.0.1:58639] "SCRIPT" "LOAD" "local key = KEYS[1]\nlocal data = ARGV[1]\nlocal model = ARGV[2]\nlocal dnf = cjson.decode(ARGV[3])\nlocal timeout = ARGV[4]\nlocal inv_timeout = ARGV[5]\n\n-- Update schemes\nlocal schemes = {}\nfor _, conj in ipairs(dnf) do\n    local s = {}\n    for _, eq in ipairs(conj) do\n        table.insert(s, eq[1])\n    end\n    table.insert(schemes, table.concat(s, ','))\nend\nredis.call('sadd', 'schemes:' .. model, unpack(schemes))\n\n-- Write data to cache\nredis.call('setex', key, timeout, data)\n\nlocal conj_cache_key = function (model, conj)\n    local parts = {}\n    for _, eq in ipairs(conj) do\n        table.insert(parts, eq[1] .. '=' .. tostring(eq[2]))\n    end\n\n    return 'conj:' .. model .. ':' .. table.concat(parts, '&')\nend\n\n-- Add new cache_key to list of dependencies for every conjunction in dnf\nfor _, conj in ipairs(dnf) do\n    local conj_key = conj_cache_key(model, conj)\n    redis.call('sadd', conj_key, key)\n    redis.call('expire', conj_key, inv_timeout)\nend\n"
1393246487.590543 [2 127.0.0.1:58639] "EVALSHA" "988c4725c0487b06835d92253314c64fbc0d0607" "1" "q:2cffc57652a84a521efb20a64730470f" "\x80\x02]q\x01(cdjango.db.models.base\nmodel_unpickle\nq\x02X\a\x00\x00\x00catalogq\x03U\x05Brandq\x04\x86]q\x05(U\x05tizerq\x06U\x04textq\aU\bkeywordsq\bU\x03urlq\tU\aurl_rusq\necdjango.db.models.query_utils\ndeferred_class_factory\nq\x0b\x87Rq\x0c}q\r(U\x05titleq\x0eX\x02\x00\x00\x003MU\tis_activeq\x0f\x88U\x06_stateq\x10cdjango.db.models.base\nModelState\nq\x11)\x81q\x12}q\x13(U\x06addingq\x14\x89U\x02dbq\x15U\adefaultq\x16ubU\x04slugq\x17X\x02\x00\x00\x003mU\toffice_idq\x18NU\x0clastmodifiedq\x19cdatetime\ndatetime\nq\x1aU\n\a\xde\x02\x13\x121'\x0e\xd2\xfc\x85Rq\x1bU\x04logoq\x1cX\"\x00\x00\x00files/2010/07/21/brand/3m-logo.gifU\x06geo_idq\x1dM\xdc\x01U\bpub_dateq\x1eh\x1aU\n\a\xda\a\x15\x15\x12\x18\x00\x00\x00\x85Rq\x1fU\x02idq M\xaf\x01ubh\x02h\x03h\x04\x86]q!(h\x06h\ah\bh\th\neh\x0b\x87Rq\"}q#(h\x0eX\x03\x00\x00\x00ABBh\x0f\x88h\x10h\x11)\x81q$}q%(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00abbh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x10\x150/\x00\x00\x00\x85Rq&h\x1cX\x13\x00\x00\x00brands/abb/logo.gifh\x1dM\xd7\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq'h K#ubh\x02h\x03h\x04\x86]q((h\x06h\ah\bh\th\neh\x0b\x87Rq)}q*(h\x0eX\n\x00\x00\x00ABL SURSUMh\x0f\x88h\x10h\x11)\x81q+}q,(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00abl-sursumh\x18Nh\x19h\x1aU\n\a\xdd\b\x1b\x15\x037\x00\x00\x00\x85Rq-h\x1cX\x1f\x00\x00\x00files/2013/08/27/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq.h K\x90ubh\x02h\x03h\x04\x86]q/(h\x06h\ah\bh\th\neh\x0b\x87Rq0}q1(h\x0eX\x0e\x00\x00\x00ABTECH Limitedh\x0f\x88h\x10h\x11)\x81q2}q3(h\x14\x89h\x15h\x16ubh\x17X\x0e\x00\x00\x00abtech-limitedh\x18Nh\x19h\x1aU\n\a\xdd\x05\x0f\x13\x166\x00\x00\x00\x85Rq4h\x1cX&\x00\x00\x00files/2012/03/05/brand/Abtech-logo.jpgh\x1dM\xd3\x01h\x1eh\x1aU\n\a\xdc\x03\x05\x11\"\x00\x00\x00\x00\x85Rq5h M\xd9\x01ubh\x02h\x03h\x04\x86]q6(h\x06h\ah\bh\th\neh\x0b\x87Rq7}q8(h\x0eX\x13\x00\x00\x00AEG Power Solutionsh\x0f\x88h\x10h\x11)\x81q9}q:(h\x14\x89h\x15h\x16ubh\x17X\x13\x00\x00\x00aeg-power-solutionsh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x05\x0f\x00\x00\x00\x00\x00\x85Rq;h\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.jpgh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x19\r.\x1c\x00\x00\x00\x85Rq<h Mo\x01ubh\x02h\x03h\x04\x86]q=(h\x06h\ah\bh\th\neh\x0b\x87Rq>}q?(h\x0eX\x05\x00\x00\x00AEMSAh\x0f\x88h\x10h\x11)\x81q@}qA(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00aemsah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\r:;\x00\x00\x00\x85RqBh\x1cX\x15\x00\x00\x00brands/aemsa/logo.gifh\x1dM\xda\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85RqCh K\xd1ubh\x02h\x03h\x04\x86]qD(h\x06h\ah\bh\th\neh\x0b\x87RqE}qF(h\x0eX\x04\x00\x00\x00AKSAh\x0f\x88h\x10h\x11)\x81qG}qH(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00aksah\x18Nh\x19h\x1aU\n\a\xdd\x06\r\x1507\x00\x00\x00\x85RqIh\x1cX\x1f\x00\x00\x00files/2011/06/21/brand/logo.jpgh\x1dK\x18h\x1eh\x1aU\n\a\xd8\a\a\r\x05*\x00\x00\x00\x85RqJh M\x03\x01ubh\x02h\x03h\x04\x86]qK(h\x06h\ah\bh\th\neh\x0b\x87RqL}qM(h\x0eX\x05\x00\x00\x00ALFRAh\x0f\x88h\x10h\x11)\x81qN}qO(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00alfrah\x18Nh\x19h\x1aU\n\a\xdd\t\n\x14\x1d\r\x00\x00\x00\x85RqPh\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x04\x123\x0b\x00\x00\x00\x85RqQh Mh\x01ubh\x02h\x03h\x04\x86]qR(h\x06h\ah\bh\th\neh\x0b\x87RqS}qT(h\x0eX\x15\x00\x00\x00ALL-BRIGHT TECHNOLOGYh\x0f\x88h\x10h\x11)\x81qU}qV(h\x14\x89h\x15h\x16ubh\x17X\x1c\x00\x00\x00all-bright-technology-co-ltdh\x18Nh\x19h\x1aU\n\a\xdd\b\b\x139\x1e\x00\x00\x00\x85RqWh\x1cX\x1f\x00\x00\x00files/2013/06/17/brand/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x051\x00\x00\x00\x85RqXh M\xfe\x01ubh\x02h\x03h\x04\x86]qY(h\x06h\ah\bh\th\neh\x0b\x87RqZ}q[(h\x0eX\x0e\x00\x00\x00ALLIED TELESISh\x0f\x89h\x10h\x11)\x81q\\}q](h\x14\x89h\x15h\x16ubh\x17X\x0e\x00\x00\x00allied-telesish\x18Nh\x19h\x1aU\n\a\xd9\x0b\b\x131:\x00\x00\x00\x85Rq^h\x1cX\x1e\x00\x00\x00brands/allied-telesis/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq_h K$ubh\x02h\x03h\x04\x86]q`(h\x06h\ah\bh\th\neh\x0b\x87Rqa}qb(h\x0eX\b\x00\x00\x00ALPPILUXh\x0f\x88h\x10h\x11)\x81qc}qd(h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00alppiluxh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x02\n\x00\x00\x00\x85Rqeh\x1cX \x00\x00\x00files/2013/02/05/brand/logo0.jpgh\x1dK\th\x1eh\x1aU\n\a\xd9\x05\r\x14\x02,\x00\x00\x00\x85Rqfh Mb\x01ubh\x02h\x03h\x04\x86]qg(h\x06h\ah\bh\th\neh\x0b\x87Rqh}qi(h\x0eX\x0c\x00\x00\x00ANAM-Legrandh\x0f\x88h\x10h\x11)\x81qj}qk(h\x14\x89h\x15h\x16ubh\x17X\x0c\x00\x00\x00anam-legrandh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x03\t\x00\x00\x00\x85Rqlh\x1cX\x1c\x00\x00\x00brands/anam-legrand/logo.JPGh\x1dM\xf3\x01h\x1eh\x1aU\n\a\xd9\x06\x1d\x0e\x19.\x00\x00\x00\x85Rqmh Mv\x01ubh\x02h\x03h\x04\x86]qn(h\x06h\ah\bh\th\neh\x0b\x87Rqo}qp(h\x0eX\x06\x00\x00\x00APATORh\x0f\x88h\x10h\x11)\x81qq}qr(h\x14\x89h\x15h\x16ubh\x17X\x06\x00\x00\x00apatorh\x18Nh\x19h\x1aU\n\a\xdd\b\x13\x13\t7\x00\x00\x00\x85Rqsh\x1cX\"\x00\x00\x00files/2013/02/06/brand/Logotip.jpgh\x1dK\x12h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rqth K%ubh\x02h\x03h\x04\x86]qu(h\x06h\ah\bh\th\neh\x0b\x87Rqv}qw(h\x0eX\x03\x00\x00\x00APCh\x0f\x88h\x10h\x11)\x81qx}qy(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00apch\x18Nh\x19h\x1aU\n\a\xdd\x02\x06\x12\x02\x12\x00\x00\x00\x85Rqzh\x1cX\x13\x00\x00\x00brands/apc/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x05\x1a\x13\r\n\x00\x00\x00\x85Rq{h Mg\x01ubh\x02h\x03h\x04\x86]q|(h\x06h\ah\bh\th\neh\x0b\x87Rq}}q~(h\x0eX\x05\x00\x00\x00APE\xd0\x9ch\x0f\x88h\x10h\x11)\x81q\x7f}q\x80(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00apemh\x18Nh\x19h\x1aU\n\a\xdd\x04\b\r 2\x00\x00\x00\x85Rq\x81h\x1cX$\x00\x00\x00files/2013/03/29/brand/logo-apem.gifh\x1dM\xd4\x01h\x1eh\x1aU\n\a\xdd\x03\x1d\x10\x031\x00\x00\x00\x85Rq\x82h M\xe3\x01ubh\x02h\x03h\x04\x86]q\x83(h\x06h\ah\bh\th\neh\x0b\x87Rq\x84}q\x85(h\x0eX\x04\x00\x00\x00APPAh\x0f\x88h\x10h\x11)\x81q\x86}q\x87(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00appah\x18Nh\x19h\x1aU\n\a\xdd\b\b\x14;\x0b\x00\x00\x00\x85Rq\x88h\x1cX\x1f\x00\x00\x00files/2013/02/06/brand/appa.gifh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xda\x05\x1c\x12-1\x00\x00\x00\x85Rq\x89h M\xa6\x01ubh\x02h\x03h\x04\x86]q\x8a(h\x06h\ah\bh\th\neh\x0b\x87Rq\x8b}q\x8c(h\x0eX\a\x00\x00\x00AUSONIAh\x0f\x88h\x10h\x11)\x81q\x8d}q\x8e(h\x14\x89h\x15h\x16ubh\x17X\a\x00\x00\x00ausoniah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\b\x1b\x00\x00\x00\x85Rq\x8fh\x1cX\x17\x00\x00\x00brands/ausonia/logo.gifh\x1dM\xd5\x01h\x1eh\x1aU\n\a\xd8\n\x1c\x10\a'\x00\x00\x00\x85Rq\x90h M\x1b\x01ubh\x02h\x03h\x04\x86]q\x91(h\x06h\ah\bh\th\neh\x0b\x87Rq\x92}q\x93(h\x0eX\n\x00\x00\x00AUSPICIOUSh\x0f\x88h\x10h\x11)\x81q\x94}q\x95(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00auspicioush\x18Nh\x19h\x1aU\n\a\xdd\n\x1e\x0e+\x1b\x00\x00\x00\x85Rq\x96h\x1cX\x1a\x00\x00\x00brands/auspicious/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq\x97h K\xedubh\x02h\x03h\x04\x86]q\x98(h\x06h\ah\bh\th\neh\x0b\x87Rq\x99}q\x9a(h\x0eX\t\x00\x00\x00Advantechh\x0f\x88h\x10h\x11)\x81q\x9b}q\x9c(h\x14\x89h\x15h\x16ubh\x17X\t\x00\x00\x00advantechh\x18Nh\x19h\x1aU\n\a\xdd\t\n\x13\x1e\"\x00\x00\x00\x85Rq\x9dh\x1cX\x19\x00\x00\x00brands/advantech/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x01\x1b\x0c *\x00\x00\x00\x85Rq\x9eh MB\x01ubh\x02h\x03h\x04\x86]q\x9f(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa0}q\xa1(h\x0eX\b\x00\x00\x00Aeroflexh\x0f\x88h\x10h\x11)\x81q\xa2}q\xa3(h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00aeroflexh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x0b\x00\x00\x00\x85Rq\xa4h\x1cX#\x00\x00\x00files/2013/06/17/brand/Aeroflex.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x116\x00\x00\x00\x85Rq\xa5h M\xff\x01ubh\x02h\x03h\x04\x86]q\xa6(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa7}q\xa8(h\x0eX\x14\x00\x00\x00Agilent Technologiesh\x0f\x88h\x10h\x11)\x81q\xa9}q\xaa(h\x14\x89h\x15h\x16ubh\x17X\x14\x00\x00\x00agilent-technologiesh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x05\x00\x00\x00\x85Rq\xabh\x1cX \x00\x00\x00files/2013/06/17/brand/logo0.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14&\x16\x00\x00\x00\x85Rq\xach M\x00\x02ube." "catalog.brand" "[[]]" "900" "910"
1393246487.591592 [2 lua] "sadd" "schemes:catalog.brand" ""
1393246487.591612 [2 lua] "setex" "q:2cffc57652a84a521efb20a64730470f" "900" "\x80\x02]q\x01(cdjango.db.models.base\nmodel_unpickle\nq\x02X\a\x00\x00\x00catalogq\x03U\x05Brandq\x04\x86]q\x05(U\x05tizerq\x06U\x04textq\aU\bkeywordsq\bU\x03urlq\tU\aurl_rusq\necdjango.db.models.query_utils\ndeferred_class_factory\nq\x0b\x87Rq\x0c}q\r(U\x05titleq\x0eX\x02\x00\x00\x003MU\tis_activeq\x0f\x88U\x06_stateq\x10cdjango.db.models.base\nModelState\nq\x11)\x81q\x12}q\x13(U\x06addingq\x14\x89U\x02dbq\x15U\adefaultq\x16ubU\x04slugq\x17X\x02\x00\x00\x003mU\toffice_idq\x18NU\x0clastmodifiedq\x19cdatetime\ndatetime\nq\x1aU\n\a\xde\x02\x13\x121'\x0e\xd2\xfc\x85Rq\x1bU\x04logoq\x1cX\"\x00\x00\x00files/2010/07/21/brand/3m-logo.gifU\x06geo_idq\x1dM\xdc\x01U\bpub_dateq\x1eh\x1aU\n\a\xda\a\x15\x15\x12\x18\x00\x00\x00\x85Rq\x1fU\x02idq M\xaf\x01ubh\x02h\x03h\x04\x86]q!(h\x06h\ah\bh\th\neh\x0b\x87Rq\"}q#(h\x0eX\x03\x00\x00\x00ABBh\x0f\x88h\x10h\x11)\x81q$}q%(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00abbh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x10\x150/\x00\x00\x00\x85Rq&h\x1cX\x13\x00\x00\x00brands/abb/logo.gifh\x1dM\xd7\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq'h K#ubh\x02h\x03h\x04\x86]q((h\x06h\ah\bh\th\neh\x0b\x87Rq)}q*(h\x0eX\n\x00\x00\x00ABL SURSUMh\x0f\x88h\x10h\x11)\x81q+}q,(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00abl-sursumh\x18Nh\x19h\x1aU\n\a\xdd\b\x1b\x15\x037\x00\x00\x00\x85Rq-h\x1cX\x1f\x00\x00\x00files/2013/08/27/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq.h K\x90ubh\x02h\x03h\x04\x86]q/(h\x06h\ah\bh\th\neh\x0b\x87Rq0}q1(h\x0eX\x0e\x00\x00\x00ABTECH Limitedh\x0f\x88h\x10h\x11)\x81q2}q3(h\x14\x89h\x15h\x16ubh\x17X\x0e\x00\x00\x00abtech-limitedh\x18Nh\x19h\x1aU\n\a\xdd\x05\x0f\x13\x166\x00\x00\x00\x85Rq4h\x1cX&\x00\x00\x00files/2012/03/05/brand/Abtech-logo.jpgh\x1dM\xd3\x01h\x1eh\x1aU\n\a\xdc\x03\x05\x11\"\x00\x00\x00\x00\x85Rq5h M\xd9\x01ubh\x02h\x03h\x04\x86]q6(h\x06h\ah\bh\th\neh\x0b\x87Rq7}q8(h\x0eX\x13\x00\x00\x00AEG Power Solutionsh\x0f\x88h\x10h\x11)\x81q9}q:(h\x14\x89h\x15h\x16ubh\x17X\x13\x00\x00\x00aeg-power-solutionsh\x18Nh\x19h\x1aU\n\a\xdd\x0c\x05\x0f\x00\x00\x00\x00\x00\x85Rq;h\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.jpgh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x19\r.\x1c\x00\x00\x00\x85Rq<h Mo\x01ubh\x02h\x03h\x04\x86]q=(h\x06h\ah\bh\th\neh\x0b\x87Rq>}q?(h\x0eX\x05\x00\x00\x00AEMSAh\x0f\x88h\x10h\x11)\x81q@}qA(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00aemsah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\r:;\x00\x00\x00\x85RqBh\x1cX\x15\x00\x00\x00brands/aemsa/logo.gifh\x1dM\xda\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85RqCh K\xd1ubh\x02h\x03h\x04\x86]qD(h\x06h\ah\bh\th\neh\x0b\x87RqE}qF(h\x0eX\x04\x00\x00\x00AKSAh\x0f\x88h\x10h\x11)\x81qG}qH(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00aksah\x18Nh\x19h\x1aU\n\a\xdd\x06\r\x1507\x00\x00\x00\x85RqIh\x1cX\x1f\x00\x00\x00files/2011/06/21/brand/logo.jpgh\x1dK\x18h\x1eh\x1aU\n\a\xd8\a\a\r\x05*\x00\x00\x00\x85RqJh M\x03\x01ubh\x02h\x03h\x04\x86]qK(h\x06h\ah\bh\th\neh\x0b\x87RqL}qM(h\x0eX\x05\x00\x00\x00ALFRAh\x0f\x88h\x10h\x11)\x81qN}qO(h\x14\x89h\x15h\x16ubh\x17X\x05\x00\x00\x00alfrah\x18Nh\x19h\x1aU\n\a\xdd\t\n\x14\x1d\r\x00\x00\x00\x85RqPh\x1cX\x1f\x00\x00\x00files/2013/02/05/brand/logo.gifh\x1dK\ah\x1eh\x1aU\n\a\xd9\x06\x04\x123\x0b\x00\x00\x00\x85RqQh Mh\x01ubh\x02h\x03h\x04\x86]qR(h\x06h\ah\bh\th\neh\x0b\x87RqS}qT(h\x0eX\x15\x00\x00\x00ALL-BRIGHT TECHNOLOGYh\x0f\x88h\x10h\x11)\x81qU}qV(h\x14\x89h\x15h\x16ubh\x17X\x1c\x00\x00\x00all-bright-technology-co-ltdh\x18Nh\x19h\x1aU\n\a\xdd\b\b\x139\x1e\x00\x00\x00\x85RqWh\x1cX\x1f\x00\x00\x00files/2013/06/17/brand/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x051\x00\x00\x00\x85RqXh M\xfe\x01ubh\x02h\x03h\x04\x86]qY(h\x06h\ah\bh\th\neh\x0b\x87RqZ}q[(h\x0eX\x0e\x00\x00\x00ALLIED TELESISh\x0f\x89h\x10h\x11)\x81q\\}q](h\x14\x89h\x15h\x16ubh\x17X\x0e\x00\x00\x00allied-telesish\x18Nh\x19h\x1aU\n\a\xd9\x0b\b\x131:\x00\x00\x00\x85Rq^h\x1cX\x1e\x00\x00\x00brands/allied-telesis/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq_h K$ubh\x02h\x03h\x04\x86]q`(h\x06h\ah\bh\th\neh\x0b\x87Rqa}qb(h\x0eX\b\x00\x00\x00ALPPILUXh\x0f\x88h\x10h\x11)\x81qc}qd(h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00alppiluxh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x02\n\x00\x00\x00\x85Rqeh\x1cX \x00\x00\x00files/2013/02/05/brand/logo0.jpgh\x1dK\th\x1eh\x1aU\n\a\xd9\x05\r\x14\x02,\x00\x00\x00\x85Rqfh Mb\x01ubh\x02h\x03h\x04\x86]qg(h\x06h\ah\bh\th\neh\x0b\x87Rqh}qi(h\x0eX\x0c\x00\x00\x00ANAM-Legrandh\x0f\x88h\x10h\x11)\x81qj}qk(h\x14\x89h\x15h\x16ubh\x17X\x0c\x00\x00\x00anam-legrandh\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\x03\t\x00\x00\x00\x85Rqlh\x1cX\x1c\x00\x00\x00brands/anam-legrand/logo.JPGh\x1dM\xf3\x01h\x1eh\x1aU\n\a\xd9\x06\x1d\x0e\x19.\x00\x00\x00\x85Rqmh Mv\x01ubh\x02h\x03h\x04\x86]qn(h\x06h\ah\bh\th\neh\x0b\x87Rqo}qp(h\x0eX\x06\x00\x00\x00APATORh\x0f\x88h\x10h\x11)\x81qq}qr(h\x14\x89h\x15h\x16ubh\x17X\x06\x00\x00\x00apatorh\x18Nh\x19h\x1aU\n\a\xdd\b\x13\x13\t7\x00\x00\x00\x85Rqsh\x1cX\"\x00\x00\x00files/2013/02/06/brand/Logotip.jpgh\x1dK\x12h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rqth K%ubh\x02h\x03h\x04\x86]qu(h\x06h\ah\bh\th\neh\x0b\x87Rqv}qw(h\x0eX\x03\x00\x00\x00APCh\x0f\x88h\x10h\x11)\x81qx}qy(h\x14\x89h\x15h\x16ubh\x17X\x03\x00\x00\x00apch\x18Nh\x19h\x1aU\n\a\xdd\x02\x06\x12\x02\x12\x00\x00\x00\x85Rqzh\x1cX\x13\x00\x00\x00brands/apc/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x05\x1a\x13\r\n\x00\x00\x00\x85Rq{h Mg\x01ubh\x02h\x03h\x04\x86]q|(h\x06h\ah\bh\th\neh\x0b\x87Rq}}q~(h\x0eX\x05\x00\x00\x00APE\xd0\x9ch\x0f\x88h\x10h\x11)\x81q\x7f}q\x80(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00apemh\x18Nh\x19h\x1aU\n\a\xdd\x04\b\r 2\x00\x00\x00\x85Rq\x81h\x1cX$\x00\x00\x00files/2013/03/29/brand/logo-apem.gifh\x1dM\xd4\x01h\x1eh\x1aU\n\a\xdd\x03\x1d\x10\x031\x00\x00\x00\x85Rq\x82h M\xe3\x01ubh\x02h\x03h\x04\x86]q\x83(h\x06h\ah\bh\th\neh\x0b\x87Rq\x84}q\x85(h\x0eX\x04\x00\x00\x00APPAh\x0f\x88h\x10h\x11)\x81q\x86}q\x87(h\x14\x89h\x15h\x16ubh\x17X\x04\x00\x00\x00appah\x18Nh\x19h\x1aU\n\a\xdd\b\b\x14;\x0b\x00\x00\x00\x85Rq\x88h\x1cX\x1f\x00\x00\x00files/2013/02/06/brand/appa.gifh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xda\x05\x1c\x12-1\x00\x00\x00\x85Rq\x89h M\xa6\x01ubh\x02h\x03h\x04\x86]q\x8a(h\x06h\ah\bh\th\neh\x0b\x87Rq\x8b}q\x8c(h\x0eX\a\x00\x00\x00AUSONIAh\x0f\x88h\x10h\x11)\x81q\x8d}q\x8e(h\x14\x89h\x15h\x16ubh\x17X\a\x00\x00\x00ausoniah\x18Nh\x19h\x1aU\n\a\xdd\x03\x04\x0e\b\x1b\x00\x00\x00\x85Rq\x8fh\x1cX\x17\x00\x00\x00brands/ausonia/logo.gifh\x1dM\xd5\x01h\x1eh\x1aU\n\a\xd8\n\x1c\x10\a'\x00\x00\x00\x85Rq\x90h M\x1b\x01ubh\x02h\x03h\x04\x86]q\x91(h\x06h\ah\bh\th\neh\x0b\x87Rq\x92}q\x93(h\x0eX\n\x00\x00\x00AUSPICIOUSh\x0f\x88h\x10h\x11)\x81q\x94}q\x95(h\x14\x89h\x15h\x16ubh\x17X\n\x00\x00\x00auspicioush\x18Nh\x19h\x1aU\n\a\xdd\n\x1e\x0e+\x1b\x00\x00\x00\x85Rq\x96h\x1cX\x1a\x00\x00\x00brands/auspicious/logo.jpgh\x1dM\xf1\x01h\x1eh\x1aU\n\a\xd8\a\x03\x15:\x14\x00\x00\x00\x85Rq\x97h K\xedubh\x02h\x03h\x04\x86]q\x98(h\x06h\ah\bh\th\neh\x0b\x87Rq\x99}q\x9a(h\x0eX\t\x00\x00\x00Advantechh\x0f\x88h\x10h\x11)\x81q\x9b}q\x9c(h\x14\x89h\x15h\x16ubh\x17X\t\x00\x00\x00advantechh\x18Nh\x19h\x1aU\n\a\xdd\t\n\x13\x1e\"\x00\x00\x00\x85Rq\x9dh\x1cX\x19\x00\x00\x00brands/advantech/logo.gifh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xd9\x01\x1b\x0c *\x00\x00\x00\x85Rq\x9eh MB\x01ubh\x02h\x03h\x04\x86]q\x9f(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa0}q\xa1(h\x0eX\b\x00\x00\x00Aeroflexh\x0f\x88h\x10h\x11)\x81q\xa2}q\xa3(h\x14\x89h\x15h\x16ubh\x17X\b\x00\x00\x00aeroflexh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x0b\x00\x00\x00\x85Rq\xa4h\x1cX#\x00\x00\x00files/2013/06/17/brand/Aeroflex.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14\x116\x00\x00\x00\x85Rq\xa5h M\xff\x01ubh\x02h\x03h\x04\x86]q\xa6(h\x06h\ah\bh\th\neh\x0b\x87Rq\xa7}q\xa8(h\x0eX\x14\x00\x00\x00Agilent Technologiesh\x0f\x88h\x10h\x11)\x81q\xa9}q\xaa(h\x14\x89h\x15h\x16ubh\x17X\x14\x00\x00\x00agilent-technologiesh\x18Nh\x19h\x1aU\n\a\xdd\x06\x13\r*\x05\x00\x00\x00\x85Rq\xabh\x1cX \x00\x00\x00files/2013/06/17/brand/logo0.jpgh\x1dM\xdc\x01h\x1eh\x1aU\n\a\xdd\x06\x11\x14&\x16\x00\x00\x00\x85Rq\xach M\x00\x02ube."
1393246487.592544 [2 lua] "sadd" "conj:catalog.brand:" "q:2cffc57652a84a521efb20a64730470f"
1393246487.592564 [2 lua] "expire" "conj:catalog.brand:" "910"
1393246495.139341 [0 127.0.0.1:58641] "SELECT" "2"
1393246496.918877 [2 127.0.0.1:58641] "keys" "*"
1393246533.685891 [2 127.0.0.1:58641] "smembers" "schemes:catalog.brand"

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 25, 2014

Обновился до мастера, появилось две ошибки:

Traceback (most recent call last):

File "/usr/local/lib/python2.7/dist-packages/Django-1.5.5-py2.7.egg/django/core/handlers/base.py", line 115, in get_response response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/newrelic-2.12.0.10-py2.7-linux-x86_64.egg/newrelic/hooks/framework_django.py", line 492, in wrapper return wrapped(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.5-py2.7.egg/django/views/generic/base.py", line 68, in view return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/newrelic-2.12.0.10-py2.7-linux-x86_64.egg/newrelic/hooks/framework_django.py", line 829, in wrapper return wrapped(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.5-py2.7.egg/django/views/generic/base.py", line 86, in dispatch return handler(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/vluki-5.2.3-py2.7.egg/vluki/views/facet.py", line 125, in get context = self.get_context_data()
File "/usr/local/lib/python2.7/dist-packages/vluki-5.2.3-py2.7.egg/vluki/contrib/spravka/views.py", line 23, in get_context_data context = super(OrgFacetView, self).get_context_data(**kwargs)
File "/usr/local/lib/python2.7/dist-packages/vluki-5.2.3-py2.7.egg/vluki/views/facet.py", line 117, in get_context_data context['facet_%s' % name] = self.facet_list(name)
File "/usr/local/lib/python2.7/dist-packages/vluki-5.2.3-py2.7.egg/vluki/views/facet.py", line 75, in facet_list return self.__get_dynamic_attr('facet_%s_list' % name)
File "/usr/local/lib/python2.7/dist-packages/vluki-5.2.3-py2.7.egg/vluki/views/facet.py", line 53, in __get_dynamic_attr return attr(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/vluki-5.2.3-py2.7.egg/vluki/contrib/spravka/views.py", line 58, in facet_spravka_rubrica_list rubricator_set = list(Rubricator.objects.filter(id__in=bulk_id))
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.5-py2.7.egg/django/db/models/query.py", line 108, in __len__ self._result_cache.extend(self._iter)
File "/usr/local/lib/python2.7/dist-packages/cacheops/query.py", line 355, in iterator self._cache_results(cache_key, results)
File "/usr/local/lib/python2.7/dist-packages/cacheops/query.py", line 258, in _cache_results cache_thing(self.model, cache_key, results, cond_dnf, timeout or self._cacheconf['timeout'])
File "/usr/local/lib/python2.7/dist-packages/cacheops/query.py", line 58, in cache_thing model._cacheprofile['timeout'] + 10
File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 2215, in __call__ return client.evalsha(self.sha, len(keys), *args)
File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 1626, in evalsha return self.execute_command('EVALSHA', sha, numkeys, *keys_and_args)
File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 461, in execute_command return self.parse_response(connection, command_name, **options)
File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 471, in parse_response response = connection.read_response()
File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 344, in read_response raise response

ResponseError: Error running script (call to f_988c4725c0487b06835d92253314c64fbc0d0607): @user_script:17: @user_script: 17: Wrong number of args calling Redis command From Lua script

Второй:
Traceback (most recent call last):

File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/core/handlers/base.py", line 114, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/newrelic-2.14.0.11-py2.7-linux-x86_64.egg/newrelic/hooks/framework_django.py", line 492, in wrapper
    return wrapped(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/contrib/admin/options.py", line 432, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/utils/decorators.py", line 99, in _wrapped_view
    response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/views/decorators/cache.py", line 52, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/contrib/admin/sites.py", line 198, in inner
    return view(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/utils/decorators.py", line 29, in _wrapper
    return bound_func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/utils/decorators.py", line 99, in _wrapped_view
    response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/utils/decorators.py", line 25, in bound_func
    return func(self, *args2, **kwargs2)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/db/transaction.py", line 339, in inner
    return func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/contrib/admin/options.py", line 1131, in add_view
    self.save_model(request, new_object, form, False)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/contrib/admin/options.py", line 860, in save_model
    obj.save()
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/db/models/base.py", line 545, in save
    force_update=force_update, update_fields=update_fields)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/db/models/base.py", line 582, in save_base
    update_fields=update_fields, raw=raw, using=using)
File "/usr/local/lib/python2.7/dist-packages/Django-1.6.2-py2.7.egg/django/dispatch/dispatcher.py", line 185, in send
    response = receiver(signal=self, sender=sender, **named)
File "/usr/local/lib/python2.7/dist-packages/django_cacheops-1.3.0-py2.7.egg/cacheops/query.py", line 436, in _post_save
    invalidate_obj(instance)
File "/usr/local/lib/python2.7/dist-packages/django_cacheops-1.3.0-py2.7.egg/cacheops/invalidation.py", line 21, in invalidate_obj
    serialize_object(model, obj)
File "build/bdist.linux-x86_64/egg/redis/client.py", line 2215, in __call__
    return client.evalsha(self.sha, len(keys), *args)
File "build/bdist.linux-x86_64/egg/redis/client.py", line 1626, in evalsha
    return self.execute_command('EVALSHA', sha, numkeys, *keys_and_args)
File "build/bdist.linux-x86_64/egg/redis/client.py", line 461, in execute_command
    return self.parse_response(connection, command_name, **options)
File "build/bdist.linux-x86_64/egg/redis/client.py", line 471, in parse_response
    response = connection.read_response()
File "build/bdist.linux-x86_64/egg/redis/connection.py", line 344, in read_response
    raise response

ResponseError: Error running script (call to f_4ec8366cea22a453a31d2dc9de55a5a885192b9b): @user_script:29: user_script:29: too many results to unpack

@Suor
Copy link
Owner

Suor commented Feb 25, 2014

Скорее всего либо что-то не так с редисом, либо с redis-py. Какие версии используются? Используется ли hiredis? Какой версии?

@Suor
Copy link
Owner

Suor commented Feb 25, 2014

Хм. В принципе, первая ошибка может возникать если dnf() выдала пустой список - само по себе ошибка. Можешь сказать на каком запросе это происходит?

Вторая может быть каким-то ограничением lua, с которым я не сталкивался.

@Suor
Copy link
Owner

Suor commented Feb 25, 2014

Мне удалось воспроизвести первую ошибку, возникает при кешировании гарантированно пустого запроса, например Model.objects.filter(pk__in=[]). Починил в fc13ce9

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 25, 2014

Вторая ошибка проявилась всего один раз. Причём это админка.
Вот такие версии:

hiredis==0.1.2
redis==2.9.1

# Server
redis_version:2.8.6

@Suor
Copy link
Owner

Suor commented Feb 25, 2014

Я исследовал вторую ошибку. Она возникает когда инвалидируется за раз большое количество ключей (граница где-то между 6000 и 8000). Ограничение вшито в Lua. Я добавил workaround.

Но, вообще, нехилая у вас там инвалидация в админке.

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 25, 2014

Хм. Это добавлялся новый объект. В БД 32000 записей.

127.0.0.1:6379> keys conj:news.news:*
...
1856) "conj:news.news:company_id=8649&is_active=true"

Что делать в большими БД ?

@Suor
Copy link
Owner

Suor commented Feb 25, 2014

Количество записей особого значения не имеет, я использовал cacheops с большими БД. Дело было в количестве выборок инвалидируемых за раз, но сейчас и это будет работать.

Хотя если при обновлении одного объекта стирается кеш для нескольких тысяч запросов, то, возможно, такие запросы кешировать смысла не имеет. Такая ситуация может возникать когда вы делаете неспецифические выборки - без простых условий на равенство или только с очень распространённым условием, вроде is_active = True.

@Suor
Copy link
Owner

Suor commented Feb 25, 2014

Ещё один вариант наделать кучу запросов это так:

# выбрать новости за сутки
News.objects.filter(time_creared__gt=datetime.now() - timedelta(1)) 

datetime.now() каждый раз новый и соответственно все запросы будут разными. Можно либо отключить кеш для таких случаев, либо округлять время.

@MikeVL
Copy link
Contributor Author

MikeVL commented Feb 25, 2014

Повторяющиеся geo_id остались, это норма?

127.0.0.1:6379> smembers schemes:catalog.brand
1) "id"
2) ""
3) "slug"
4) "is_active,geo_id,geo_id,geo_id,geo_id"
5) "is_active"
6) "is_active,geo_id,geo_id,geo_id"
7) "office_id"
8) "is_active,geo_id,geo_id"
9) "is_active,geo_id"

Вызов dnf(queryset)

>>> dnf(Brand.objects.filter(is_active=True).exclude(geo__in=[19, 25, 4, 14]))
[[('is_active', True)], [('geo_id', None), ('is_active', True)], [('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('geo_id', None), ('is_active', True)], [('geo_id', None), ('geo_id', None), ('geo_id', None), ('geo_id', None), ('is_active', True)]]

@Suor
Copy link
Owner

Suor commented Feb 26, 2014

Это добавляет некоторую неэффективность, но проблем от этого не будет.

@Suor Suor closed this as completed Mar 10, 2014
erthalion pushed a commit to erthalion/django-cacheops that referenced this issue May 22, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants