- vừa được xem lúc

Tối ưu tính lượt view cho website sử dụng Redis

0 0 11

Người đăng: Hoài Long

Theo Viblo Asia

Trong quá trình xây dựng web Toidicafe.vn - Website tổng hợp và đánh giá quán cafe đẹp ở Hà Nội, mình có 1 task là tính lượt view của mỗi quán cafe để dựa vào đó đề xuất các quán nổi bật, được nhiều người quan tâm. Đây là cách mình đã làm, mọi người có cách hay hơn thì chia sẻ nhé!

Xây dựng ý tưởng

Luồng xử lý cơ bản sẽ là ở database mỗi quán cafe sẽ có 1 cột view, mỗi khi người dùng truy cập vào trang chi tiết quán, sẽ update database tăng biến view lên 1. Truy nhiên, cách này sẽ không được tối ưu, mình sẽ phải connect vào database và đọc ghi liên tục, gây tốn tài nguyên server.

Ý tưởng của mình là dùng Redis để ưu lại lượt view của từng quán cafe và tạo 1 job cập nhật lượt view từ redis vào database. Redis là gì và công dụng của nó thì các bạn có thể tham khảo ở đây

Code thôi

Mình sử dụng backend là Nodejs, và đây là code mình đã làm:

Tạo function tăng biến view và gọi mỗi lần truy cập và chi tiết quán cafe đó:

async function incViewCountPlace(placeId) { const count = await promisify(cb => client.get(`placeview_${placeId}`, cb)); client.set(`TDCF_placeview_${placeId}`, count ? parseInt(count) + 1 : 1);
}

Tạo cronjob để cập nhật lượt view từ redis và database:

const job = schedule.scheduleJob('0 0 * * * *', async function(){ const keys = await promisify(cb => client.keys(`placeview_*`, cb)); await Promise.all(keys.map(async key => { const id = key.split('_')[1]; const place = await Place.findById(id, 'view').lean(); const views = place.view || 0; const newViews = await promisify(cb => client.get(key, cb)); const total = views + parseInt(newViews); await Place.findByIdAndUpdate(id, {view: total}); })) client.del(keys); console.log(`${moment().format('DD/MM/YYYY HH:mm:ss')}: Run save place view job!`); });

Chia sẻ

Trên đây là cách mình đã làm để tính lượt view cho website, cách này cũng chưa hẳn tối ưu và nó sẽ tốn Ram hơn 1 chút nhưng mình thấy nó ổn hơn là cách thông thường, mình là sinh viên vừa ra trường kinh nghiệm cũng chưa được nhiều có gì các tiền bối và mọi người góp ý và chia sẻ kinh nghiệm nhé! Tiện thể Toidicafe.vn là sản phẩm đồ án tốt nghiệm của mình, công dụng của nó là giúp mọi người tìm kiếm được quán cafe dễ dàng hơn theo vị trí, nhu cầu mục đích, các bác vào trải nghiệm để ủng hộ mình nhé.

Cảm ơn đã đọc bài😍

Bình luận

Bài viết tương tự

- vừa được xem lúc

Caching đại pháp 2: Cache thế nào cho hợp lý?

Caching rất dễ. Mình không nói đùa đâu, caching rất là dễ. Ai cũng có thể làm được chỉ sau 10 phút đọc tutorial. Nó cũng giống như việc đứa trẻ lên 3 đã có thể cầm bút để vẽ vậy.

0 0 126

- vừa được xem lúc

Caching đại pháp 1: Nấc thang lên level của developer

Bí quyết thành công trong việc đáp ứng hệ thống triệu user của những công ty lớn (và cả công ty nhỏ). Tại sao caching lại là kỹ thuật tối quan trọng để phù phép ứng dụng rùa bò của chúng ta thành siêu phẩm vạn người mê.

0 0 82

- vừa được xem lúc

Cache dữ liệu Nodejs với Redis

Một tí gọi là lý thuyết để anh em tham khảo. Cache là gì. Lợi ích của việc cache data. .

0 0 111

- vừa được xem lúc

Nguyên tắc hoạt động của redis server

Sự ra đời của Redis. . Câu chuyện bắt đầu khi tác giả của Redis, Salvatore Sanfilippo. (nickname: antirez), cố gắng làm những công việc gần như là không.

0 0 97

- vừa được xem lúc

Viết ứng dụng chat realtime với Laravel, VueJS, Redis và Socket.IO, Laravel Echo

Xin chào tất cả các bạn, đây là một trong những bài post đầu tiên của mình. Sau bao năm toàn đi đọc các blog tích luỹ được chút kiến thức của các cao nhân trên mạng.

0 0 918

- vừa được xem lúc

Tìm hiểu tổng quan về Redis

1. Lời mở đầu.

0 0 368