cuốn sách gpt4 ai đã làm

[Redis] Giới thiệu cấu trúc dữ liệu Redis

In lại Tác giả: Người biết Thời gian cập nhật: 2024-03-12 08:20:27 30 4
mua khóa gpt4 Nike

1. Giới thiệu cấu trúc dữ liệu Redis

Redis là một cơ sở dữ liệu khóa-giá trị. Khóa thường thuộc loại Chuỗi, nhưng các loại giá trị rất đa dạng. Dưới đây là một vài ví dụ:

loại giá trị Ví dụ
Sợi dây xin chào thế giới
Băm {tên: “Jack”, tuổi: 13}
Danh sách [A -> B -> C -> C]
Bộ {A, B, C}
Đã sắp xếp {A: 1, B: 2, C: 3}
ĐỊA LÝ {Đ: (120.3, 30.5)}
Bản đồ bit 0110110101110101011
siêu nhật ký 0110110101110101011

Năm loại đầu tiên là loại cơ bản và ba loại cuối cùng là loại đặc biệt, ngoài những loại này còn có các loại được sử dụng để xử lý hàng đợi tin nhắn, v.v.

Trên trang web chính thức của Redis (https://redis.io/commands/?group=string), bạn có thể dễ dàng truy vấn các lệnh để vận hành các cấu trúc dữ liệu khác nhau.

2. Viết lại các lệnh thông dụng

Các lệnh chung là các hướng dẫn có thể được sử dụng cho một số loại dữ liệu phổ biến bao gồm:

  • PHÍM: Xem tất cả các khóa khớp với mẫu (không khuyến khích sử dụng trên thiết bị môi trường sản xuất, vì truy vấn mờ không hiệu quả và vì Redis là luồng đơn nên các lệnh khác không thể được thực thi trong thời gian truy vấn, gây ra tình trạng chặn.)
# Truy vấn tất cả các phím khóa * # Truy vấn các phím khóa n* bắt đầu bằng n
  • DEL: Xóa một khóa đã chỉ định và giá trị trả về là số lượng khóa đã xóa.
# Xóa khóa có tên tên DEL name # Xóa nhiều khóa (nếu tồn tại cả 4 khóa thì sẽ trả về 4. Nếu chỉ tồn tại 3 khóa đầu tiên thì xóa thành công và trả về 3 khóa) DEL k1 k2 k3 k4
  • Tồn tại: Xác định xem khóa có tồn tại hay không và trả về số lượng khóa hiện có.
# Xác định xem khóa có phải là tên hay không và tên EXISTS có tồn tại không
  • HẾT HẠN: Đặt thời hạn hiệu lực (tính bằng giây) cho một khóa. Khi hết thời hạn hiệu lực, khóa sẽ tự động bị xóa.
# Đặt thời gian hiệu lực là 20s cho key có tên EXPIRE name 20
  • TTL: Kiểm tra thời hạn hiệu lực còn lại của khóa (kết quả là -2 sau thời hạn hiệu lực và -1 nếu thời hạn hiệu lực không được đặt (vĩnh viễn))
# Kiểm tra thời hạn hiệu lực của tên TTL
  • trợ giúp [lệnh]: Xem cách sử dụng cụ thể của một lệnh

3. Kiểu chuỗi

Giá trị của kiểu String là một chuỗi nhưng nó được chia thành 3 loại theo các định dạng chuỗi khác nhau:

  • chuỗi: chuỗi thông thường
  • int: Kiểu số nguyên, có thể thực hiện các phép toán tự động tăng, giảm tự động
  • float: kiểu dấu phẩy động, có thể thực hiện các thao tác tự động tăng, giảm tự động
CHÌA KHÓA GIÁ TRỊ
tên giắc cắm
tuổi hai mươi mốt
điểm 95,5

Bất kể định dạng nào, lớp dưới cùng đều được lưu trữ dưới dạng mảng byte, nhưng phương pháp mã hóa thì khác nhau. Không gian tối đa của loại chuỗi không thể vượt quá 512m.

Các lệnh phổ biến:

  • BỘ: Thêm hoặc sửa đổi cặp khóa-giá trị loại Chuỗi hiện có
SET tên jack
  • LẤY: Lấy giá trị của kiểu Chuỗi dựa trên khóa
NHẬN tên
  • MSET: Thêm nhiều cặp khóa-giá trị loại Chuỗi theo đợt
MSET k1 v1 k2 v2 k3 v3
  • MGET: Nhận nhiều giá trị kiểu String dựa trên nhiều khóa
MGET k1 k2 k3
  • INCR: Để một khóa số nguyên tự động tăng
SET tuổi 10 INCR tuổi
  • INCRBY: Để khóa số nguyên tự động tăng và chỉ định kích thước bước
INCRBY 5 tuổi
  • INCRBYFLOAT: Để số loại dấu phẩy động tự tăng và chỉ định kích thước bước
Điểm SET 90,5 Điểm INCRBYFLOAT 5
  • SETNX: Thêm một cặp khóa-giá trị kiểu Chuỗi, với điều kiện khóa đó không tồn tại, nếu không nó sẽ không được thực thi.
# tên tồn tại, kết quả trả về là 0 SETNX tên tom # class không tồn tại, kết quả trả về là 1 SETNX class 2003
  • THIẾT LẬP: Thêm một cặp khóa-giá trị loại Chuỗi và chỉ định khoảng thời gian hiệu lực
chiều cao SETEX 20 180

4. Định dạng phân cấp khóa

Redis không có khái niệm tương tự Table trong MySQL, vậy làm sao để phân biệt các loại key khác nhau?

Khóa Redis cho phép nhiều từ tạo thành cấu trúc phân cấp và nhiều từ được phân tách bằng : Tách ra, định dạng như sau:

Tên dự án: Tên doanh nghiệp: Loại hình: id

Định dạng này không cố định và các mục có thể được xóa hoặc thêm theo nhu cầu của riêng bạn.

Ví dụ: tên dự án là mmr và có hai loại dữ liệu khác nhau: người dùng và blog. Chúng ta có thể xác định khóa như sau:

  • Khóa liên quan đến người dùng: mmr:user:1
  • Khóa liên quan đến blog: mmr:blog:1

Nếu Giá trị là một đối tượng Java, chẳng hạn như đối tượng Người dùng, thì đối tượng đó có thể được tuần tự hóa thành chuỗi JSON và được lưu trữ:

CHÌA KHÓA GIÁ TRỊ
mmr:người dùng:1 {"id": 1, "tên": "jack", "tuổi": 21}
mmr:người dùng:1 {"id": 1, "title": "java", "star": 10}

5. Loại băm

Kiểu Hash hay còn gọi là hash, giá trị của nó là một từ điển không có thứ tự, tương tự như cấu trúc HashMap trong Java.

Cấu trúc Chuỗi là một đối tượng được tuần tự hóa thành chuỗi JSON và sau đó được lưu trữ, điều này gây bất tiện khi một trường nhất định của đối tượng cần được sửa đổi.

Cấu trúc Hash có thể lưu trữ từng trường trong đối tượng một cách độc lập và CRUD có thể được thực hiện trên một trường duy nhất:

Các lệnh phổ biến:

  • Giá trị trường khóa HSET: Thêm hoặc sửa đổi giá trị trường của khóa loại băm
HSET mmr:user:3 tên lucy HSET mmr:user:3 tuổi 18
  • Trường khóa HGET: Lấy giá trị trường của khóa loại băm
HGET mmr:người dùng:3 tên
  • HMSET: Thêm các giá trị trường của nhiều khóa loại băm theo đợt
HMSET mmr:user:4 tên judy tuổi 11
  • HMGET: Nhận các giá trị trường của nhiều khóa loại băm theo lô
HMGET mmr:user:4 tên tuổi
  • HGETALL: Lấy tất cả các trường và giá trị trong một khóa loại băm
  • HKEY: Lấy tất cả các trường trong một khóa loại băm
  • HVALS: Lấy tất cả các giá trị trong một khóa loại băm
  • HINCRBY: Tăng trường của khóa loại băm và chỉ định kích thước bước
  • HSETNX: Thêm giá trị trường của khóa loại băm, với điều kiện trường đó không tồn tại, nếu không nó sẽ không được thực thi.

6. Kiểu danh sách

Kiểu Danh sách trong Redis tương tự như LinkedList trong Java và có thể được coi là cấu trúc danh sách liên kết đôi. Nó hỗ trợ cả truy xuất tiến và truy xuất ngược.

Đặc điểm tương tự như LinkedList:

  • có trật tự
  • Các phần tử có thể được lặp lại
  • Chèn và xóa nhanh
  • Tốc độ truy vấn ở mức trung bình

Các lệnh phổ biến:

  • Yếu tố chính LPUSH ...: Chèn một hoặc nhiều phần tử vào bên trái danh sách
# Thứ tự sau khi lưu là 3 2 1 LPUSH user 1 2 3
  • Khóa LPOP: Xóa và trả về phần tử đầu tiên ở bên trái danh sách hoặc không nếu không có
# Xóa người dùng LPOP ngoài cùng bên trái # Xóa hai người dùng LPOP ngoài cùng bên trái 2
  • Phần tử khóa RPUSH ...: Chèn một hoặc nhiều phần tử vào bên phải danh sách
  • khóa RPOP: Xóa và trả về phần tử đầu tiên ở bên phải danh sách
  • Phím LRANGE kết thúc bắt đầu: Trả về tất cả các phần tử trong một phạm vi chỉ mục (chỉ mục bắt đầu từ 0)
#Trả về các phần tử từ vị trí 0-2, kết quả là 3 2 1 LRANGER user 0 2
  • BLPOPBRPOP: Tương tự như LPOP và RPOP, ngoại trừ việc nó đợi thời gian được chỉ định khi không có phần tử nào, thay vì trả về trực tiếp con số 0.

Làm cách nào để mô phỏng ngăn xếp bằng cấu trúc Danh sách?
Lối vào và lối ra ở cùng một phía (nếu cả hai đều sử dụng RPUSH và RPOP)

Làm cách nào để mô phỏng hàng đợi bằng cấu trúc Danh sách?

Lối vào và lối ra không cùng phía (chẳng hạn như sử dụng LPOP và RPUSH)

Làm cách nào để sử dụng cấu trúc Danh sách để mô phỏng hàng đợi chặn?

Lối vào và lối ra không ở cùng một phía và BLPOP hoặc BRPOP được sử dụng khi rời khỏi hàng đợi.

7. Đặt loại

Cấu trúc Set của Redis tương tự như HashSet trong Java và có thể được coi là HashMap có giá trị null. Vì cũng là bảng băm nên nó có những đặc điểm tương tự như HashSet:

  • rối loạn
  • Các phần tử không thể lặp lại
  • Tìm nhanh
  • Hỗ trợ giao điểm, liên kết, khác biệt và các chức năng khác

Các lệnh phổ biến:

  • Thành viên chủ chốt của SADD...: Thêm một hoặc nhiều phần tử vào tập hợp
SADD s1 1 2 3
  • Thành viên chủ chốt của SREM...: Xóa phần tử đã chỉ định khỏi tập hợp
SREM s1 1
  • phím SCARD: Trả về số phần tử trong tập hợp
THẺ s1
  • Thành viên chủ chốt SISMEMBERr: Xác định xem một phần tử có tồn tại trong tập hợp không
SINH VIÊN1 1
  • THÀNH VIÊN: Lấy tất cả các phần tử trong tập hợp
THÀNH VIÊN s1
  • Phím SINTER1 phím2 ...: Tìm giao điểm của key1, key2,...
SADD s2 1 2 3 SADD s3 3 4 5 # Tìm giao điểm của s2 và s3, kết quả là 3 SINTER s2 s3
  • Khóa SDIFF1 khóa2 ...: Tìm tập sai khác của key1, key2,...
# Tìm tập sai phân của s2 so với s3, kết quả là 1 2 SDIFF s2 s3
  • Phím SUNION1 phím2 ...: Tìm hợp của key1, key2,...
# Tìm hợp của s2 và s3, kết quả là 1 2 3 4 5 SUNION s2 s3

8. Kiểu SortedSet

SortedSet của Redis là một tập hợp có thể sắp xếp, tương tự như TreeSet trong Java, nhưng cấu trúc dữ liệu cơ bản rất khác. Mỗi phần tử trong SortedSet có một thuộc tính điểm và các phần tử có thể được sắp xếp dựa trên thuộc tính điểm. Việc triển khai cơ bản là danh sách bỏ qua (SKipList) + bảng băm.

SortedSet có các thuộc tính sau:

  • Có thể sắp xếp
  • Các phần tử không được lặp lại
  • Tốc độ truy vấn nhanh

Do khả năng sắp xếp của SortedSet nên nó thường được sử dụng để triển khai các chức năng như xếp hạng.

Các lệnh phổ biến:

  • Thành viên ghi điểm chính của ZADD: Thêm một hoặc nhiều phần tử vào bộ sắp xếp và cập nhật giá trị điểm của nó nếu nó đã tồn tại
ZADD trung quốc 85 jack 86 judy 91 tom 76 Rose
  • Thành viên chủ chốt ZREM: Xóa một phần tử được chỉ định trong bộ sắp xếp
  • Thành viên chủ chốt ZSCORE: Lấy giá trị điểm của phần tử được chỉ định trong bộ sắp xếp
  • Thành viên chủ chốt ZRANK: Lấy thứ hạng của phần tử được chỉ định trong bộ sắp xếp
  • Chìa khóa ZCARD: Lấy số phần tử trong SortSet
  • Khóa ZCOUNT tối thiểu tối đa: Đếm số lượng tất cả các phần tử có giá trị điểm nằm trong phạm vi đã cho
  • Thành viên gia tăng khóa ZINCRBY: Để phần tử được chỉ định trong bộ sắp xếp được tăng theo giá trị tăng đã chỉ định.
  • Khóa ZRANGE tối thiểu tối đa: Sau khi sắp xếp theo điểm, lấy các phần tử nằm trong khoảng xếp hạng quy định
  • Khóa ZRANGEBYSCORE tối thiểu tối đa: Sau khi sắp xếp theo điểm, lấy các phần tử trong khoảng điểm quy định
  • ZDIFF, ZINTER, ZUNION: Tìm sự khác biệt, giao điểm và sự kết hợp

Để ý:

  • Các số xếp hạng bắt đầu từ 0
  • Tất cả các thứ hạng đều theo thứ tự tăng dần theo mặc định. Nếu bạn muốn sắp xếp thứ tự giảm dần, chỉ cần thêm REV sau Z trong lệnh.
30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress