Hỏi về cache trên server 2007-07-15 15:31:27
TG và các bạn có ai có tutorial nào sử dụng cache không share mình với. Mình đang code một trang tin tức, nhưng nếu query nhiều quá sợ chậm hoặc ai có ý flood thì chết server mất.
Cám ơn các bạn.
Cám ơn các bạn.
Tra loi 38 comment(s) 2007-07-15 15:31:27
TG 2007-07-15 15:15:38
Cách 1:
- Mỗi khi truy cập 1 bài viết(index.php?id=ID) thì thực hiện 2 thao tác sau:
+ kiểm tra có file ID.html trên server chưa, nếu đã có rồi thì lấy nội dung file đó sử dụng lại, nếu chưa thì query databse lấy nội dung sau đó tạo file ID.html có nội dung là nội dung query từ database.
+ Xóa cache định kỳ(1 ngày,2 ngày,..)
Cách 2:
- Tạo các file cache trước cho tất cả các bài viết (ví dụ đặt cron job cho server tự tạo lúc 12h đêm) và người dùng truy cập thì server sẽ lấy nội dung từ các file cache mà không cần query và database
+ Xóa cache định kỳ(1 ngày,2 ngày,..)
Về ưu/nhược điểm:
ưu: do các file cache được tạo trước nên server không phải query lại mysql->tốc độ nhanh và an toàn hơn cho dữ liệu
nhược:
cách 1: khi truy cập đến 1 bài có ID mà chưa có file cache(ID.html chưa tồn tại) thì server tốn thời gian query->chậm trong lần đầu truy cập bài đó, còn cách 2 thì tất cả các file cache đã được tạo nên không bị nhược điểm này.
cách 2:dung lượng ỗ đĩa chứa file cache lớn hơn, do tất cả file cache đều được tạo, nếu vì lí do gì đó file ID.html bị xóa thì bài viết đó sẽ không truy cập được trong ngày hôm đó, trong khi đó với cách 1 thì file nào không ID.html nào không tồn tại thì được xử lý như lần đầu truy cập.
Về việc cache thành file .xxx là do người code, có thể là 1 file .html,.php,.xml... điều đó phụ thuộc vào cách xử lý riêng của mỗi lâp trình.
Về xóa file cache định kỳ, có thể dùng cronjob của server đê tự clear sau 1 khoảng thời gian nhất định hoặc chỉ dùng code
Đây là vài kinh nghiệm về cache, anh em tham khảo, và cùng thảo luận cache theo cách nào là phù hợp nhất
Tra loi
Lamborghini 2007-07-15 15:21:48
Theo em, nếu dùng ajax có lẽ nên cache thành file .xml
Tra loi
TG 2007-07-15 15:25:46
Tra loi
Sữa 2007-07-15 15:33:25
Tra loi
TG 2007-07-16 16:49:03
Tra loi
darkera13 2007-07-16 16:36:03
Tra loi
TG 2007-07-16 16:44:34
thì bạn cũng phải cache nó lại thành file .php,.html,... thôi, thứ 1: đã là cache là phải lưu ra file,
thứ 2: cache là mình sẽ giữ lại phần dữ liệu đã được complie trừ các thông tin về thông tin đăng nhập, cái này phụ thuộc vào cách code của coder và mục tiêu của cache là hạn chế query database, còn giảm bớt thời gian complier là 1 phần thôi.
Tra loi
pdh 2007-07-16 16:33:37
Tra loi
Lamborghini 2007-07-16 16:14:44
em cũng thích tự viết nhưng cũng nên tham khảo để có ý tưởng.
bây giờ xuất hiện một xu hướng dùng XML làm cơ sở dữ liệu. Em nghĩ ra một ý tưởng (có lẽ hơi ngu) là cache các query, dữ liệu của SQL vào XML, sau đó dùng một query khác lấy dữ liệu từ XML.Khi dữ liệu SQL thay đổi thì dữ liệu XML cũng thay đổi. Như vậy có thể truy vấn nhanh hơn, cũng bảo mật hơn(!?).Nhưng coder sẽ mệt.
By the way, anh TG share luôn code PHPBS phiên bản 2 này đi.
Tra loi
darkera13 2007-07-16 16:21:52
thứ 2: cache là mình sẽ giữ lại phần dữ liệu đã được complie trừ các thông tin về thông tin đăng nhập, cái này phụ thuộc vào cách code của coder và mục tiêu của cache là hạn chế query database, còn giảm bớt thời gian complier là 1 phần thôi.
Dạ nhưng mà em nói bác biết bác cache template thì sẽ khác bác ạ, 1 site khoảng 100~200 template file thoai.
Nhưng bác cache theo như bố TG chắc chít quá, mỗi 1 bài viết cache 1 file. Giả sử trang tin của bác có cả triệu bài viết hãy tưởng tượng điều gì xảy ra hử :D
Tra loi
darkera13 2007-07-16 16:24:28
Cái nỳ thằng phpBB3 cũng có luôn, cache SQL Query.
Tra loi
TG 2007-07-16 16:46:09
Tra loi
kirk 2007-07-17 17:29:16
Tra loi
TG 2007-07-17 17:51:10
cái này phụ thuộc rất nhiều vào cách code của bạn, TG viết 1 đoạn demo theo cách của TG.Giả sử mõi bài viết sẽ có url dạng index.php?id=ID, và file cache tương ứng là ID.php
Code mẫu:
<?php
$id = $_GET['id'];
if(file_exists($id.'.html')) {
include($id.'.html');
exit();
}else{
ob_start(); // điểm bắt đầu của file cache
// Query dữ liệu in nội dung website như bình thường
$content = ob_get_contents(); // lấy phần nội dung đã in ra
ob_clean();
//tạo file
$fp= fopen($id.'.html','w');
if($fp) fwrite($fp,$content);
fclose($fp);
}
?>
Hy vọng ví dụ nhỏ này giúp bạn hình dung được sơ lược về việc cache
Tra loi
kirk 2007-07-18 18:28:00
Tra loi
G.K 2007-07-29 03:09:26
Có gì đâu mà chết, sao mà suy nghĩ thiển cận vậy. Check thời gian rồi sau đó xóa đi những entry ko đc truy cập là xong.
Tốt nhất là nên kết hợp với cache bằng trình duyệt + cache template + lưu file. Đó là cách làm hiện tại của 1 vài báo điện tử.
Tra loi
heosuaquay 2007-09-07 03:49:17
Tra loi
toiyeuphp 2007-09-07 09:20:55
Tra loi
GnuhNguyen 2007-12-08 06:05:47
Tra loi
changtraingheo 2007-12-09 11:15:47
Tra loi
cb_dethuong 2007-12-10 01:19:46
Chỉ khi nào làm trang dạng tin tức hay bài viết thì mới làm. Nếu dùng cache thì mình chỉ làm cho những tin hay bài viết mới nhất mỗi hạng mục hay modules, còn nếu các bài cũ thì dùng truy vấn
Tra loi
Phong Trần 2008-01-03 01:03:32
1. Cache query: chỉ kết các kết quả lấy từ DB ra file, dùng cho loại dữ liệu hay thay đổi
2. Static Cache: Cache khối thành các file tĩnh (như file HTML) dùng cho loại dữ liệu ít thay đổi (như chuyên mục tin chẳng hạn)
3. MemCache: Lưu nội dung cache vào RAM nhằm tăng tốc độ lấy dữ liệu. Đây là cách cache hiệu quả nhất mà các site lớn đang dùng.
Tra loi
cocbay 2008-01-03 08:43:31
Tra loi
tutt 2008-01-11 01:19:02
Hiện server đang chết, đang chuyển server, nên không truy cập được trang này đâu nhá.
Tra loi
Về Đâu 2008-01-11 08:24:40
Tra loi
web20vn.com 2008-01-11 06:07:58
Tra loi
chuột jerry 2008-01-16 11:05:32
Trang 1 có các mẫu tin D,C,B. Trang 2 có mẫu tin A. RỒi lở tôi thêm mẫu tin E vào. Thì trang 1 có E,D,C. TRang 2 có B,A thì làm sao
Tra loi
TG 2008-01-16 03:02:39
Tra loi
123456 2008-02-19 11:27:07
Đọc các file cache vào 1 mảng (lưu tên file, không cần phần đuôi file) và so sánh với các ID bài viết trong data. chắc chắn mảng lưu ID trong data nhiều hơn mảng tên file đã cache; so sánh 2 mảng, nếu:
- nhau thì ko có gì pải nói, phân trang theo mảng file or ID
- nếu mảng tên file hơn (database đã xóa đi 1 số bài) thì tùy theo, sẽ view và phân trang theo mảng tên file cache. nên xóa file đã cache khi xóa 1 news <-- sẽ không có trường hợp này.
- nếu (chắc chắn) mảng ID lớn hơn (điều đang bàn), có thể làm:
+ cache bài mới rồi phân trang theo mảng file đã cache. hoặc:
+ phân trang theo mảng ID và khi view thì có thể theo file cache hoặc load từ data.
CY: tên file cache và ID bài viết là trùng nhau nên khi phân trang ta ko nên bận tâm nhiều mà khi view kiểm tra nếu cache rồi thì include, còn chưa thì cache rồi include hoặc load trực tiếp. :)
Tra loi
montecristo 2008-03-16 12:00:56
Các bạn có thể nói rõ hơn về kiểu Memcache được không.
Tra loi
tranthanhtu888@yahoo.com 2008-10-22 03:52:33
Install and Config php.ini http://bnok.vn/hungbo/2008/08/25/installing-memcache-on-windows-for-php/
Vào php.net xem hướng dẫn dùng memcache, very easy.
Tra loi
thích học hỏi 2009-05-12 02:15:37
Bạn ơi cho mình xin đoạn cronjob để xoá cache của server với, hoặc chỉ dùng code là sao hả bạn ?
Tra loi
TG 2009-05-13 01:55:41
Tra loi
thích học hỏi 2009-05-14 02:49:44
Tra loi
cac cac cac cac cac cac cac cac cac 2009-08-05 10:40:01
Tra loi
Tống Kiện Phi 2009-08-05 11:00:27
p/s cac: mày đi ăn cứt đi
Tra loi
Alex 2009-08-31 01:44:24
Ví dụ:
$stylecache = array (
-1 =>
array (
1 =>
array (
0 =>
array (
'styleid' => '1',
'title' => 'Default Style',
'parentid' => '-1',
'displayorder' => '1',
'userselect' => '1',
),
),
),
);
### end stylecache ###
### start languagecache ###
$languagecache = array (
1 =>
array (
'languageid' => '1',
'title' => 'English (US)',
'userselect' => '1',
),
);
### end languagecache ###
Khi load trang lên, nó vào trang này đọc ra cho bên ngoài, Ai rành hơn về vbulletin xin cho thêm thông tin.
Thank:)
Tra loi
duy 2009-10-01 04:25:49
Tra loi
Y kien