Redisearch là gì? 2coffee.dev đang sử dụng redisearch làm cơ sở dữ liệu!

Redisearch là gì? 2coffee.dev đang sử dụng redisearch làm cơ sở dữ liệu!

Tin ngắn hàng ngày dành cho bạn
  • Manus đã chính thức mở cửa cho tất cả người dùng rồi đấy mọi người. Cho những ai chưa biết thì đây là một công cụ viết báo cáo (làm mưa làm gió) giống như Deep Research của OpenAI á. Mỗi ngày được miễn phí 300 Credits để nghiên cứu. Mỗi lượt nghiên cứu tiêu tốn tuỳ thuộc vào độ phức tạp của yêu cầu. À với cả họ đang có chương trình tặng miễn phí Credits hay sao á. Như mình thì vào thấy được hẳn 2000.

    Mình dùng thử, so sánh với cùng một lệnh giống như đợt trước dùng bên Deep Research thì nội dung khác biệt nhau hoàn toàn. Manus báo cáo như kiểu viết văn hơn so với OpenAI là các gạch đầu dòng và bảng biểu.

    À lúc đăng ký xong có bắt nhập số điện thoại để xác minh, nếu lỗi thì các bạn đợi qua ngày thử lại xem có được không nhé.

    » Xem thêm
  • Mọi người chắc nghe nhiều về xu hướng tìm kiếm thông tin bằng AI chứ không cần công cụ tìm kiếm như Google nữa rồi đúng không? Không đâu xa ánh xạ vào bản thân thì thấy đúng thật, thi thoảng mới tìm kiếm thôi chứ còn đâu toàn hỏi tụi AI.

    Ngay từ đầu viết blog, thứ mà mình hướng đến là chia sẻ kinh nghiệm chứ không phải là những bài mang nặng tính kỹ thuật, máy móc, hướng dẫn từ đầu... Vì thời điểm đó đã có quá nhiều người làm nội dung này rồi và họ làm rất tốt, tại sao mình phải cố phát minh lại bánh xe? Một điều nữa là tin tưởng độc giả của mình có khả năng tìm hiểu vấn đề. Nếu bạn đọc đủ nhiều các bài viết trên blog thì thấy mình luôn cố gắng chèn thêm các liên kết tham khảo ngoài bài viết, nêu ra vấn đề mở và rất ít khi kết luận chắc chắn một điều gì đó.

    Mình đã cố gắng rèn luyện kỹ năng viết, kỹ năng trình bày và cả cách tương tác với độc giả để mang lại giá trị cho họ. Nhiều lúc ngồi lật lại các con số thống kê thấy lượng đọc bài viết tăng lên lại cảm thấy vui. Nhưng khi nguồn truy cập đến từ Google thì lại thấy buồn, vì điều đó chứng tỏ họ biết đến mình chỉ khi đang cố đi tìm giải pháp, có thể họ chỉ đọc chớp nhoáng, may ra tìm được cách giải quyết và thế là đóng cửa sổ trình duyệt rồi đi như một cơn gió.

    Chừng vài tháng đổ lại đây, một điều khiến mình rất vui đó là lượng người truy cập thẳng vào trang chủ mà không thông qua công cụ tìm kiếm đang tăng dần lên, có nhiều hôm lượng truy cập tự nhiên còn cao hơn cả đến từ Google. Điều đó chứng tỏ độc giả đã có thói quen quay lại trang của mình nhiều hơn và họ tìm thấy được giá trị từ blog mang lại. Vui mừng khôn xiết 🤩

    Bên cạnh đó thì lượng truy cập vào chuyên mục Threads - tức là mục mình đang viết bài này đang cao hơn bao giờ hết. Điều đó chứng tỏ xu hướng đi theo tin nhanh là đúng đắn. Mình có thể ngồi cả ngày để viết tin ngắn cho bạn đọc vì nó rất nhanh mà tiện, không tốn công đi tìm tài liệu để viết, không tốn cả thời gian viết nữa, còn mình thì có rất nhiều thứ để chia sẻ 😅. Nhưng không vì thế mà bỏ bê các bài viết dài, vì dài thì có nhiều thông tin để chia sẻ hơn.

    Vài lời tâm sự thế thôi chứ hơn một tháng nay mình chưa viết bài viết mới nào vì công việc bận quá. Xong lâu dần cứ trì hoãn lại thành lười. À với cả tháng 5 này rất thích hợp để đọc các cuốn sách về cách mạng á. Có hôm đọc đến 2 giờ sáng mới đi ngủ 🥱

    » Xem thêm
  • Mình mới nhìn thấy một trang web khá thú vị nói về các cột mốc đáng nhớ trong lịch sử phát triển Internet toàn cầu: Internet Artifacts

    Chỉ từ 1977 - khi Internet còn nằm trong hộp thí nghiệm thì nhìn xem - giờ đây Internet đã khiến mọi thứ phát triển đến mức nào 🫣

    » Xem thêm

Vấn đề

