0
0
Lập trình
Admin Team
Admin Teamtechmely

Tìm Hiểu Về Redis: Các Kiểu Dữ Liệu, Thời Gian Sống và So Sánh Với Kafka

Đăng vào 2 tuần trước

• 5 phút đọc

Chủ đề:

Redis

Giới Thiệu Về Redis

Redis là một cơ sở dữ liệu lưu trữ dạng key-value rất phổ biến, được ứng dụng rộng rãi trong các hệ thống yêu cầu tốc độ cao và khả năng mở rộng. Bài viết này sẽ giúp bạn hiểu rõ hơn về các kiểu dữ liệu trong Redis, cách quản lý thời gian sống của key, và so sánh Redis với Kafka.

Các Kiểu Dữ Liệu Trong Redis

1. Kiểu Dữ Liệu String

String là kiểu dữ liệu cơ bản nhất trong Redis, cho phép lưu trữ văn bản, số nguyên, hoặc số thực.

Đặc điểm:

  • Kích thước tối đa: 512MB
  • Thích hợp cho lưu trữ thông tin người dùng, bộ đếm, token
java Copy
RedisTemplate<String, String> redisTemplate;
redisTemplate.opsForValue().set(key, value);
redisTemplate.opsForValue().get(key);
bash Copy
SET user:1:name "Alice"       # Lưu tên người dùng
SET user:1:age 30            # Lưu tuổi người dùng
INCR user:1:age              # Tăng tuổi lên 1
GET user:1:age               # Kết quả: 31

2. Kiểu Dữ Liệu Hash

Hash cho phép lưu trữ các cặp field-value, giống như các đối tượng trong cơ sở dữ liệu.

Đặc điểm:

  • Thích hợp cho lưu trữ thông tin nhóm
  • 1 Hash chứa tối đa 2^32 field
java Copy
RedisTemplate<String, Object> redisTemplate;
public void saveHash(String key, Map<String, Object> data) {
        redisTemplate.opsForHash().putAll(key, data);
    }
    
public Map<Object, Object> getHash(String key) {
        return redisTemplate.opsForHash().entries(key);
    }
bash Copy
HSET user:2 name "Bob" age 25 email "bob@example.com" # Lưu thông tin người dùng
HGET user:2 name                                     # Kết quả: "Bob"
HGETALL user:2                                       # Kết quả: tất cả thông tin
HDEL user:2 email                                    # Xóa email khỏi hash

3. Kiểu Dữ Liệu List

List là danh sách các giá trị được sắp xếp theo thứ tự, phù hợp cho các ứng dụng quản lý công việc.

Đặc điểm:

  • Có thể sử dụng như stack hoặc queue
  • Tối đa 2^32 phần tử
java Copy
RedisTemplate<String, String> redisTemplate;
redisTemplate.opsForList().leftPush(key, value);

public List<String> getList(String key) {
        return redisTemplate.opsForList().range(key, 0, -1);
    }
bash Copy
LPUSH tasks "task1" "task2"       # Thêm vào đầu danh sách
RPUSH tasks "task3"               # Thêm vào cuối danh sách
LRANGE tasks 0 -1                 # Lấy tất cả phần tử (Kết quả: task2, task1, task3)
LPOP tasks                        # Lấy và xóa phần tử đầu tiên (task2)

4. Kiểu Dữ Liệu Set

Set cho phép lưu trữ các giá trị duy nhất mà không có thứ tự.

Đặc điểm:

  • Khả năng lưu trữ dữ liệu không trùng lặp
  • Hỗ trợ các thao tác toán học trên tập hợp (union, intersection, difference).
java Copy
RedisTemplate<String, String> redisTemplate;
redisTemplate.opsForSet().add(key, value);

public Set<String> getSet(String key) {
        return redisTemplate.opsForSet().members(key);
    }
bash Copy
SADD tags "redis" "database" "nosql"    # Thêm các tag
SMEMBERS tags                          # Lấy tất cả phần tử
SREM tags "nosql"                      # Xóa phần tử "nosql"

Thời Gian Sống Của Key Trong Redis

Redis hỗ trợ tính năng TTL (Time To Live) cho phép bạn:

  • Thiết lập thời gian sống cho key
  • Kiểm tra thời gian sống
  • Loại bỏ TTL khỏi key

Bên cạnh đó, bạn có thể sử dụng RMapCache của Redisson để thiết lập thời gian sống cho từng field trong một hash:

java Copy
RMapCache<String, String> cacheMap = redissonClient.getMapCache("user:1001");
cacheMap.put("name", "Alice", 60, TimeUnit.SECONDS);
cacheMap.put("age", "30", 120, TimeUnit.SECONDS);

Khi field hết thời gian, key sẽ tự động bị xóa. Mặc dù Redis gốc không hỗ trợ TTL riêng cho từng field, bạn có thể lưu từng field dưới dạng key riêng hoặc sử dụng Sorted Set để quản lý TTL.

So Sánh Redis Với Kafka

Yếu Tố Redis Pub/Sub Kafka
Yêu cầu lưu trữ lịch sử tin nhắn Không cần Cần lưu trữ để phân tích
Độ trễ Thấp (real-time) Thấp, nhưng cao hơn Redis
Quy mô Quy mô nhỏ, đơn giản Quy mô lớn, phức tạp
Độ tin cậy Không đảm bảo độ tin cậy Đảm bảo độ tin cậy
Sử dụng tài nguyên RAM RAM + Disk
Khả năng mở rộng Hạn chế Mở rộng tốt

Triển Khai Redis

Redis cung cấp nhiều cách triển khai khác nhau. Sử dụng RedissonClient cho việc kết nối với Redis Standalone là một lựa chọn phổ biến.

Redis Cluster:

Redis Cluster là giải pháp tốt khi bạn cần:

  • Chia sẻ dữ liệu trên nhiều node.
  • Mở rộng quy mô theo chiều ngang.

Bài viết trên hy vọng đã cung cấp cái nhìn tổng quan về Redis, các kiểu dữ liệu mà nó hỗ trợ, và cách thức bạn có thể sử dụng trong các ứng dụng thực tiễn.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào