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

Is it a good idea to use cache and how to use it for 4000-10000 data rows in Django for a single page?

Django 2.2

我需要从特定数据表(我们称之为 commonsites)中获取 4000-10000 行数据以显示网页。

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

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

这些行的数据不太可能更改。但是万一它们确实发生更改或被删除,我如何 update/remove 缓存中的个别行,而不是整个缓存?

或者这甚至是个好主意?

我的安装是:

更新

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

所以这些数据行是预先存在的数据。

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

需要说明的是,数据不会分页。都会显示出来。而且我没有测量数据大小,所以我不能说数据有多大。我怀疑它不会超过 5mb。

既然我们q/a在评论里,我可能会给出一个完整的答案。

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

  • 您需要整体获取值,这可能会导致网络问题。特别是当流量越来越大的时候,每个人都会去获取那块数据。
  • 如果你想update/delete一些行,你需要(get+update+set)/set them as whole (network again)
  • 您不能使值的某些部分无效。
  • 您不能设置部分 TTL - 您要么 expire/persist 整个。

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?

由于您不需要分页并希望将它们保存在一个键中,因此您可以使用 hash 来代替 string 来满足上面列出的条件。

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一次更新single/multiplerow/s。您可以通过 hdel 从缓存中删除单个行。您仍然可以通过使用 hgetall 将所有数据作为单个数据获取。哈希字段没有部分 TTL(排序集在应用程序层有一些代码)但哈希比字符串更适合您的用例。