Cơ sở dữ liệu là một phần không thể thiếu đối với các trang web hiện nay. Hầu hết chúng ta đều nghe qua hai trường phái là SQL và NoSQL. Mỗi bên đều có điểm mạnh - yếu riêng, tùy thuộc vào nhu cầu sử dụng mà lựa chọn sao cho hợp lý. Redis là một dạng NoSQL, thường được biết đến trong mục đích sử dụng cho việc cache dữ liệu.

Cho các bạn chưa biết trang blog của tôi đang sử dụng redisearch làm cơ sở dữ liệu. Redisearch là một module của redis. Trước khi đến với redisearch, tôi từng sử dụng mysql. Nhưng tại sao? Chuyển qua redisearch có khó khăn gì không và cách dùng redisearch có dễ không?... Hãy cũng tôi khám phá trong bài viết này nhé!

Redisearch là gì?

Redisearch là một module của redis cung cấp khả năng truy vấn, lập chỉ mục và khả năng tìm kiếm full-text mạnh mẽ. Bạn biết lệnh LIKE trong SQL chứ? Nó dùng để tìm kiếm dữ liệu phù hợp với một chuỗi tìm kiếm. LIKE có nhiều hạn chế trong SQL như tốc độ tìm kiếm trên tập dữ liệu lớn là không cao, hơn nữa với các loại tìm kiếm phức tạp như lỗi chính tả, gợi ý cụm từ... thì khó có thể mà làm được tốt hơn Redisearch.

Redisearch sử dụng "inverted indexes" cùng với "compressed" cho phép lập chỉ mục một cách nhanh chóng với chi phí bộ nhớ thấp. "inverted indexes" là loại chỉ mục lưu trữ ánh xạ từ nội dung, chẳng hạn như từ hoặc số, đến vị trí của nó trong bảng hoặc trong tài liệu hoặc một bộ tài liệu. Mục đích của nó là cho phép tìm kiếm "toàn văn bản" nhanh chóng. Cùng với công nghệ "compressed" của họ để giảm chi phí lưu trữ.

Nếu như trước đây bạn đã từng sử dụng redis phục vụ cho việc cache dữ liệu thì giờ đây redisearch được sinh ra vừa kế thừa được tốc độ, đồng thời cung cấp khả năng truy vấn cực kì mạnh mẽ.

Tại sao tôi lựa chọn redisearch?

Đặc thù của một trang blog là đọc dữ liệu nhiều hơn việc ghi, vì thế tôi luôn ưu tiên cho việc lấy dữ liệu ra làm sao cho nó nhanh chóng và chính xác nhất. Đồng thời với một cấu hình server khiêm tốn chỉ 1CPU 1GB RAM thì càng phải tối ưu bộ nhớ và tốc độ xử lý cho hệ thống.

Như đã nói ở trên trước khi tôi có sử dụng mysql. Nói về độ ổn định thì mysql cho tính ổn định rất cao, khả năng truy vấn dữ liệu cũng rất tốt. Có điều nó sử dụng tương đối nhiều bộ nhớ, kèm theo đó khả năng tìm kiếm full-text chưa được mạnh mẽ khi tôi yêu cầu chức năng tìm kiếm là chủ lực cho blog.

Redisearch thì tôi nghe danh đã lâu nhưng chưa có cơ hội tìm hiểu, sẵn tiện đang đi tìm giải pháp cho vấn đề trên thì tôi có bắt tay vào nghiên cứu luôn xem có thể áp dụng vào dự án được không. Thì quả nhiên không nằm ngoài mong đợi, redisearch hoàn toàn đáp ứng được.

Thoạt đầu tôi chỉ dự định dùng thêm redisearch như một cơ sở dữ liệu thứ 2 chỉ dành cho việc tìm kiếm full-text, nhưng sau đó tôi phát hiện ra so với redis thì redisearch còn đáp ứng được cả khả năng lưu trữ lẫn truy xuất dữ liệu, hoàn toàn có thể thay thế mysql.

Redisearch đang trong quá trình hoàn thiện để đón nhận nhiều hơn từ phía cộng đồng. Vì thế các vấn đề phát sinh trong quá trình di chuyển từ mysql sang redisearch lúc đầu cũng gặp nhiều khó khăn. Song, tài liệu trên trang chủ của redisearch khá là đầy đủ nên hầu hết các vấn đề mà tôi gặp phải đều được giải quyết.

Sử dụng redisearch như thế nào?

Cài đặt redisearch

Việc đầu tiên bạn cần làm là cài đặt redisearch. Có nhiều cách để cài đặt redisearch như cài qua docker, thông qua bộ cài đặt hoặc build from source.

Để cài đặt qua docker bạn dùng lệnh:

docker run -p 6379:6379 redislabs/redisearch:latest

Hoặc bạn có thể xem tất cả các cách khác ở Quick Start Guide for RediSearch.

Tạo một index

Chúng ta cần tạo một index trước khi sử dụng nó để tìm kiếm. Index đóng vai trò cho việc lập chỉ mục và tìm kiếm.
Sử dụng lệnh FT.CREATE để tạo một index.

Ví dụ tôi tạo một index có tên là article lưu trữ các bài viết:

