1

姜戈 2.2

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

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

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

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

或者这甚至是一个好主意?

我的安装是:

更新

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

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

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

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

4

1 回答 1

1

由于我们在评论中进行了问答,我可能会给出完整的答案。

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

  • 您需要获取整体价值,这可能会导致网络问题。尤其是当流量变高时,每个人都会获取那块数据。
  • 如果要更新/删除某些行,则需要(get+update+set)/将它们设置为整体(再次网络)
  • 您不能使价值的某些部分无效。
  • 你不能设置部分 TTL - 你要么过期/保留整个。

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

由于您不需要分页并希望将它们保存在一个键中,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您可以通过缓存中的单个行删除。您仍然可以通过 using 获取所有数据hgetall。哈希字段没有部分 TTL(排序集在应用层有一些代码),但哈希比字符串更适合您的用例。

于 2020-05-27T18:28:14.280 回答