dongtong848825 2013-08-14 08:03
浏览 195
已采纳

PHP:如何在redis中缓存一个大表?

Assume, that I have a big (MySQL-)table (>10k rows) with id -> string. I can put them all in an array and cache this array. But the question ist: How to cache it efficiently?

a) Cache it as one big item. So I will execute

$redis->set("array", $array);

Quite short and easy. But for every entry I need, I have to fetch the whole thing. Absolutely inefficient.

b) Cache every entry itself:

foreach( $array as $id => $str )
  $redis->set( "array:$id", $str );

Using this way, I will have >10k entries in Redis. That doesn't feel good. If I have 10 of these tables, i will have 100k entries....

So what's your proposal? How to cache a big array?

  • 写回答

2条回答 默认 最新

  • duanjiyun7391 2013-08-14 08:23
    关注

    Caching the big array only makes helpful if you're planning to retrieve it always as a whole. However cache invalidation will be a very "heavy" operation as anytime when you change something you have to invalidate the whole array and reread it from the DB.

    10k in redis is not much at all. You can have millions of entries without problem.

    I would go with the b) version. Cache every entry individually. Easier to maintain, simpler application code and smaller memory footprint from application side which gets more and more important when you want to scale your application.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办