Rumah pembangunan bahagian belakang tutorial php PHP 资料缓存数组的实现

PHP 资料缓存数组的实现

Jun 13, 2016 pm 01:22 PM
data query quot

PHP 文件缓存数组的实现

在一个试验性项目中,我需要从 sqlite3 数据库中随机读取一条记录给用户,要读取的数据表现在有23850条记录,按 skemu 分类,一般每个 skemu 下有 3000多条记录,原先我使用了 sqlite3 的随机查询语句:

 

$query="SELECT * FROM shiti WHERE skemu = " . intval($kemuid) . " order by random() limit 1";
Salin selepas log masuk

然后在我现在用的电脑上没有感觉到明显迟延,但当我把服务器换到一个 P4 1.8G 512M内存的机器上运行时,感觉数据读取速度非常慢,需要2、3秒才能读出数据。如果每次用户要取一条随机记录,都执行这样一个随机查询的话,瓶颈将会出现在数据库查询过程中,难以想像这样的性能如何来适应众多用户的同时访问。为此,我考虑减少数据库的查询次数,先把记录 id 取出来放到数组中,然后从中再来随机取一条记录,同时存为文件供以后读取,这样以减少数据库查询的次数。

以下函数实现读出 id 集:

 static function getIDs($kemuid)
 {
  $cachefile="cache/" . $kemuid . ".cache";
  $datas=array();
  if (!file_exists($cachefile)||time() < (filemtime($cachefile) + 14400)) 
  //缓存不存在或超过4小时
  {
   global $data;
   //读取 id 集
   $query="SELECT sid FROM shiti WHERE skemu = " . intval($kemuid);
   $res = $data->query($query);
   while($r = $data->fetchArray($res))
   {
    $datas[]=$r['sid'];
   }
   //写入缓存
   file_put_contents($cachefile,serialize($datas));   
  }
  else
  {
   //读出缓存
   $fp = fopen($cachefile,'r');//读   
   $datas = unserialize(fread($fp,filesize($cachefile)));//反序列化,并赋值  
  }
  return $datas;
 }
Salin selepas log masuk

<span style="font-family:Arial"><span style="color:#548dd4"><span style="color:#366092">调用它的读取随机记录函数:</span></span></span>

static function getRondam($kemuid)
 {
  global $data;
  $ids=self::getIDs($kemuid);
  $index=rand(0,count($ids)-1);
  $id=$ids[$index];
  $query="SELECT * FROM shiti WHERE sid = " . intval($id);
  $res = $data->query($query);
  $r = $data->fetchArray($res);
  $r['da']=$s;
  return $r;
 }

Salin selepas log masuk

<span style="font-family:Arial">这样比每次执行随机查询快多了,但是还是要比生成一个HTML缓存要慢一点,但那样需要把更多数据暴露给客户端,或是存储更多缓存,我想这已经是一个比较均衡的方案了。</span>

<span style="font-family:Arial"></span> 

<span style="font-family:Arial">这个解决办法的要点在于数组的序列化与反序列化,大家应该很容易看得懂。</span>

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menyusun semula berbilang lajur dalam Power Query melalui seret dan lepas Cara menyusun semula berbilang lajur dalam Power Query melalui seret dan lepas Mar 14, 2024 am 10:55 AM

Dalam artikel ini, kami akan menunjukkan kepada anda cara menyusun semula berbilang lajur dalam PowerQuery dengan menyeret dan melepaskan. Selalunya, apabila mengimport data daripada pelbagai sumber, lajur mungkin tidak berada dalam susunan yang diingini. Menyusun semula lajur bukan sahaja membolehkan anda menyusunnya dalam susunan logik yang sesuai dengan keperluan analisis atau pelaporan anda, ia juga meningkatkan kebolehbacaan data anda dan mempercepatkan tugas seperti menapis, mengisih dan melakukan pengiraan. Bagaimana untuk menyusun semula berbilang lajur dalam Excel? Terdapat banyak cara untuk menyusun semula lajur dalam Excel. Anda hanya boleh memilih pengepala lajur dan seret ke lokasi yang dikehendaki. Walau bagaimanapun, pendekatan ini boleh menjadi rumit apabila berurusan dengan jadual besar dengan banyak lajur. Untuk menyusun semula lajur dengan lebih cekap, anda boleh menggunakan editor pertanyaan yang dipertingkatkan. Mempertingkatkan pertanyaan

