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
Thiết kế bởiSalvatore Sanfilippo[1][2]
Phát triển bởiRedis[1][2]
Phát hành lần đầu10 tháng 5 năm 2009; 15 năm trước (2009-05-10)
Phiên bản ổn định
7.4.1[3] Sửa đổi tại Wikidata / 20 tháng 3 năm 2023; 19 tháng trước (2023-03-20)
Kho mã nguồn
Viết bằngC
Hệ điều hànhUnix-like[4]
Thể loạiData structure store, key-value database
Giấy phépBSD 3-clause[5]
Websiteredis.io

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".

Khái quát

sửa

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]

Ngôn ngữ hỗ trợ

sửa

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)

Kiểu dữ liệu

sửa

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ư:

  • Danh sách chuỗi (List of string)
  • Tập hợp chuỗi (Set of string), đây là tập hợp các giá trị chưa sắp xếp và không lặp lại
  • Tập hợp chuỗi có xắp xếp, đây là tập hợp các giá trị không lặp lại được sắp xếp theo trọng số
  • Bảng mã băm (Hash table)
  • HyperLogLogs, đây là kiểu dữ liệu dùng để ước tính xấp xỉ giá trị cardinality, được Redis đưa ra từ phiên bản 2.8.9 vào tháng 4 năm 2014.[11]
  • Luồng đối tượng (Stream of entries), cho phép lưu trữ các trường giá trị và chuỗi tự động theo trình tự thời gian ở từng khóa key, được Redis đưa ra từ phiên bản 5.0 vào tháng 10 năm 2018[11]
  • Dữ liệu không gian (Geospatial data) được triển khai sử dụng kỹ thuật geohash, được Redis đưa ra từ phiên bản 3.2.[12]

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]

  • JSON – RedisJSON[14] triển khai trên chuẩn ECMA-404 (chuẩn JavaScript Object Notation Data Interchange Standard) như một dạng dữ liệu native.[15]
  • Graph – RedisGraph[16] triển khai truy vấn graph trên thuộc tính
  • Time series – RedisTimeSeries[17] triển khai các cấu trúc dữ liệu theo thời gian (time series data structure)
  • Bloom filter, Cuckoo filter, Count–min sketch, và Top-K – RedisBloom[18] triển khai tập hợp dữ liệu cấu trúc xác suất trên Redis

Tham khảo

sửa
  1. ^ a b Bernardi, Stefano (4 tháng 1 năm 2011). “An interview with Salvatore Sanfilippo, creator of Redis, working out of Sicily”. EU-Startups. Menlo Media. Lưu trữ bản gốc ngày 7 tháng 3 năm 2016. Truy cập ngày 17 tháng 4 năm 2023.
  2. ^ a b Haber, Itamar (15 tháng 7 năm 2015). “Salvatore Sanfilippo: Welcome to Redis Labs”. Redis Labs. Lưu trữ bản gốc ngày 29 tháng 1 năm 2023. Truy cập ngày 17 tháng 4 năm 2023.
  3. ^ “Release 7.4.1”. 2 tháng 10 năm 2024. Truy cập 27 tháng 10 năm 2024.
  4. ^ “Introduction to Redis”. Lưu trữ bản gốc ngày 9 tháng 3 năm 2023. Truy cập ngày 17 tháng 4 năm 2023. Redis is written in ANSI C and works in most POSIX systems like Linux, *BSD, OS X without external dependencies.
  5. ^ “Copying”. GitHub. 4 tháng 3 năm 2022. Lưu trữ bản gốc ngày 14 tháng 2 năm 2020. Truy cập ngày 17 tháng 4 năm 2023.
  6. ^ “Redis FAQ”. Redis (bằng tiếng Anh). Lưu trữ bản gốc ngày 13 tháng 4 năm 2023. Truy cập ngày 13 tháng 4 năm 2023.
  7. ^ “DB-Engines Ranking”. DB-Engines (bằng tiếng Anh). Lưu trữ bản gốc ngày 15 tháng 8 năm 2019. Truy cập ngày 17 tháng 4 năm 2023.
  8. ^ “EVAL”. Redis (bằng tiếng Anh). Lưu trữ bản gốc ngày 30 tháng 3 năm 2023. Truy cập ngày 17 tháng 4 năm 2023.
  9. ^ “Get started using Redis clients”. Redis (bằng tiếng Anh). Lưu trữ bản gốc ngày 6 tháng 4 năm 2023. Truy cập ngày 17 tháng 4 năm 2023.
  10. ^ “CRAN - Package rredis”. Bản gốc lưu trữ ngày 20 tháng 6 năm 2013. Truy cập ngày 1 tháng 7 năm 2013.
  11. ^ a b “Redis 5.0 is here!”. 22 tháng 10 năm 2018. Lưu trữ bản gốc ngày 14 tháng 3 năm 2023. Truy cập ngày 18 tháng 4 năm 2023.
  12. ^ “Redis 3.2 Release Notes”. GitHub. Lưu trữ bản gốc ngày 4 tháng 3 năm 2017. Truy cập ngày 10 tháng 3 năm 2017.
  13. ^ “Redis Modules: an introduction to the API”. redis.io. Lưu trữ bản gốc ngày 7 tháng 12 năm 2019. Truy cập ngày 10 tháng 7 năm 2019.
  14. ^ “RedisJSON - a JSON data type for Redis”. Redis (bằng tiếng Anh). Lưu trữ bản gốc ngày 21 tháng 3 năm 2023. Truy cập ngày 18 tháng 4 năm 2023.
  15. ^ “RedisJSON”. Redis (bằng tiếng Anh). Lưu trữ bản gốc ngày 21 tháng 3 năm 2023. Truy cập ngày 18 tháng 4 năm 2023.
  16. ^ “RedisGraph - a graph database module for Redis”. Redis (bằng tiếng Anh). Lưu trữ bản gốc ngày 6 tháng 4 năm 2023. Truy cập ngày 18 tháng 4 năm 2023.
  17. ^ “RedisTimeSeries - Time-Series data structure for Redis”. Redis (bằng tiếng Anh). Lưu trữ bản gốc ngày 6 tháng 4 năm 2023. Truy cập ngày 18 tháng 4 năm 2023.
  18. ^ “RedisBloom - Probabilistic Datatypes Module for Redis”. Redis (bằng tiếng Anh). Lưu trữ bản gốc ngày 6 tháng 4 năm 2023. Truy cập ngày 18 tháng 4 năm 2023.