10000个数据行?

zsohkypk  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(351)

django 2.2型
我需要从一个特定的数据表中获取4000-10000个数据行(我们称之为 commonsites )其中包括显示网页。
我可以缩小到4000-10000行中的3个字段(id、name、business\u id)
我的流量很小。但是我想知道使用缓存来获取这些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调用将从datatable获取这些4000-10000个数据行。
所以这些数据行是预先存在的数据。
数据作为api json数据作为json数据中的列表发送。
为了清楚起见,数据不会分页。它将全部显示出来。我还没有测量数据的大小,所以我不能说数据有多大。我怀疑它会超过5mb。

o7jaxewo

o7jaxewo1#

既然我们在评论中有问答,我可以给出一个完整的答案。
在一个字符串中保留~4k-10k行可能不是一个好的做法。但你不打算在前端分页。即使您将参数的数量减少到 id , name , business_id -对于这样的行数,它可能不好,原因如下:;
您需要获得整个值,这可能会导致网络问题。尤其是当流量越来越大的时候,每个人都会获取这一大块数据。
如果要更新/删除某些行,则需要(get+update+set)/将它们作为一个整体(再次连接网络)
不能使值的某些部分无效。
你不能设置部分ttl-你要么终止/保留整个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 缓存中的单个行。您仍然可以使用 hgetall . hash字段没有部分ttl(排序集在应用层有一些代码),但是hash比字符串更适合您的用例。

相关问题