django - 使用缓存以及将其用于Django中4000-10000个数据行的单个页面是一个好主意吗?

标签 django redis django-redis

Django 2.2

我需要从特定的数据表中获取4000-10000个数据行(我们称为commonsites)才能显示一个网页。

我可以缩小到这4000-10000行中的3个字段(id,name,business_id)

我的流量很低。但是我想知道使用caching来获取这4000-10000行是否是一个好主意

这些行的数据不太可能更改。但是,如果确实要更改或删除它们,该如何更新/删除缓存中的单个行而不是整个缓存?

还是一个好主意?

我的安装是:

  • redis == 3.3.11#https://github.com/antirez/redis
  • django-redis == 4.11.0#https://github.com/niwinz/django-redis

  • 更新资料

    更加清晰的是,该网页是一个检索。发出页面请求后,javascript前端将进行API调用。然后,此API调用将从数据表中提取这4000-10000个数据行。

    因此,这些数据行是预先存在的数据。

    数据作为API json数据作为json数据中的列表发送。

    只是为了清楚起见,不会对数据进行分页。将全部显示。而且我还没有测量数据的大小,所以我不能说数据的大小。我怀疑它会超过5mb。

    最佳答案

    由于我们在评论中Q / a,我可以给出一个完整的答案。

    在单个字符串中保留约4K-10K的行可能不是一个好习惯。但是您不打算在前端进行任何分页。即使将参数的数量减少到idnamebusiness_id,对于该行数,由于以下原因可能也不是一件好事。

  • 您需要获取整个值,这可能会导致网络问题。尤其是在流量增加时,每个人都会获取该数据块。
  • 如果要更新/删除某些行,则需要(获取+更新+设置)/将它们设置为整体(再次联网)。
  • 您不能使部分值无效。
  • 您无法设置部分TTL-您将全部过期/永久保留。

  • The data for these rows are unlikely to change. But in case they do change or get deleted, how do I update/remove individual rows in the cache, rather than the entire cache?



    由于您不需要分页并且希望将其保留在单个键中,因此可以使用string代替hash来满足上面列出的条件。
    127.0.0.1:6379> hset row 1 "some-json"
    (integer) 1
    127.0.0.1:6379> hset row 2 "some-json2"
    (integer) 1
    127.0.0.1:6379> hset row 3 "some-json3"
    (integer) 1
    127.0.0.1:6379> hset row 4 "some-json4"
    (integer) 1
    127.0.0.1:6379> hgetall row
    1) "1"
    2) "some-json"
    3) "2"
    4) "some-json2"
    5) "3"
    6) "some-json3"
    7) "4"
    8) "some-json4"
    127.0.0.1:6379> hset row 3 "some-other-json"
    (integer) 0
    127.0.0.1:6379> hgetall row
    1) "1"
    2) "some-json"
    3) "2"
    4) "some-json2"
    5) "3"
    6) "some-other-json"
    7) "4"
    8) "some-json4"
    127.0.0.1:6379> hdel row 3
    (integer) 1
    127.0.0.1:6379> hgetall row
    1) "1"
    2) "some-json"
    3) "2"
    4) "some-json2"
    5) "4"
    6) "some-json4"
    127.0.0.1:6379>
    

    您可以使用hset一次更新单行/多行。您可以通过hdel从缓存中删除单个行。您仍然可以使用hgetall一次获取所有数据。哈希字段没有局部TTL(在应用程序层中,排序的集具有一些代码,但在您的用例中,哈希比字符串更适合)。

    关于django - 使用缓存以及将其用于Django中4000-10000个数据行的单个页面是一个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62000154/

    相关文章:

    python - docker 撰写 : redis connection refused between containers

    带有 Redis 缓存的 Django 1.9

    python - 如何从请求中读取日文字符?

    python - Django 调试服务器的代码覆盖率

    django - Django 1.8 中的生产和开发数据库

    python - 运行 django 教程测试失败 - 没有名为 polls.tests 的模块

    node.js - Redis time() 有时会返回 future 的时间

    ruby-on-rails - 快速将多个项目(1000/秒)添加到 sidekiq 队列?

    django - 如何组合 Redis 和 Django-rest-framework 中的值

    django - Python 2.7 和 3.7.2 兼容的 django-redis 序列化器