Comments (32)
Делать flushdb во время работы не надо просто. Либо одновременно с
перезапуском процесса. Так что это не баг, нельзя вмешиваться в работу
системы и потом жаловаться на неё.
Дело в том, что схемы кешируются в памяти процесса, поэтому при втором
запросе cacheops думает что такие есть и не пересоздаёт их.
from django-cacheops.
Ну я не жалуюсь. Так мы делали на тестовом сервере.
А вобще начали разбираться, потому, что у нас есть проблема с инвалидацией.
Почему то кеш не обновляется по полю slug=.
Сервер уже много раз был перезагружен, но все равно инвалидация не проходит.
Поле slug никак не хочет добавляться в ключ:
smembers "schemes:catalog.brand"
Вот и пытаемся разобраться.
from django-cacheops.
Что значит кэш не обновляется по полю slug? Идеальный ответ был бы в виде
теста :-)
from django-cacheops.
У нас запросы вида Brand.objects.get(slug=***) не инвалидируются.
Я начал искать проблему, и думал проблема в том, что я описал в первом посте.
Вчера вечером в ключ "schemes:catalog.brand" я в ручную добавил поле slug.
Но сегодня утром проверил, и оказалось что данный ключ вобще не существует.
Я создал его в ручную. Добавил в него поля id и slug.
Через несколько часов, slug удалился, но добавился is_active.
Каким образом могло поле slug удалиться из ключа "schemes:catalog.brand" ?
Деплоев не делали, не перезагружали.
Запущено 8 демонов uwsgi с тредами.
from django-cacheops.
Сейчас, просмотрел код. Теоретически возможна ситуация когда происходит рассинхронизация схем в памяти процесса и в редисе при частом обновлении какого-то m2m.
Стоит попробовать использовать master кешопса отсюда, в нём проблема устранена.
from django-cacheops.
Поставил из мастера, понаблюдаю как будет работать.
from django-cacheops.
Не знаю, нормально или нет, создались вот такие ключики:
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')
from django-cacheops.
Также, в случае рестарта 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.
from django-cacheops.
Ключики - ненормально, даже 2 ненормальности:
- имена полей неупорядочены (я это поправил только что)
- поля дублируются. Это, по-идее, может возникать только при запросах вида
Brand.objects.cache().filter(id=1).filter(id=2)
. Совсем не исключено, если запросы строятся в результате какой-то логики, в цикле там.
from django-cacheops.
Ах, да. главный вопрос. Инвалидация-то работает?
from django-cacheops.
Проблема с ResponseError: NOSCRIPT No matching script.
решается обновлением питоньего redis клиента до последней версии:
pip install -U redis
from django-cacheops.
Инвалидация да, работает. Пока проблем не было.
- По поводу дубликации полей. Я на тестовом сервере очистил кэш и сделал вот этот запрос:
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"
from django-cacheops.
Попробовал воспроизвести, у меня не получается. Можно попробовать следующее:
- Выполнить то же самое при включеном мониторе редиса
redis-cli -n <cacheops-db> monitor
и послать мне лог. - Постепенно упрощать запрос и модель пока косяк сохраняется. Послать мне оставшийся код, включая модель или оформить из него тест.
1 можно сделать быстро. 2 - в идеале. И обновить cacheops до последнего мастера перед тем как начинать )
from django-cacheops.
Код питона:
>>> 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"
from django-cacheops.
Вариант 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)
from django-cacheops.
Это явно очень старая версия cacheops, в последнем мастере не используются транзакции.
from django-cacheops.
Хм, я обновил до последнего мастера.
>>> cacheops.VERSION
(1, 3, 0)
Сейчас его полностью удалю и заново поставлю.
from django-cacheops.
Под очень старой я имею в виду "по сравнению с мастером".
И вообще происходит что-то странное, т.к. ошибка со скриптами (NOSCRIPT) может происходить только если используется новая версия, а MULTI
может использоваться только если используется старая. Возможно, у вас там несколько версий cacheops завалялось.
from django-cacheops.
cacheops.VERSION
показывает предыдущую версию. Я обновляю её только при релизе.
from django-cacheops.
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"
from django-cacheops.
Вот еще интересное:
>>> 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"
from django-cacheops.
Обновился до мастера, появилось две ошибки:
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
from django-cacheops.
Скорее всего либо что-то не так с редисом, либо с redis-py. Какие версии используются? Используется ли hiredis? Какой версии?
from django-cacheops.
Хм. В принципе, первая ошибка может возникать если dnf()
выдала пустой список - само по себе ошибка. Можешь сказать на каком запросе это происходит?
Вторая может быть каким-то ограничением lua, с которым я не сталкивался.
from django-cacheops.
Мне удалось воспроизвести первую ошибку, возникает при кешировании гарантированно пустого запроса, например Model.objects.filter(pk__in=[])
. Починил в fc13ce9
from django-cacheops.
Вторая ошибка проявилась всего один раз. Причём это админка.
Вот такие версии:
hiredis==0.1.2
redis==2.9.1
# Server
redis_version:2.8.6
from django-cacheops.
Я исследовал вторую ошибку. Она возникает когда инвалидируется за раз большое количество ключей (граница где-то между 6000 и 8000). Ограничение вшито в Lua. Я добавил workaround.
Но, вообще, нехилая у вас там инвалидация в админке.
from django-cacheops.
Хм. Это добавлялся новый объект. В БД 32000 записей.
127.0.0.1:6379> keys conj:news.news:*
...
1856) "conj:news.news:company_id=8649&is_active=true"
Что делать в большими БД ?
from django-cacheops.
Количество записей особого значения не имеет, я использовал cacheops с большими БД. Дело было в количестве выборок инвалидируемых за раз, но сейчас и это будет работать.
Хотя если при обновлении одного объекта стирается кеш для нескольких тысяч запросов, то, возможно, такие запросы кешировать смысла не имеет. Такая ситуация может возникать когда вы делаете неспецифические выборки - без простых условий на равенство или только с очень распространённым условием, вроде is_active = True
.
from django-cacheops.
Ещё один вариант наделать кучу запросов это так:
# выбрать новости за сутки
News.objects.filter(time_creared__gt=datetime.now() - timedelta(1))
datetime.now()
каждый раз новый и соответственно все запросы будут разными. Можно либо отключить кеш для таких случаев, либо округлять время.
from django-cacheops.
Повторяющиеся 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)]]
from django-cacheops.
Это добавляет некоторую неэффективность, но проблем от этого не будет.
from django-cacheops.
Related Issues (20)
- in combination with django-tenant-schemas, "public" tables caching is not working HOT 1
- INSIDEOUT doesn't work with Elasticache HOT 5
- features to prevent cache stampede HOT 3
- django-cacheops not working with Django version 4 HOT 3
- Unable to disable cacheops primitives HOT 1
- Memory problem on django test init HOT 7
- DB migrations are being cached even after using setting migrations timeout to zero HOT 6
- Issue with signals (ManagerMixin._post_save() missing 1 required positional argument: 'using') HOT 3
- Question on @cached_as HOT 1
- Redis getting called too many times in a single API call. HOT 3
- Django Admin not invalidating cache on save HOT 4
- Nik
- Support for cache invalidation on `bulk_update()` method HOT 3
- AWS Elasticache Redis Serverless Implementation is raising AttributeError HOT 6
- cache wrongly set to empty list for get query (when accessing a foreignkey field) HOT 15
- conj keys always have -1 as expiration in redis 7 HOT 3
- Are we supporting model translation with django cacheops ? HOT 5
- Potential Concurrency Issue Leading to Cache Inconsistency in Multithreaded Environment HOT 6
- Delete operation fails with -OOM command not allowed when used memory > 'maxmemory'. HOT 2
- How to enable caching for 'views' only HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from django-cacheops.