Pemalam pangkalan data React Query: cara mengimport dan mengeksport data Pemalam pangkalan data React Query: cara mengimport dan mengeksport data Sep 26, 2023 pm 05:37 PM

Pemalam pangkalan data ReactQuery: Kaedah untuk melaksanakan import dan eksport data, contoh kod khusus diperlukan Dengan aplikasi ReactQuery yang meluas dalam pembangunan bahagian hadapan, semakin ramai pembangun mula menggunakannya untuk mengurus data. Dalam pembangunan sebenar, kita selalunya perlu mengeksport data ke fail tempatan atau mengimport data daripada fail tempatan ke dalam pangkalan data. Untuk melaksanakan fungsi ini dengan lebih mudah, anda boleh menggunakan pemalam pangkalan data ReactQuery. Pemalam pangkalan data ReactQuery menyediakan satu siri kaedah

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Bagaimana untuk memisahkan data kepada NTFS menggunakan Power Query Bagaimana untuk memisahkan data kepada NTFS menggunakan Power Query Mar 15, 2024 am 11:00 AM

Artikel ini akan memperkenalkan cara menggunakan PowerQuery untuk memisahkan data kepada baris. Apabila mengeksport data daripada sistem atau sumber lain, adalah perkara biasa untuk menghadapi situasi di mana data disimpan dalam sel yang menggabungkan berbilang nilai. Dengan PowerQuery, kami boleh membahagikan data sedemikian ke dalam baris dengan mudah, menjadikan data lebih mudah untuk diproses dan dianalisis. Ini boleh berlaku jika pengguna tidak memahami peraturan Excel dan secara tidak sengaja memasukkan berbilang data ke dalam sel, atau jika data tidak diformat dengan betul semasa menyalin/menampalkannya daripada sumber lain. Memproses data ini memerlukan langkah tambahan untuk mengekstrak dan menyusun maklumat untuk analisis atau pelaporan. Bagaimana untuk memisahkan data dalam PowerQuery? Transformasi PowerQuery boleh berdasarkan pelbagai faktor berbeza seperti perkataan

Apakah data yang terdapat dalam folder data? Apakah data yang terdapat dalam folder data? May 05, 2023 pm 04:30 PM

Folder data mengandungi data sistem dan program, seperti tetapan perisian dan pakej pemasangan Setiap folder dalam folder Data mewakili jenis folder storan data yang berbeza, tidak kira sama ada fail Data merujuk kepada nama fail Data atau sambungan data , semuanya adalah fail data yang disesuaikan oleh sistem atau program Data ialah fail sandaran untuk penyimpanan data Secara umumnya, ia boleh dibuka dengan meidaplayer, notepad atau word.

Apa yang perlu dilakukan jika data beban mysql bercelaru? Apa yang perlu dilakukan jika data beban mysql bercelaru? Feb 16, 2023 am 10:37 AM

Penyelesaian kepada data beban mysql yang bercelaru: 1. Cari pernyataan SQL dengan aksara yang bercelaru;

Apakah perbezaan antara xdata dan data? Apakah perbezaan antara xdata dan data? Dec 11, 2023 am 11:30 AM

Perbezaannya ialah: 1. xdata biasanya merujuk kepada pembolehubah bebas, manakala data merujuk kepada keseluruhan set data 2. xdata digunakan terutamanya untuk membina model analisis data, manakala data digunakan untuk analisis data dan statistik; untuk Analisis regresi, analisis varians, pemodelan ramalan, data boleh dianalisis menggunakan pelbagai kaedah statistik 4. xdata biasanya memerlukan prapemprosesan data, dan data boleh mengandungi data asal yang lengkap;

Pemalam Pangkalan Data Pertanyaan React: Strategi untuk Sandaran dan Pemulihan Data Pemalam Pangkalan Data Pertanyaan React: Strategi untuk Sandaran dan Pemulihan Data Sep 28, 2023 pm 11:22 PM

Pemalam pangkalan data ReactQuery: Strategi untuk melaksanakan sandaran dan pemulihan data, contoh kod khusus diperlukan Pengenalan: Dalam pembangunan web moden, sandaran dan pemulihan data adalah tugas yang sangat penting. Terutama apabila menggunakan alat pengurusan negeri seperti ReactQuery, kami perlu memastikan keselamatan dan kebolehpercayaan data. Artikel ini akan memperkenalkan pemalam pangkalan data berdasarkan ReactQuery untuk melaksanakan strategi sandaran dan pemulihan data serta memberikan contoh kod khusus. ReactQu

See all articles