问题标签 [django-johnny-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
461 浏览

django - Django Johnny 缓存 - 使用 MAN_IN_BLACKLIST 包含表而不是排除?

我知道 Johnny 缓存MAN_IN_BLACKLISTJOHNNY_TABLE_BLACKLIST. 有没有办法指定相反的?那就是只指定需要缓存的表?我想这样做的原因很简单,因为我们在应用程序中有超过 200 个表,我想缓存一些并且不希望我MAN_IN_BLACKLIST的表非常大。

谢谢,

0 投票
0 回答
194 浏览

django - 为类似 SNS 的内容修改 Johnny 缓存

Johnny 缓存适用于只读数据表或很少更新数据的表,例如游戏元表。它具有表级版本控制,如果目标表上发生更新,它将自动使目标表上的查询缓存过期。

对于类似 SNS 的应用程序,UGC 通常可以通过 user_id 进行分片,并且缓存通常在每个用户级别完成,所以我正在考虑将自动版本控制机制从表级别更改为用户级别,例如表级别,一个键在概念上看起来像

“jc _ {表名} _ {表版本} _ {查询哈希}”

对于它想要的用户级密钥

“jc_{表名}_{”表+{用户ID}”_版本}_{查询哈希}”

假设缓存是在特定用户的表视图上完成的(考虑到“select * from table where user_id=111”的视图作为 johnny-cache 工作的表)。然后它可以用于以统一的方式缓存大部分 UGC。

我知道没有解决所有问题的灵丹妙药,但对于这个建议,你能和我分享任何信息或建议吗?提前致谢。

0 投票
0 回答
626 浏览

django - 带有 Johnny Cache 任务的 Django Celery 因奇怪的错误而失败

我正在运行 Django 1.4.5、Celery 3.0.15、Django Celery 3.0.11、Johnny Cache 1.4。

celery 任务中对 ORM 的调用有时会失败,并出现奇怪的错误,例如invalid literal for int() with base 10: 'a'"or <MaybeEncodingError: Error sending result: ''<ExceptionInfo: ObjectDoesNotExist()>''. Reason: ''PicklingError("Can\'t pickle <class \'scsite.models.DoesNotExist\'>: attribute lookup scsite.models.DoesNotExist failed",)''.>

这是一个示例堆栈跟踪:

我相信错误不在我的代码中,看起来缓存由于某种原因损坏了,并且发生了以下情况:

  • 检索 pk=123 的 CustomModel。
  • 它被传递给 Celery 进行处理。
  • 出于某种原因,Custom 模型的 pk 变成了 'a'、'd' 之类的字符,而不是 123。另一个调用是 withMyModel.objects.get(pk='a')并且显然失败了。

实际上,重新访问此代码,似乎我并没有像上面提到的那样将对象传递给 Celery,只是从一个简单的 celery 任务中运行以下管理器方法。

我的猜测如下:当第 1 行运行时,人员是从缓存中获取的,但在处理第 3 行时,第 1 行中获得的缓存已损坏。

0 投票
0 回答
204 浏览

django - 在管理员中禁用 johnny-cache

我正在使用约翰尼缓存。有没有一种简单的方法可以从管理员禁用它,但让它在其他任何地方透明地工作?

我查看了 johhny 缓存文档 - http://pythonhosted.org/johnny-cache/,但似乎找不到这个。

0 投票
1 回答
69 浏览

django - 对两个站点使用相同的缓存

我从我的Django代码库托管两个站点,并且我正在使用Johnny Cache进行缓存。

我对这两个站点都有单独的 settings.py 和 manage.py 。

我已经为他们两个配置了 Johnny Cache。现在,需要的是它们共享缓存。总而言之,如果 Site1 上的某些内容发生更改,则要求 Site2 上的内容也应有所更改(使用缓存)。

我已经尝试了很多事情,比如定义CACHES, CACHE_BACKEND, JOHNNY_MIDDLEWARE_KEY_PREFIX,CACHE_PREFIX设置。但一切都是徒劳的。

我想我错过了一些东西,但无法弄清楚。

更新

设置:

0 投票
1 回答
423 浏览

python - 访问 Johnny 缓存数据

我对 Python 比较陌生,想知道是否可以在返回结果之前访问 Johnny Cache 缓存的结果以进行进一步处理,例如在其上运行进一步查询。

举个简单的例子,假设我们有一个包含数十万运动结果的表格,每个运动结果都按运动分类,例如网球、足球、高尔夫等。有些用户只对足球和高尔夫感兴趣,所以目前我们使用 johnny 缓存来缓存每个运动类别的查询结果 30 分钟。但是,我们不能将这些数据按原样传递给用户,因为它需要进一步过滤用户的偏好(例如,他们只想要某些球队/球员的结果)。对类别和用户偏好进行 db 调用会令人望而却步,这就是为什么我们缓存构成所有请求基础的查询部分(运动类别),但现在想要进一步过滤内存中的缓存以供用户使用偏好 - 这可以用 Johnny Cache 来完成吗?如果可以,请问怎么做?

0 投票
1 回答
155 浏览

django - 带有模板缓存的 Johnny Cache

我正在使用 Django 1.4 设置 Johnny Cache 和模板缓存。我们当前的设置如下所示:

JOHNNY_CACHE_BACKEND 已被弃用,因此我们需要将 johnny 设置移动到缓存字典中。根据文档,这似乎很容易。但是,我们的模板缓存会发生什么?这些设置是否像这样并存?

或者 johnny.backends.memcached.MemcachedCache 是 django.core.cache.backends.memcached.MemcachedCache 的替代品,在这种情况下我们应该这样:

它将处理查询和模板缓存。任何见解将不胜感激。

0 投票
0 回答
179 浏览

django - 一些查询没有被 django-cache-machine / django-johnny-cache 缓存的查询集

我正在寻找缓存来自数据库中几个相关表的一些很少更新的数据(具体来说是 MySQL)。我已经尝试使用上述 django 应用程序进行 django ORM 查询集缓存,但偶然发现了一些奇怪的行为:即使它们应该像其他查询一样来自缓存,也会查询一些查询。

我在一组 6 个查询中检索数据,混合任何一个:过滤器、选择相关、预取相关(M2M 关系)、正向和反向关系。只是数据检索,没有更新。这发生在一个专用方法中,出于评估的目的,我从 TestCase 调用了两次。(为了抢占任何潜在问题,评估方法中没有任何类型的事务管理)

我观察到的是重复了 3 个查询 - 一个是来自 prefetch_related 的反向 m2m(而另一个反向 m2m 被缓存),以及两个相当简单的反向管理器查询,即使更改为 ModelName.objects.all 也能保持这种行为() 或对应关系的过滤器。我为寻找某种模式而进行的最后这些试验仅在 johnny-cache 上进行,这对于我的特定场景来说是更可取的,因为它的失效策略。我还尝试以一些通用方式修改该方法,基本上是在黑暗中拍摄,例如删除有问题的查询(所有内容都已缓存),只留下一个有问题的查询(仍未缓存),更改查询顺序(无更改)。

有没有人遇到类似的事情或可以提供一些解释?

0 投票
1 回答
703 浏览

django - Django 1.6 中的 johnny cache 1.4 不起作用?

我使用说明在 Django 1.6 中安装了 johnny-cache 1.4 但不起作用:

出现的错误是:

调查并说问题更多是 Django,我想修复它,因为这是一个很棒的工具,它会很有帮助。

0 投票
1 回答
59 浏览

django - Johnny-cache 和 taggit-tags

我在一个项目中使用 johnny-cache (1.6.1a) 和 Django 1.6。

我有一个实现 TaggableManger 的模型:

关键字没有被 johnny-cache 自动失效。所以我使用了一个 post_save 信号来做到这一点。

我尝试传递对象名称,例如 ,invalidate('Tag')但它从未奏效。

这样做:

所以我想知道这是否是预期的行为,还是有其他方法?