Redis là gì: Hướng dẫn đầy đủ về cách sử dụng, lợi ích và ví dụ

Cập nhật lần cuối: 5 tháng 9 của 2025
  • Redis lưu trữ dữ liệu trong bộ nhớ bằng các cấu trúc tiên tiến và hoạt động nguyên tử.
  • Hỗ trợ tính bền bỉ (RDB/AOF), sao chép không đồng bộ và các công cụ như Pub/Sub và Lua.
  • Lý tưởng cho việc lưu trữ đệm, phiên, nhắn tin và xếp hạng với độ trễ rất thấp.

Công dụng và định nghĩa của Redis
Nếu bạn từng cần ứng dụng của mình chạy nhanh như tên lửa, có lẽ bạn đã nghe nói về Redis. Công nghệ này hoạt động như một hệ thống dữ liệu trong bộ nhớ, cung cấp độ trễ rất thấp và phản hồi gần như tức thời, lý tưởng khi tốc độ là ưu tiên hàng đầu.

Ngoài việc là “một bộ nhớ đệm”, Redis còn là một Cơ sở dữ liệu NoSQL Chương trình khóa-giá trị với nhiều cấu trúc dữ liệu và các công cụ tích hợp. Xuất hiện từ năm 2009 và được viết bằng C, tên của nó bắt nguồn từ Máy chủ từ điển từ xaNgày nay, nó được hỗ trợ bởi một hệ sinh thái rất năng động, máy khách cho hầu hết mọi ngôn ngữ và các tùy chọn sao chép và duy trì mạnh mẽ.

Redis là gì và nó được sử dụng để làm gì?

Redis là một công cụ lưu trữ trong bộ nhớ hoạt động với các cặp khóa-giá trị và các cấu trúc nâng cao. Khi hoạt động trong RAM, giảm thiểu tình trạng tắc nghẽn truy cập đĩa thông thường, khiến nó trở nên hoàn hảo cho các trường hợp sử dụng đòi hỏi tốc độ cực cao: bộ nhớ đệm truy vấn lớn, phiên người dùng, nhắn tin thời gian thực, chơi game trực tuyến, bảng điều khiển dữ liệu phát trực tuyến, v.v.

Trong nhiều dự án nó được sử dụng như lớp bộ nhớ đệm trước cơ sở dữ liệu truyền thống, lưu trữ các kết quả lặp lại để tránh việc tính toán lại hoặc truy vấn lại liên tục. Nó cũng được sử dụng như một cơ sở dữ liệu riêng khi không yêu cầu độ bền nghiêm ngặt hoặc tính bền vững được cấu hình để bảo mật dữ liệu trên đĩa.

Kiến trúc máy khách/máy chủ, giao diện mạng và thiết kế gọn nhẹ giúp dễ dàng triển khai và kết nối từ nhiều máy chủ. Hơn nữa, cung cấp sao chép bản sao chính-bản sao không đồng bộ (máy chủ vẫn tiếp tục phục vụ trong khi sao chép), giúp mở rộng quy mô đọc và cải thiện tính khả dụng.

Các tính năng chính

Ưu điểm lớn nhất của Redis là mọi thứ đều nằm trong bộ nhớ chính. Điều này loại bỏ việc truy cập đĩa trong đường dẫn quan trọng và cung cấp hoạt động đọc/ghi cực nhanh. Ngoài ra, mỗi chuỗi có thể lên tới 512 MB, hỗ trợ dữ liệu nhị phân và có các cấu trúc như danh sách, tập hợp, tập hợp được sắp xếp, băm, HyperLogLog, bitmap và luồng.

Redis triển khai các thao tác nguyên tử cấp cao phía máy chủ trên các cấu trúc này. Điều này cho phép bạn thực hiện hợp, giao hoặc hiệu trên các tập hợp, sửa đổi chuỗi con hoặc tăng và giảm số nguyên và số thực không có điều kiện chạy đua.

Bao gồm các công cụ giúp tăng tốc độ phát triển và đơn giản hóa các mẫu thông thường: Pub / Sub để đăng và đăng ký kênh (tuyệt vời cho việc nhắn tin và thông báo theo thời gian thực), phím có TTL để hết hạn tự động, máy đếm nguyên tử cho các số liệu và kiểm soát đồng thời, và hỗ trợ nhúng cho chữ viết bằng tiếng Lua cho logic phía máy chủ kể từ phiên bản 2.6.

