Lưu Cart đâu cho hợp lí
Em đang có làm 1 dự án website bán hoa sử dụng java spring boot. Em đang làm chức năng shopping cart thì hồi trước em lưu cart vào database nhưng thầy em nói làm thế thì chỉ dành cho dự án nhỏ thôi và nếu 100 người truy cập cùng lúc là tiêu. Thì không biết các anh chị ở ngoài thường dự án công ty thực tế hay cá nhân mọi người sẽ lưu cart vào đâu và xử lí cho hợp lí nhất ạ ?
5 CÂU TRẢ LỜI
Chào bạn!
Hehe, lưu cart vào database cho dự án nhỏ thì ổn rồi, nhưng nếu 100 anh chị em cùng lúc vào mua hoa thì database bạn sẽ khóc thét đấy!
Thay vì lưu cart vào database, bạn nên xem xét sử dụng Redis hoặc Memcached. Hai ông này chuyên về việc lưu trữ dữ liệu tạm thời, xử lý truy cập đồng thời rất tốt và tốc độ thì "bá đạo" luôn.
Redis có nhiều tính năng hay ho như list, set, hash, rất phù hợp để lưu thông tin cart của khách hàng.
Memcached cũng là một lựa chọn khá ổn, tốc độ nhanh nhưng có hạn chế hơn Redis về tính năng.
Bạn có thể dùng Spring Data Redis để làm việc với Redis một cách dễ dàng trong Spring Boot.
Gợi ý:
- Sử dụng Redis để lưu thông tin cart của người dùng dưới dạng hash hoặc json.
- Sử dụng session ID để phân biệt cart của từng người dùng.
- Thiết kế cấu trúc dữ liệu cart (sản phẩm, số lượng, giá...) cho phù hợp
Mong là bạn sẽ không làm database phải khóc nữa nhé!
😉 Nên sử dụng Redis để lưu, vì ưu điểm nó truy xuất nhanh và có thể mở rộng dễ dàng 👍️. Tuy nhiên cần quản lý khi nào thì dữ hết hạn để backup dữ liệu xuống Database và làm mới lại vùng nhớ trên Redis.
🚀 Happy coding !!!
Tùy theo mục đích của dự án mà mình có thể lựa chọn lưu vào database hay trên Redis.
Chọn database kết hợp với redis:
- Nếu muốn keep dữ liệu lâu dài thì sẽ chọn cách lưu luôn vào Database, phục vụ cho việc phân tích, truy xuất dễ dàng sau này chẳng hạn, mình có làm qua một số dự án về ecommerce thì thường vẫn chọn cách lưu vào database kết hợp với redis cache để giảm tải cho server. Ngoài ra các giỏ hàng của user sau bao nhiêu ngày đó không có action gì thì có thể xóa định kỳ đi để giảm records trong DB.
- Nếu 100 người truy cập cùng lúc là tiêu -> ý này mình thấy chưa đúng, cho dù 100 hay 1000 người thì vấn đề là truy xuất vào DB nhiều, gây tải cao cho DB thôi chứ cart là của mỗi user nên việc select, insert, delete, update cart sẽ không tốn bao nhiêu thời gian cả với lại hệ thống lớn thì thường sẽ có chiến lược scaling hợp lý nên không phải lo vấn đề select, insert, delete, update cart mà tèo DB.
cách cổ điền thì lưu vào cookie thôi.
phức tạp hơn thì lưu vào local storage
phức tạp hơn nữa thì lưu vào sql db. Việc xử lý lượng truy cập lớn là việc riêng. Lưu luôn vào memory chứ cũng ko cần redis cho to chuyện.