Thiết kế bởi | Salvatore Sanfilippo[1][2] |
---|---|
Phát triển bởi | Redis[1][2] |
Phát hành lần đầu | 10 tháng 5 năm 2009 |
Phiên bản ổn định | 7.4.1[3]
/ 20 tháng 3 năm 2023 |
Kho mã nguồn | |
Viết bằng | C |
Hệ điều hành | Unix-like[4] |
Thể loại | Data structure store, key-value database |
Giấy phép | BSD 3-clause[5] |
Website | redis |
Redis (/ˈrɛdɪs/; từ viết tắt của Remote Dictionary Server)[6] là một cơ sở dữ liệu phân tán trong bộ nhớ, được sử dụng như một cơ sở dữ liệu đệm lưu dữ liệu dạng cặp khóa-giá trị (key-value cache) thông qua các message broker trong bộ nhớ, trong khoảng thời gian tùy chọn.
Redis hỗ trợ nhiều loại cấu trúc dữ liệu trừu tượng khác nhau, như chuỗi, danh sách, bản đồ, tập hợp, tập hợp có sắp xếp, HyperLogLogs, bitmap, streams và các index không gian (spatial indices). Dự án này được phát triển và bảo trì bởi Salvatore Sanfilippo, bắt đầu từ năm 2009. Từ năm 2015 đến năm 2020, ông đã dẫn dắt một nhóm nhân sự cốt lõi của dự án được tài trợ bởi Redis Labs. Salvatore Sanfilippo rời khỏi Redis vào năm 2020. Redis hiện là phần mềm mã nguồn mở được phát hành theo giấy phép BSD 3-clause. Năm 2021, không lâu sau khi tác giả ban đầu và nhà bảo trì chính rời khỏi dự án, Redis Labs đã xóa từ "Labs" khỏi tên và hiện được biết đến đơn giản là "Redis".
Redis là một dạng cơ sở dữ liệu được phát triển trên ý tưởng về một hệ thống vừa có thể được là hệ lưu trữ dữ liệu vừa có thể là một bộ đệm cùng một lúc. Nó được thiết kế sao cho dữ liệu luôn được sửa đổi và đọc từ bộ nhớ chính của máy tính, tuy nhiên nó cũng hỗ trợ lưu trữ trên đĩa nhưng ở định dạng không phù hợp để truy cập dữ liệu ngẫu nhiên. Định dạng dữ liệu lưu trữ được thiết kế để có thể tái định dạng tái cấu trúc vào bộ nhớ sau khi hệ thống khởi động lại.
Với cách tổ chức này, Redis cung cấp một mô hình dữ liệu rất khác thường so với hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). Các lệnh truy vấn của người dùng không mô tả để được thực thi bởi công cụ từ engine của cơ sở dữ liệu mà chỉ là các toán tử trên các loại dữ liệu trừu tượng đã cho. Để có thể hoạt động như một bộ đệm, dữ liệu phải được lưu trữ theo cách phù hợp sau này để truy xuất nhanh nhất. Việc truy xuất được thực hiện mà tức thời mà không cần sự trợ giúp từ hệ thống cơ sở dữ liệu dưới dạng chỉ mục (index), truy vấn phức hợp (aggregation) tập hợp hay các kiểu truy vấn phổ biến khác của RDBMS truyền thống. Thay vào đó Redis được triển khai sử dụng nhiều lệnh gọi hệ thống gọi là fork, để nhân bản các tiến trình lưu trữ dữ liệu, việc này cho phép trình cha tiếp tục phục vụ truy vấn từ máy khách trong khi tiến trình con vẫn thực hiện tạo bản sao dữ liệu trong bộ nhớ trên đĩa.
Redis nhanh chóng trở thành cơ sở dữ liệu lưu trữ dạng key-value phổ biến nhất theo bảng xếp hạng DB-Engines ranking của Solid IT.[7]
Từ phiên bản 2.6, Redis hỗ trợ ngôn ngữ scripting phía server-side là Lua.[8]
Các ngôn ngữ lập trình được hỗ trợ phía client-side rất nhiều bao gồm:[9]
|
|
|
|
|
Ví dụ code client sử dụng Redis trên Python:
import redis
# Connect to Redis
redis_client = redis.Redis(host='localhost', port=6379, db=0)
# Set a value in Redis
redis_client.set('my_key', 'my_value')
# Get a value from Redis
value = redis_client.get('my_key')
print(value)
Redis ánh xạ khóa key tới các loại giá trị khác nhau. Một điểm khác biệt quan trọng giữa Redis và các hệ thống lưu trữ có cấu trúc khác là Redis không chỉ hỗ trợ dữ liệu kiểu chuỗi mà còn cả các kiểu dữ liệu trừu tượng khác như:
Kiểu của một value sẽ xác định các toán tử (hay lệnh) nào có thể được sử dụng với nó. Redis hỗ trợ các tập lệnh hở mức cao phía server-side như các lệnh giao cắt (intersection), tập hợp (union) và tìm tâp khác biệt (difference) giữa các kiểu tập hợp không sắp xếp, danh sách và các tập hợp có sắp xếp.
Một số kiểu dữ liệu khác được hỗ trợ qua Redis Modules API như:[13]
Redis is written in ANSI C and works in most POSIX systems like Linux, *BSD, OS X without external dependencies.