Một lợi thế mạnh mẽ khác là khả năng tương thích với các mô-đun. Redis Modules mở rộng các khả năng như Tài liệu JSON, chuỗi thời gian hoặc tìm kiếm, biến nó thành một hệ thống linh hoạt vượt xa giá trị khóa đơn giản.

  Phương pháp tạo mẫu cho phát triển phần mềm

Các tính năng của Redis

Lịch sử, giấy phép và sự phát triển

Redis được Salvatore Sanfilippo thành lập năm 2009 để cải thiện độ trễ của một sản phẩm có tên LLOGG. Thành công của Redis đến ngay lập tức, và vào năm 2010 VMware đã thuê Sanfilippo để lãnh đạo dự án toàn thời gian.Pieter Noordhuis gia nhập công ty ngay sau đó. Từ năm 2013 đến năm 2015, ông được Pivotal và sau đó là Redis Labs tài trợ.

Kể từ phiên bản 2.6, máy chủ tích hợp trình thông dịch Lua, cho phép chạy các tập lệnh trong chính Redis với tính nguyên tử và giảm thiểu độ trễ khứ hồi giữa máy khách và máy chủ. Về mặt cấp phép, nó được phân phối theo mô hình chế độ kép. RSALv2 và SSPLv1.

Mô hình dữ liệu và hoạt động

Redis duy trì một từ điển toàn cục ánh xạ khóa với giá trị. Không giống như các giải pháp khóa-giá trị đơn giản khác, giá trị có thể có nhiều kiểu dữ liệu khác nhau. Kiểu dữ liệu xác định các lệnh có sẵn và các hoạt động nguyên tử mà bạn có thể chạy trên dữ liệu đó.

Kiểu Redis String là "an toàn nhị phân": nó có thể chứa văn bản, số nguyên, số thực hoặc dữ liệu nhị phân thô như ảnh JPEG hoặc đối tượng được tuần tự hóa. Bạn có thể thao tác trên các phần của một chuỗi, sửa đổi các bit cụ thể hoặc sử dụng nó như một bộ đếm với mức tăng/giảm.

Danh sách cho phép bạn quản lý hàng đợi hoặc ngăn xếp, tập hợp và tập hợp có thứ tự được sử dụng để phân loại thành viên và xếp hạng theo điểm, và các giá trị băm lưu trữ bản đồ trường-giá trị, rất hữu ích cho nhóm các thuộc tính của một đối tượngHyperLogLog được sử dụng để đếm số lượng gần đúng với yêu cầu bộ nhớ rất thấp và các luồng tạo điều kiện cho luồng sự kiện với mức tiêu thụ nhóm.

Ngoài ra, Redis cung cấp các giao dịch (MULTI/EXEC), cho phép bạn nhóm nhiều hoạt động lại với nhau để được thực hiện tuần tự và nguyên tử. Kết hợp với Lua, bạn có thể đóng gói logic phức tạp ở phía máy chủ bằng các đảm bảo.

Tính bền bỉ: ảnh chụp nhanh và AOF

Redis có thể hoạt động hoàn toàn trong bộ nhớ, nhưng cũng hỗ trợ tính bền vững của ổ đĩa để cân bằng hiệu suất và độ bền. Với ảnh chụp nhanh (RDB), nó việc chụp định kỳ tập dữ liệu và lưu chúng theo cách không đồng bộ, do đó tác động đến thời gian phản hồi là rất thấp.

Tùy chọn khác là AOF (ghi nhật ký), ghi lại từng thao tác ghi vào một tệp. Chế độ này cung cấp độ bền chi tiết hơn và có thể cấu hình: appendfsync=luôn luôn buộc phải đồng bộ hóa ở mọi thay đổi (bảo mật tối đa, hiệu suất thấp hơn) và appendfsync=mỗi giây đồng bộ hóa từng giây (cân bằng tuyệt vời).

Nếu cần, bạn cũng có thể bắn một "Lưu" Hướng dẫn sử dụng để tạo ảnh chụp nhanh tại thời điểm đó. Trong trường hợp máy tính bị hỏng hoàn toàn, thông thường chỉ mất một lượng dữ liệu nhỏ, tùy thuộc vào chính sách đồng bộ hóa được chọn.

Trong các phiên bản cũ hơn, việc sử dụng "bộ nhớ ảo" đã được cho phép bắt đầu từ phiên bản 2.4, nhưng cách tiếp cận đó đã lỗi thời. Ngày nay, chúng tôi khuyên bạn nên lựa chọn giữa RDB, AOF hoặc kết hợp chúng, điều chỉnh cấu hình theo mức độ quan trọng của dữ liệu và hiệu suất mong muốn.