FT.CREATE article ON HASH PREFIX 1 article: SCHEMA url TAG SEPARATOR "," title TEXT content WEIGHT 5.0 TEXT created_at NUMERIC SORTABLE

Index article được lưu trữ trong kiểu dữ liệu HASH có key bắt đầu bằng article gồm có các trường dữ liệu: url có kiểu TAG, titlecontent có kiểu dữ liệu là TEXT và created_at là NUMERIC để lưu ngày tạo bài viết dạng unix timestamp.

Redisearch hỗ trợ kiểu dữ liệu trong các field gồm có TEXT, NUMERIC và TAG, các TAG có thể liên tưởng nó như là các khóa chính (Primary Keys) trong các cơ sở dữ liệu SQL.

Đặt WEIGHT để xác định tầm quan trọng của field, WEIGHT càng cao thì khi tìm kiếm sẽ càng được ưu tiên. Ngoài ra nếu muốn dữ liệu được sắp xếp trong khi truy vấn thì phải khai báo thêm SORTABLE.

Thêm dữ liệu vào index

HSET article:1 url "hello-word" title "hello world" content "lorem ipsum" created_at 1630245601
HSET article:2 url "hello-word-2" title "hello world 2" content "lorem ipsum 2" created_at 1630245602
HSET article:3 url "hello-word-3" title "hello world 3" content "lorem ipsum 3" created_at 1630245603

Query

Redisearch cung cấp cơ chế tìm kiếm theo các trường dữ liệu, chúng ta có thể tìm kiếm chính xác, tìm kiếm các từ, cụm từ với sự kết hợp của các phép OR, AND, NOT... trong câu truy vấn.

Xem tất cả cú pháp mà Redisearch hỗ trợ tìm kiếm tại Search Query Syntax .

Để query theo trường dữ liệu, sử dụng cú pháp @field kèm theo phía sau là dữ liệu cần tìm kiếm. Ví dụ:

Tìm kiếm chính xác theo url:

FT.SEARCH article @url:{ hello-world }

Tìm kiếm full-text cụm từ hello world:

FT.SEARCH article @url:"hello world"

Tìm kiếm bài viết có created_at lớn hơn 1630245602:

FT.SEARCH article @created_at:[(1630245602 inf]

Lấy ra tất cả bài viết và sắp xếp theo created_at giảm dần:

FT.SEARCH article * SORTBY created_at DESC

Dữ liệu vào redisearch sẽ được phân tích và làm mịn theo một vài quy tắc. Ví dụ như các kí tự đặc biệt khi được đánh index sẽ bị bỏ qua nếu như chúng ta không can thiệp. Để hiểu rõ hơn về những quy tắc này bạn đọc xem tại Controlling Text Tokenization and Escaping .

Tốc độ

Về tốc độ lập chỉ mục và tìm kiếm, redisearch không hề thua kém bất kì công cụ hỗ trợ tìm kiếm nào khác như Elastic Search hay Solr. Thậm chí nó còn cho tốc độ đáng kinh ngạc.

Cụ thể trên trang blog của Redis, những người phát triển tiến hành so sánh hiệu năng của hai công cụ Redisearch & Elastic Search thông qua bài kiểm tra đánh index và tìm kiếm 5,6 triệu tài liệu lấy từ trang wikipedia.

Kết quả đánh index: Kết quả đánh index

Kết quả tìm kiếm với hai từ khóa ngẫu nhiên: Kết quả tìm kiếm với hai từ khóa ngẫu nhiên

Nếu muốn tìm hiểu chi tiết hơn, bạn đọc thêm ở Search Benchmarking: RediSearch vs. Elasticsearch.

Tổng kết

Redisearch là một cơ sở dữ liệu hỗ trợ lập chỉ mục và tìm kiếm full-text cực kì mạnh mẽ với chi phí bộ nhớ được tối ưu. Tôi tình cờ tìm đến redisearch khi mà đang tìm kiếm một giải pháp tìm kiếm full-text thay thế cho Elastic Search vốn yêu cầu cấu hình máy chủ tương đối cao.

Redisearch hỗ trợ nhiều cú pháp tìm kiếm trên nhiều trường dữ liệu có trong một chỉ mục. Ngoài ra bạn còn có thể đặt trọng số cho tài liệu để tìm kiếm chính xác hơn, kết quả tìm kiếm cũng được đánh giá thông qua điểm tìm kiếm.

Về hiệu năng, redisearch không hề thua kém bất kì công cụ tìm kiếm nào khác như Elastic Search hay Solr.

Cao cấp
Hello

Bí mật ngăn xếp của Blog

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (2)

Nội dung bình luận...
Avatar
Linh Trần3 năm trước
Nếu như có thể thay thế els bằng redis được không bạn?
Trả lời
Avatar
Ẩn danh7 tháng trước
trong trường hợp nào nữa bạn ơi 1 cái lưu trên ram 1 cái lưu trên ổ địa so sánh với nhau khập khiễn mà
Avatar
Nhí Nhố Tí3 năm trước
Bài viết mang tính tổng quát
Trả lời
Avatar
Nhí Nhố Tí3 năm trước
Tôi cần nhiều bài chi tiết hơn nữa