Sao chép và tính khả dụng cao

Redis triển khai sao chép bản sao-bản sao không đồng bộ. Điều này có nghĩa là các thao tác ghi được chấp nhận trên bản sao chính và các bản sao được đồng bộ hóa mà không chặn bản sao. duy trì hoạt động của dịch vụ trong quá trình đồng bộ hóaMột máy chủ có thể có nhiều bản sao và ngược lại, một bản sao có thể được kết nối với một bản sao khác như một máy chủ, tạo thành một cấu trúc cây.

  Cách tạo tác nhân AI bằng n8n: ưu điểm, hướng dẫn và mẹo

Sự sao chép rất hữu ích cho đọc thang đo và để dự phòng. Một số cấu hình cho phép ghi vào bản sao, mặc dù điều này có thể dẫn đến sự không nhất quán nếu không được kiểm soát đúng cách; theo mặc định, bản sao thường được sử dụng ở chế độ chỉ đọc để duy trì tính nhất quán.

Việc đặt các bản sao gần người dùng giúp giảm độ trễ nhận thức. Điều này có thể đạt được bằng các công cụ điều phối và Sentinel/Cluster. tính khả dụng cao và chuyển đổi dự phòng tự động để giảm thiểu thời gian ngừng hoạt động do lỗi chính.

Kiến trúc và hệ sinh thái máy khách/máy chủ

Máy chủ Redis cung cấp một giao thức đơn giản mà các máy khách có ngôn ngữ khác nhau có thể kết nối. Bạn có thể tương tác với nó CLI chính thức (redis-cli) để thử nghiệm, quản lý hoặc viết tập lệnh nhanh hoặc tích hợp thư viện vào ứng dụng của bạn.

Có các ứng dụng khách cho ActionScript, C, C++, C#, Java, Go, Python, PHP, Ruby, Scala, JavaScript (bao gồm cả Node.js phía máy chủ), R, Erlang, Haskell, Lua, Objective-C, Perl, Common Lisp, Smalltalk, Tcl, Io, haXe, Pure Data, v.v. Khả năng tương thích rộng này tạo điều kiện thuận lợi cho việc áp dụng trong hầu hết mọi ngăn xếp.

Các trường hợp sử dụng thực tế và ví dụ thực tế

Một trường hợp rất phổ biến là với một đại lý bất động sản trực tuyến: danh sách bất động sản với giá cả, tiện nghi hoặc phòng ốc hầu như không thay đổi. Nếu không có bộ nhớ đệm, mỗi lần truy cập sẽ yêu cầu lặp lại các truy vấn và tính toán. Với Redis, sau lần tải đầu tiên, đối tượng được lưu bằng một khóa (ví dụ: thuộc tính_4056) và TTL, chẳng hạn, là một tháng. Các lần truy cập tiếp theo được đọc từ bộ nhớ và tránh va chạm vào cơ sở dữ liệu.

Nó cũng phổ biến kết quả báo cáo cache heavy, quản lý các phiên đã xác thực, xây dựng bảng xếp hạng trực tiếp với các tập hợp đã sắp xếp hoặc sử dụng Pub/Sub làm kênh nhắn tin nhẹ giữa các dịch vụ.

Trong một thử nghiệm với bảng lỗi 16.000 hàng, thời gian được đo cho: 1) truy vấn cơ sở dữ liệu, 2) lưu bộ sưu tập vào Redis và 3) đọc từ Redis. Kết quả thật đáng kinh ngạc: Phục hồi từ Redis nhanh hơn 26 lần hơn là từ cơ sở dữ liệu. Những so sánh này thường giúp chúng ta thấy được tác động thực sự đến trải nghiệm người dùng và chi phí cơ sở hạ tầng.

Redis so với Memcached

Cả hai công nghệ đều được sử dụng cho bộ nhớ đệm trong bộ nhớ, nhưng có những khác biệt đáng chú ý. Redis cung cấp nhiều kiểu dữ liệu (danh sách, tập hợp, hàm băm, v.v.), tùy chọn lưu trữ đĩa, Pub/Sub, Lua scripts, giao dịch và module để mở rộng phạm vi hoạt động. Mặt khác, Memcached tập trung vào mô hình khóa-giá trị đơn giản, nằm trong bộ nhớ và không có tính bền vững.

Về hiệu suất thô, cả hai đều rất nhanh; Redis thường vượt trội trong các tình huống có cấu trúc phức tạp và hoạt động nguyên tử phía máy chủ. Nếu bạn chỉ cần một bộ đệm cực kỳ đơn giản và nhẹ, Memcached có thể đủnhưng khi bạn đang tìm kiếm nhiều chức năng và tính linh hoạt hơn, Redis thường là lựa chọn tốt hơn.

  Hướng dẫn cách kích hoạt và cấu hình chế độ bảo trì trong WordPress

Dịch vụ được quản lý so với dịch vụ tự quản lý (Redis và Valkey)

Bạn có thể tự triển khai Redis hoặc Valkey hoặc lựa chọn dịch vụ đám mây được quản lý. Tự quản lý cho phép bạn kiểm soát hoàn toàn, nhưng Quy mô và bảo trì tùy thuộc vào bạn (thêm nút, cập nhật, bảo mật, sao lưu, giám sát).

Dịch vụ được quản lý giúp giảm gánh nặng vận hành: dễ dàng mở rộng quy mô, tính khả dụng cao và cập nhật dễ dàng. Điều này thường được chuyển thành tổng chi phí thấp hơn và tập trung nhiều hơn vào nhóm trong mô hình hóa dữ liệu và chức năng kinh doanh, thay vì các tác vụ nền tảng.

Các công cụ tích hợp: Pub/Sub, TTL, bộ đếm và Lua

Với Pub/Sub, bạn có thể phát tin nhắn trên các kênh và nhiều người đăng ký nhận được chúng ngay lập tức, điều này hoàn hảo cho trò chuyện, thông báo và phối hợp giữa các dịch vụ vi mô. Đây là một mô hình đơn giản và hiệu quả.

Khóa thời gian tồn tại (TTL) cho phép bạn "tự làm sạch" dữ liệu tạm thời: phiên, mã thông báo, kết quả truy vấn hết hạn, v.v. Điều này bạn tránh việc điền thông tin lỗi thời vào cơ sở dữ liệu và đơn giản hóa logic hết hạn.

Bộ đếm nguyên tử rất hữu ích cho các phép đo, giới hạn tốc độ, hàng đợi hoặc bất kỳ trường hợp nào bạn cần cộng/trừ an toàn trong môi trường đồng thời.

Cuối cùng, hỗ trợ nhúng của Lua cho phép thực thi các tập lệnh gần với dữ liệu với tính nguyên tử. Điều này làm giảm các chuyến đi mạng và cung cấp cho bạn các hoạt động phức tạp chỉ trong một bước, cải thiện tính nhất quán và hiệu suất.

Câu hỏi thường gặp

Redis được sử dụng để làm gì? Để tăng tốc các ứng dụng với bộ nhớ đệm trong bộ nhớ, phiên, xếp hạng thời gian thực, nhắn tin nhẹ với Pub/Sub và như một cơ sở dữ liệu NoSQL khi độ trễ là ưu tiên hoặc tính bền bỉ được cấu hình.

Tại sao Redis lại nhanh như vậy? Bởi vì dữ liệu nằm trong RAM, nó loại bỏ các truy cập đĩa trên đường dẫn quan trọng và cung cấp các hoạt động nguyên tử phía máy chủ; ngoài ra, giao thức của nó là nhẹ và hiệu quả.

Nó có thể được sử dụng như một cơ sở dữ liệu không? Có. Đây là cơ sở dữ liệu NoSQL trong bộ nhớ với các tùy chọn lưu trữ (RDB và AOF). Tùy thuộc vào cấu hình của bạn, bạn có thể ưu tiên hiệu suất hoặc độ bền và kết hợp cả hai.

Hỗ trợ ngôn ngữ

Có các trình khách trưởng thành cho hầu hết mọi thứ: Python (redis‑py), Java (Jedis), Node.js (ioredis), C#/.NET (StackExchange.Redis), PHP (phpredis), Go (go‑redis), Ruby (redis‑rb), và nhiều hơn nữa. Sự đa dạng này đảm bảo tích hợp trực tiếp với ngăn xếp của bạn thực tế

Redis đã khẳng định mình là “lá bài tẩy” để giải quyết các vấn đề về hiệu suất và thời gian thực trong hầu hết các kiến ​​trúc hiện đại: nó kết hợp tốc độ chóng mặt, cấu trúc dữ liệu phong phú, tính bền bỉ có thể cấu hình, khả năng sao chép và một bộ công cụ thực tế, khi được sử dụng tốt, tạo nên sự khác biệt trong trải nghiệm của người dùng.

Các loại cơ sở dữ liệu
Bài viết liên quan:
Các loại cơ sở dữ liệu: Quan hệ, NoSQL và nhiều loại khác