Tan Phat Media

Redis Command Reference

Tra cứu 266 lệnh Redis theo nhóm, kèm độ phức tạp, phiên bản bắt đầu có và ví dụ dán thẳng vào redis-cli

Bộ lọc lệnh

Đang hiển thị 266 / 266 lệnh

SET
String

SET key value [NX|XX] [GET] [EX s|PX ms|EXAT ts|PXAT ts|KEEPTTL]

Ghi giá trị chuỗi vào key, ghi đè cả kiểu dữ liệu cũ nếu key đã tồn tại. Các tùy chọn NX, XX, EX, KEEPTTL cho phép gộp cả kiểm tra tồn tại và đặt hạn dùng vào một lệnh nguyên tử.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SET user:1:name phatnguyen EX 3600
GET
String

GET key

Đọc giá trị chuỗi của key. Trả về nil nếu key không tồn tại, báo lỗi WRONGTYPE nếu key đang giữ kiểu khác chuỗi.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

GET user:1:name
GETSET
String

GETSET key value

Đặt giá trị mới và trả về giá trị cũ trong một thao tác nguyên tử. Từ Redis 6.2 lệnh này bị đánh dấu cũ, nên dùng SET với tùy chọn GET.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

GETSET counter:daily 0
GETDEL
String

GETDEL key

Đọc giá trị rồi xóa key ngay trong cùng một thao tác. Rất hợp cho mã dùng một lần, token kích hoạt hay hàng đợi một phần tử.

Độ phức tạp: O(1)Từ Redis 6.2.0

Ví dụ chạy được trong redis-cli

GETDEL otp:0909123456
GETEX
String

GETEX key [EX s|PX ms|EXAT ts|PXAT ts|PERSIST]

Đọc giá trị đồng thời đặt lại hoặc gỡ bỏ hạn dùng của key. Dùng để gia hạn phiên đăng nhập mỗi lần người dùng còn hoạt động.

Độ phức tạp: O(1)Từ Redis 6.2.0

Ví dụ chạy được trong redis-cli

GETEX session:abc123 EX 1800
SETNX
String

SETNX key value

Chỉ ghi khi key chưa tồn tại, trả về 1 nếu ghi được và 0 nếu key đã có. Nền tảng của khóa phân tán đơn giản, nhưng nên dùng SET NX EX để có hạn dùng đi kèm.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SETNX lock:order:1001 worker-7
SETEX
String

SETEX key seconds value

Ghi giá trị kèm hạn dùng tính bằng giây trong một thao tác nguyên tử, tránh cảnh key được ghi mà lệnh EXPIRE theo sau bị lỗi.

Độ phức tạp: O(1)Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

SETEX cache:home 300 rendered-html
PSETEX
String

PSETEX key milliseconds value

Giống SETEX nhưng hạn dùng tính bằng mili giây, dùng cho khóa ngắn hạn và giới hạn tần suất theo cửa sổ nhỏ.

Độ phức tạp: O(1)Từ Redis 2.6.0

Ví dụ chạy được trong redis-cli

PSETEX ratelimit:ip:1.2.3.4 500 1
MSET
String

MSET key value [key value ...]

Ghi nhiều cặp key và giá trị trong một lần đi mạng. Toàn bộ thao tác nguyên tử, không bao giờ có trạng thái ghi được một nửa.

Độ phức tạp: O(N) với N là số keyTừ Redis 1.0.1

Ví dụ chạy được trong redis-cli

MSET cfg:host 127.0.0.1 cfg:port 6379 cfg:db 0
MSETNX
String

MSETNX key value [key value ...]

Chỉ ghi khi tất cả key trong danh sách đều chưa tồn tại, chỉ cần một key đã có là toàn bộ lệnh không ghi gì.

Độ phức tạp: O(N) với N là số keyTừ Redis 1.0.1

Ví dụ chạy được trong redis-cli

MSETNX cfg:host 127.0.0.1 cfg:port 6379
MGET
String

MGET key [key ...]

Đọc nhiều key trong một lần đi mạng, key không tồn tại trả về nil ở đúng vị trí. Giảm mạnh số vòng đi mạng so với gọi GET nhiều lần.

Độ phức tạp: O(N) với N là số keyTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

MGET user:1:name user:2:name user:3:name
APPEND
String

APPEND key value

Nối chuỗi vào cuối giá trị hiện có, tạo key mới nếu chưa có, trả về độ dài chuỗi sau khi nối. Hợp cho log gọn nhẹ hoặc gom dữ liệu theo dòng.

Độ phức tạp: O(1) khấu haoTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

APPEND log:job:42 done;
STRLEN
String

STRLEN key

Trả về độ dài tính bằng byte của giá trị chuỗi. Key không tồn tại trả về 0 chứ không báo lỗi.

Độ phức tạp: O(1)Từ Redis 2.2.0

Ví dụ chạy được trong redis-cli

STRLEN log:job:42
SETRANGE
String

SETRANGE key offset value

Ghi đè một đoạn chuỗi bắt đầu từ vị trí byte chỉ định, tự chèn byte rỗng nếu offset vượt quá độ dài hiện tại.

Độ phức tạp: O(1) khấu hao khi đoạn ghi nhỏTừ Redis 2.2.0

Ví dụ chạy được trong redis-cli

SETRANGE user:1:flags 2 AB
GETRANGE
String

GETRANGE key start end

Lấy một đoạn con của chuỗi theo chỉ số byte, chấp nhận chỉ số âm để đếm ngược từ cuối.

Độ phức tạp: O(N) với N là độ dài đoạn lấy raTừ Redis 2.4.0

Ví dụ chạy được trong redis-cli

GETRANGE user:1:name 0 3
INCR
String

INCR key

Tăng giá trị số nguyên lên 1 một cách nguyên tử, tự khởi tạo bằng 0 nếu key chưa có. Báo lỗi nếu giá trị hiện tại không phải số nguyên 64 bit.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

INCR pageview:2026-08-16
DECR
String

DECR key

Giảm giá trị số nguyên đi 1 một cách nguyên tử. Dùng cho bộ đếm tồn kho hoặc số lượt còn lại của mã khuyến mãi.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

DECR stock:sku-1001
INCRBY
String

INCRBY key increment

Tăng giá trị số nguyên theo mức chỉ định, nhận cả số âm để giảm. Nguyên tử nên nhiều tiến trình cùng gọi vẫn cho tổng đúng.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

INCRBY quota:user:1 100
DECRBY
String

DECRBY key decrement

Giảm giá trị số nguyên theo mức chỉ định. Kết hợp với kiểm tra kết quả trả về để phát hiện khi bộ đếm chạm mức âm.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

DECRBY quota:user:1 25
INCRBYFLOAT
String

INCRBYFLOAT key increment

Cộng một số thực vào giá trị chuỗi đang giữ số. Kết quả trả về dạng chuỗi đã cắt bớt số 0 thừa ở cuối phần thập phân.

Độ phức tạp: O(1)Từ Redis 2.6.0

Ví dụ chạy được trong redis-cli

INCRBYFLOAT balance:wallet:1 12.5
SUBSTR
String

SUBSTR key start end

Bí danh cũ của GETRANGE, giữ lại để tương thích ngược. Mã mới nên dùng GETRANGE.

Độ phức tạp: O(N) với N là độ dài đoạn lấy raTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SUBSTR user:1:name 0 2
LCS
String

LCS key1 key2 [LEN] [IDX] [MINMATCHLEN n] [WITHMATCHLEN]

Tìm chuỗi con chung dài nhất giữa hai key chuỗi, có thể trả về độ dài hoặc vị trí các đoạn khớp. Hữu ích khi so sánh phiên bản văn bản hoặc chuỗi ADN.

Độ phức tạp: O(N*M) với N và M là độ dài hai chuỗiTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

LCS doc:v1 doc:v2 LEN
LPUSH
List

LPUSH key element [element ...]

Chèn một hoặc nhiều phần tử vào đầu danh sách, tự tạo danh sách nếu key chưa tồn tại. Kết hợp với LTRIM để giữ danh sách hoạt động gần nhất có kích thước cố định.

Độ phức tạp: O(1) cho mỗi phần tửTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

LPUSH feed:user:1 post-1001 post-1002
RPUSH
List

RPUSH key element [element ...]

Chèn phần tử vào cuối danh sách. Cặp RPUSH và LPOP tạo thành hàng đợi vào trước ra trước cơ bản.

Độ phức tạp: O(1) cho mỗi phần tửTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

RPUSH queue:email job-501 job-502
LPUSHX
List

LPUSHX key element [element ...]

Chỉ chèn vào đầu danh sách khi key đã tồn tại và đang là danh sách, không tự tạo key mới.

Độ phức tạp: O(1) cho mỗi phần tửTừ Redis 2.2.0

Ví dụ chạy được trong redis-cli

LPUSHX feed:user:1 post-1003
RPUSHX
List

RPUSHX key element [element ...]

Chỉ chèn vào cuối danh sách khi key đã tồn tại. Dùng khi bạn không muốn tự sinh hàng đợi rỗng do gõ nhầm tên key.

Độ phức tạp: O(1) cho mỗi phần tửTừ Redis 2.2.0

Ví dụ chạy được trong redis-cli

RPUSHX queue:email job-503
LPOP
List

LPOP key [count]

Lấy và xóa phần tử ở đầu danh sách, có thể lấy nhiều phần tử một lần bằng tham số count từ Redis 6.2.

Độ phức tạp: O(N) với N là số phần tử lấy raTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

LPOP queue:email 10
RPOP
List

RPOP key [count]

Lấy và xóa phần tử ở cuối danh sách. Kết hợp LPUSH và RPOP cho ra hàng đợi vào trước ra trước theo chiều ngược lại.

Độ phức tạp: O(N) với N là số phần tử lấy raTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

RPOP queue:email 5
LMPOP
List

LMPOP numkeys key [key ...] LEFT|RIGHT [COUNT n]

Lấy phần tử từ danh sách không rỗng đầu tiên trong nhóm key được liệt kê. Thay thế gọn cho việc thăm dò lần lượt nhiều hàng đợi ưu tiên.

Độ phức tạp: O(N+M) với N là số key và M là số phần tử lấy raTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

LMPOP 2 queue:high queue:low LEFT COUNT 5
BLPOP
List

BLPOP key [key ...] timeout

Bản chờ của LPOP, kết nối bị chặn cho tới khi có phần tử hoặc hết thời gian chờ. Cho phép làm hàng đợi tác vụ không cần vòng lặp thăm dò.

Độ phức tạp: O(N) với N là số key được truyềnTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

BLPOP queue:email 5
BRPOP
List

BRPOP key [key ...] timeout

Bản chờ của RPOP. Timeout bằng 0 nghĩa là chờ vô hạn, cần cân nhắc kỹ với ứng dụng có giới hạn số kết nối.

Độ phức tạp: O(N) với N là số key được truyềnTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

BRPOP queue:email 5
BLMPOP
List

BLMPOP timeout numkeys key [key ...] LEFT|RIGHT [COUNT n]

Bản chờ của LMPOP, gom nhiều hàng đợi ưu tiên vào một lệnh chờ duy nhất thay vì mở nhiều kết nối chờ.

Độ phức tạp: O(N+M) với N là số key và M là số phần tử lấy raTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

BLMPOP 5 2 queue:high queue:low LEFT COUNT 3
LRANGE
List
Nguy hiểm trên production

LRANGE key start stop

Lấy một dải phần tử theo chỉ số, chấp nhận chỉ số âm. LRANGE key 0 -1 trả về toàn bộ danh sách nên rất nguy hiểm với danh sách lớn.

Độ phức tạp: O(S+N) với S là khoảng cách tới phần tử đầu dải và N là số phần tử trả vềTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

LRANGE feed:user:1 0 19

Nên dùng thay thế

Không bao giờ chạy LRANGE key 0 -1 trên danh sách lớn. Hãy phân trang theo lô nhỏ như LRANGE key 0 99, LRANGE key 100 199, và giữ danh sách gọn bằng LTRIM sau mỗi lần ghi.

LLEN
List

LLEN key

Trả về số phần tử trong danh sách. Key không tồn tại trả về 0, key thuộc kiểu khác báo lỗi WRONGTYPE.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

LLEN queue:email
LINDEX
List

LINDEX key index

Lấy phần tử tại một chỉ số, chỉ số âm đếm ngược từ cuối. Vì danh sách là liên kết nên truy cập phần tử ở giữa phải duyệt tuần tự.

Độ phức tạp: O(N) với N là số phần tử phải duyệt quaTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

LINDEX feed:user:1 0
LSET
List

LSET key index element

Ghi đè phần tử tại chỉ số cho trước, báo lỗi nếu chỉ số nằm ngoài phạm vi danh sách.

Độ phức tạp: O(N) với N là số phần tử phải duyệt quaTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

LSET feed:user:1 0 post-9999
LINSERT
List

LINSERT key BEFORE|AFTER pivot element

Chèn phần tử ngay trước hoặc ngay sau lần xuất hiện đầu tiên của giá trị mốc. Trả về -1 khi không tìm thấy mốc.

Độ phức tạp: O(N) với N là số phần tử phải duyệt tới mốcTừ Redis 2.2.0

Ví dụ chạy được trong redis-cli

LINSERT feed:user:1 BEFORE post-1001 post-1000
LREM
List

LREM key count element

Xóa các phần tử bằng giá trị cho trước, count dương xóa từ đầu, count âm xóa từ cuối, count bằng 0 xóa hết.

Độ phức tạp: O(N+M) với N là độ dài danh sách và M là số phần tử bị xóaTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

LREM queue:email 1 job-501
LTRIM
List

LTRIM key start stop

Cắt danh sách chỉ giữ lại dải chỉ định, phần ngoài dải bị xóa vĩnh viễn. Là cách chuẩn giữ danh sách hoạt động gần đây ở kích thước cố định.

Độ phức tạp: O(N) với N là số phần tử bị loại bỏTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

LTRIM feed:user:1 0 99
LMOVE
List

LMOVE source destination LEFT|RIGHT LEFT|RIGHT

Chuyển nguyên tử một phần tử từ danh sách này sang danh sách khác, chọn được đầu hay cuối cho cả hai phía. Nền tảng của mẫu hàng đợi tin cậy.

Độ phức tạp: O(1)Từ Redis 6.2.0

Ví dụ chạy được trong redis-cli

LMOVE queue:pending queue:processing LEFT RIGHT
RPOPLPUSH
List

RPOPLPUSH source destination

Lấy phần tử cuối danh sách nguồn và đẩy vào đầu danh sách đích trong một thao tác nguyên tử. Từ Redis 6.2 nên chuyển sang LMOVE.

Độ phức tạp: O(1)Từ Redis 1.2.0

Ví dụ chạy được trong redis-cli

RPOPLPUSH queue:pending queue:processing
BLMOVE
List

BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout

Bản chờ của LMOVE, chặn tới khi danh sách nguồn có phần tử. Cách chuẩn để tiến trình xử lý lấy việc mà không mất việc nếu tiến trình chết giữa chừng.

Độ phức tạp: O(1)Từ Redis 6.2.0

Ví dụ chạy được trong redis-cli

BLMOVE queue:pending queue:processing LEFT RIGHT 5
BRPOPLPUSH
List

BRPOPLPUSH source destination timeout

Bản chờ của RPOPLPUSH, đã bị đánh dấu cũ từ Redis 6.2 và nên thay bằng BLMOVE.

Độ phức tạp: O(1)Từ Redis 2.2.0

Ví dụ chạy được trong redis-cli

BRPOPLPUSH queue:pending queue:processing 5
LPOS
List

LPOS key element [RANK r] [COUNT n] [MAXLEN len]

Tìm chỉ số của phần tử trong danh sách, hỗ trợ tìm nhiều lần xuất hiện và giới hạn số phần tử quét bằng MAXLEN.

Độ phức tạp: O(N) với N là số phần tử phải quétTừ Redis 6.0.6

Ví dụ chạy được trong redis-cli

LPOS queue:email job-502 COUNT 1
SADD
Set

SADD key member [member ...]

Thêm một hoặc nhiều thành viên vào tập hợp, tự bỏ qua thành viên đã có. Trả về số thành viên thật sự được thêm mới.

Độ phức tạp: O(1) cho mỗi thành viênTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SADD tags:post:1 redis cache database
SREM
Set

SREM key member [member ...]

Xóa thành viên khỏi tập hợp, bỏ qua thành viên không tồn tại. Tập hợp rỗng sẽ tự bị xóa khỏi keyspace.

Độ phức tạp: O(N) với N là số thành viên truyền vàoTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SREM tags:post:1 cache
SPOP
Set

SPOP key [count]

Lấy và xóa ngẫu nhiên một hoặc nhiều thành viên. Dùng cho bốc thăm, chia mẫu ngẫu nhiên hoặc hàng đợi không cần thứ tự.

Độ phức tạp: O(N) với N là số thành viên lấy raTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SPOP lottery:pool 3
SRANDMEMBER
Set

SRANDMEMBER key [count]

Lấy ngẫu nhiên thành viên mà không xóa. Count âm cho phép trả về phần tử lặp lại, count dương đảm bảo các phần tử khác nhau.

Độ phức tạp: O(N) với N là số thành viên trả vềTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SRANDMEMBER tags:post:1 2
SMOVE
Set

SMOVE source destination member

Chuyển nguyên tử một thành viên từ tập hợp này sang tập hợp khác. Nếu thành viên không có trong nguồn thì không làm gì cả.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SMOVE users:trial users:paid user-1001
SCARD
Set

SCARD key

Đếm số thành viên của tập hợp. Redis lưu sẵn số lượng nên lệnh này luôn nhanh dù tập hợp lớn tới đâu.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SCARD tags:post:1
SISMEMBER
Set

SISMEMBER key member

Kiểm tra một giá trị có thuộc tập hợp không, trả về 1 hoặc 0. Đây là cách kiểm tra thành viên rẻ nhất, hãy dùng thay cho việc kéo cả tập hợp về ứng dụng.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SISMEMBER tags:post:1 redis
SMISMEMBER
Set

SMISMEMBER key member [member ...]

Kiểm tra nhiều thành viên cùng lúc, trả về mảng 1 và 0 theo đúng thứ tự truyền vào. Tiết kiệm nhiều vòng đi mạng so với gọi SISMEMBER lặp lại.

Độ phức tạp: O(N) với N là số thành viên kiểm traTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

SMISMEMBER tags:post:1 redis mysql cache
SMEMBERS
Set
Nguy hiểm trên production

SMEMBERS key

Trả về toàn bộ thành viên của tập hợp trong một lần. Với tập hợp hàng triệu phần tử, lệnh này chặn tiến trình chính và tạo gói trả về khổng lồ.

Độ phức tạp: O(N) với N là kích thước tập hợpTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SMEMBERS tags:post:1

Nên dùng thay thế

Dùng SSCAN key 0 COUNT 100 để duyệt theo lô, hoặc SISMEMBER và SMISMEMBER nếu bạn chỉ cần kiểm tra thành viên. Chỉ dùng SMEMBERS khi chắc chắn tập hợp dưới vài trăm phần tử.

SINTER
Set

SINTER key [key ...]

Trả về giao của các tập hợp. Redis tối ưu bằng cách bắt đầu từ tập hợp nhỏ nhất, nhưng kết quả vẫn có thể rất lớn.

Độ phức tạp: O(N*M) với N là kích thước tập nhỏ nhất và M là số tập hợpTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SINTER tags:redis tags:cache
SINTERCARD
Set

SINTERCARD numkeys key [key ...] [LIMIT n]

Đếm số phần tử trong giao mà không trả về danh sách phần tử, kèm tùy chọn LIMIT để dừng sớm. Rất hợp khi chỉ cần biết có bao nhiêu điểm chung.

Độ phức tạp: O(N*M) với N là kích thước tập nhỏ nhất và M là số tập hợpTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

SINTERCARD 2 tags:redis tags:cache LIMIT 100
SINTERSTORE
Set

SINTERSTORE destination key [key ...]

Tính giao và lưu thẳng vào key đích thay vì gửi về client. Giữ dữ liệu lớn ở lại phía máy chủ, tiết kiệm băng thông.

Độ phức tạp: O(N*M) với N là kích thước tập nhỏ nhất và M là số tập hợpTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SINTERSTORE result:common tags:redis tags:cache
SUNION
Set

SUNION key [key ...]

Trả về hợp của các tập hợp, mỗi phần tử chỉ xuất hiện một lần. Kích thước kết quả bằng tổng các tập nên cần thận trọng.

Độ phức tạp: O(N) với N là tổng số phần tử của mọi tập hợpTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SUNION tags:redis tags:cache
SUNIONSTORE
Set

SUNIONSTORE destination key [key ...]

Tính hợp rồi lưu vào key đích, ghi đè key đích nếu đã tồn tại.

Độ phức tạp: O(N) với N là tổng số phần tử của mọi tập hợpTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SUNIONSTORE result:all tags:redis tags:cache
SDIFF
Set

SDIFF key [key ...]

Trả về hiệu của tập hợp thứ nhất trừ đi các tập hợp còn lại. Hay dùng để tìm nhóm người dùng chưa thực hiện một hành động.

Độ phức tạp: O(N) với N là tổng số phần tử của mọi tập hợpTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SDIFF users:all users:purchased
SDIFFSTORE
Set

SDIFFSTORE destination key [key ...]

Tính hiệu rồi lưu vào key đích. Đặt hạn dùng cho key đích ngay sau đó để nó không nằm lại mãi trong bộ nhớ.

Độ phức tạp: O(N) với N là tổng số phần tử của mọi tập hợpTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SDIFFSTORE result:not-bought users:all users:purchased
SSCAN
Set

SSCAN key cursor [MATCH pattern] [COUNT n]

Duyệt tập hợp theo con trỏ, mỗi lần trả về một lô nhỏ. Đây là cách an toàn thay thế SMEMBERS trên tập hợp lớn.

Độ phức tạp: O(1) cho mỗi lần gọi, O(N) cho trọn vòng duyệtTừ Redis 2.8.0

Ví dụ chạy được trong redis-cli

SSCAN tags:post:1 0 COUNT 100
ZADD
Sorted Set

ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

Thêm thành viên kèm điểm số vào tập hợp có thứ tự, cập nhật điểm nếu thành viên đã tồn tại. GT và LT chỉ cho phép điểm tăng hoặc giảm, rất hợp cho bảng xếp hạng.

Độ phức tạp: O(log(N)) cho mỗi thành viênTừ Redis 1.2.0

Ví dụ chạy được trong redis-cli

ZADD leaderboard 1500 player-1 1200 player-2
ZINCRBY
Sorted Set

ZINCRBY key increment member

Cộng thêm điểm cho một thành viên, tự tạo thành viên với điểm bằng mức cộng nếu chưa tồn tại. Nguyên tử nên an toàn khi nhiều tiến trình cùng ghi điểm.

Độ phức tạp: O(log(N))Từ Redis 1.2.0

Ví dụ chạy được trong redis-cli

ZINCRBY leaderboard 50 player-1
ZREM
Sorted Set

ZREM key member [member ...]

Xóa một hoặc nhiều thành viên khỏi tập hợp có thứ tự. Trả về số thành viên thật sự bị xóa.

Độ phức tạp: O(M*log(N)) với M là số thành viên bị xóaTừ Redis 1.2.0

Ví dụ chạy được trong redis-cli

ZREM leaderboard player-2
ZSCORE
Sorted Set

ZSCORE key member

Đọc điểm số của một thành viên, trả về nil nếu thành viên không tồn tại.

Độ phức tạp: O(1)Từ Redis 1.2.0

Ví dụ chạy được trong redis-cli

ZSCORE leaderboard player-1
ZMSCORE
Sorted Set

ZMSCORE key member [member ...]

Đọc điểm của nhiều thành viên trong một lệnh, trả về mảng theo đúng thứ tự truyền vào.

Độ phức tạp: O(N) với N là số thành viên truy vấnTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

ZMSCORE leaderboard player-1 player-2 player-3
ZCARD
Sorted Set

ZCARD key

Đếm tổng số thành viên trong tập hợp có thứ tự, luôn nhanh vì Redis lưu sẵn con số này.

Độ phức tạp: O(1)Từ Redis 1.2.0

Ví dụ chạy được trong redis-cli

ZCARD leaderboard
ZCOUNT
Sorted Set

ZCOUNT key min max

Đếm số thành viên có điểm nằm trong khoảng cho trước. Dùng dấu ngoặc đơn để loại trừ biên và inf cho vô cực.

Độ phức tạp: O(log(N))Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

ZCOUNT leaderboard 1000 2000
ZLEXCOUNT
Sorted Set

ZLEXCOUNT key min max

Đếm thành viên trong khoảng theo thứ tự từ điển, chỉ đúng khi mọi thành viên có cùng điểm số.

Độ phức tạp: O(log(N))Từ Redis 2.8.9

Ví dụ chạy được trong redis-cli

ZLEXCOUNT autocomplete [a [az
ZRANGE
Sorted Set

ZRANGE key start stop [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

Lấy dải thành viên theo thứ hạng, theo điểm hoặc theo từ điển. Từ Redis 6.2 lệnh này gộp luôn chức năng của các biến thể ZRANGEBYSCORE và ZREVRANGE.

Độ phức tạp: O(log(N)+M) với M là số phần tử trả vềTừ Redis 1.2.0

Ví dụ chạy được trong redis-cli

ZRANGE leaderboard 0 9 REV WITHSCORES
ZRANGEBYSCORE
Sorted Set

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

Lấy thành viên có điểm trong khoảng, sắp tăng dần. Từ Redis 6.2 nên chuyển sang ZRANGE với tùy chọn BYSCORE.

Độ phức tạp: O(log(N)+M) với M là số phần tử trả vềTừ Redis 1.0.5

Ví dụ chạy được trong redis-cli

ZRANGEBYSCORE delayed:jobs -inf 1755300000 LIMIT 0 10
ZRANGEBYLEX
Sorted Set

ZRANGEBYLEX key min max [LIMIT offset count]

Lấy thành viên theo khoảng từ điển, chỉ dùng khi tất cả thành viên có cùng điểm. Là cách dựng gợi ý tìm kiếm theo tiền tố.

Độ phức tạp: O(log(N)+M) với M là số phần tử trả vềTừ Redis 2.8.9

Ví dụ chạy được trong redis-cli

ZRANGEBYLEX autocomplete [ban [ban\xff LIMIT 0 10
ZREVRANGE
Sorted Set

ZREVRANGE key start stop [WITHSCORES]

Lấy dải thành viên theo thứ hạng giảm dần, tức từ điểm cao xuống thấp. Cách kinh điển lấy bảng xếp hạng mười người dẫn đầu.

Độ phức tạp: O(log(N)+M) với M là số phần tử trả vềTừ Redis 1.2.0

Ví dụ chạy được trong redis-cli

ZREVRANGE leaderboard 0 9 WITHSCORES
ZREVRANGEBYSCORE
Sorted Set

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

Lấy thành viên theo khoảng điểm nhưng sắp giảm dần, lưu ý thứ tự tham số là max trước min.

Độ phức tạp: O(log(N)+M) với M là số phần tử trả vềTừ Redis 2.2.0

Ví dụ chạy được trong redis-cli

ZREVRANGEBYSCORE leaderboard 2000 1000 LIMIT 0 10
ZREVRANGEBYLEX
Sorted Set

ZREVRANGEBYLEX key max min [LIMIT offset count]

Lấy thành viên theo khoảng từ điển ngược, dùng cho gợi ý theo hậu tố hoặc duyệt ngược danh sách chữ cái.

Độ phức tạp: O(log(N)+M) với M là số phần tử trả vềTừ Redis 2.8.9

Ví dụ chạy được trong redis-cli

ZREVRANGEBYLEX autocomplete [banz [ban LIMIT 0 10
ZRANGESTORE
Sorted Set

ZRANGESTORE dst src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count]

Lấy dải thành viên rồi lưu thẳng vào key đích, không gửi dữ liệu về client. Rất hợp để dựng bảng xếp hạng con ngay trên máy chủ.

Độ phức tạp: O(log(N)+M) với M là số phần tử được lưuTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

ZRANGESTORE leaderboard:top10 leaderboard 0 9 REV
ZRANK
Sorted Set

ZRANK key member [WITHSCORE]

Trả về thứ hạng của thành viên tính từ 0, theo chiều điểm tăng dần. Trả về nil khi thành viên không tồn tại.

Độ phức tạp: O(log(N))Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

ZRANK leaderboard player-1
ZREVRANK
Sorted Set

ZREVRANK key member [WITHSCORE]

Trả về thứ hạng theo chiều điểm giảm dần, tức hạng 0 là người điểm cao nhất. Đây là con số bạn muốn hiển thị cho người chơi.

Độ phức tạp: O(log(N))Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

ZREVRANK leaderboard player-1
ZREMRANGEBYRANK
Sorted Set

ZREMRANGEBYRANK key start stop

Xóa các thành viên theo khoảng thứ hạng. Cách chuẩn cắt bảng xếp hạng chỉ giữ lại nhóm dẫn đầu.

Độ phức tạp: O(log(N)+M) với M là số phần tử bị xóaTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

ZREMRANGEBYRANK leaderboard 0 -101
ZREMRANGEBYSCORE
Sorted Set

ZREMRANGEBYSCORE key min max

Xóa thành viên có điểm trong khoảng chỉ định. Dùng để dọn các mục đã quá hạn trong hàng đợi trễ dựa trên dấu thời gian.

Độ phức tạp: O(log(N)+M) với M là số phần tử bị xóaTừ Redis 1.2.0

Ví dụ chạy được trong redis-cli

ZREMRANGEBYSCORE delayed:jobs -inf 1755300000
ZREMRANGEBYLEX
Sorted Set

ZREMRANGEBYLEX key min max

Xóa thành viên theo khoảng từ điển, chỉ dùng khi mọi thành viên có cùng điểm số.

Độ phức tạp: O(log(N)+M) với M là số phần tử bị xóaTừ Redis 2.8.9

Ví dụ chạy được trong redis-cli

ZREMRANGEBYLEX autocomplete [a [az
ZPOPMIN
Sorted Set

ZPOPMIN key [count]

Lấy và xóa thành viên có điểm thấp nhất. Kết hợp với điểm là dấu thời gian sẽ cho ra hàng đợi ưu tiên theo thời hạn.

Độ phức tạp: O(log(N)*M) với M là số phần tử lấy raTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

ZPOPMIN delayed:jobs 1
ZPOPMAX
Sorted Set

ZPOPMAX key [count]

Lấy và xóa thành viên có điểm cao nhất, dùng cho hàng đợi ưu tiên chọn mục quan trọng nhất trước.

Độ phức tạp: O(log(N)*M) với M là số phần tử lấy raTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

ZPOPMAX priority:jobs 1
ZMPOP
Sorted Set

ZMPOP numkeys key [key ...] MIN|MAX [COUNT n]

Lấy phần tử từ tập hợp có thứ tự không rỗng đầu tiên trong nhóm key. Gộp việc thăm dò nhiều hàng đợi ưu tiên vào một lệnh.

Độ phức tạp: O(K)+O(M*log(N)) với K là số key và M là số phần tử lấy raTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

ZMPOP 2 jobs:high jobs:low MIN COUNT 1
BZPOPMIN
Sorted Set

BZPOPMIN key [key ...] timeout

Bản chờ của ZPOPMIN, chặn kết nối tới khi có phần tử hoặc hết thời gian chờ.

Độ phức tạp: O(log(N))Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

BZPOPMIN delayed:jobs 5
BZPOPMAX
Sorted Set

BZPOPMAX key [key ...] timeout

Bản chờ của ZPOPMAX, dùng cho tiến trình xử lý luôn ưu tiên mục điểm cao nhất.

Độ phức tạp: O(log(N))Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

BZPOPMAX priority:jobs 5
BZMPOP
Sorted Set

BZMPOP timeout numkeys key [key ...] MIN|MAX [COUNT n]

Bản chờ của ZMPOP, cho phép một tiến trình theo dõi nhiều hàng đợi ưu tiên trên một kết nối duy nhất.

Độ phức tạp: O(K)+O(M*log(N)) với K là số key và M là số phần tử lấy raTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

BZMPOP 5 2 jobs:high jobs:low MIN COUNT 1
ZRANDMEMBER
Sorted Set

ZRANDMEMBER key [count [WITHSCORES]]

Lấy ngẫu nhiên thành viên mà không xóa. Count âm cho phép trùng lặp, count dương đảm bảo các thành viên khác nhau.

Độ phức tạp: O(N) với N là số thành viên trả vềTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

ZRANDMEMBER leaderboard 3 WITHSCORES
ZUNION
Sorted Set

ZUNION numkeys key [key ...] [WEIGHTS w ...] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]

Trả về hợp của nhiều tập hợp có thứ tự với trọng số tùy chọn cho từng tập. Dùng để trộn nhiều nguồn điểm thành một bảng xếp hạng tổng.

Độ phức tạp: O(N)+O(M*log(M)) với N là tổng phần tử và M là số phần tử kết quảTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

ZUNION 2 score:games score:quiz WEIGHTS 1 2 WITHSCORES
ZUNIONSTORE
Sorted Set

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS w ...] [AGGREGATE SUM|MIN|MAX]

Tính hợp rồi lưu vào key đích thay vì gửi về client, giữ khối lượng dữ liệu lớn ở lại máy chủ.

Độ phức tạp: O(N)+O(M*log(M)) với N là tổng phần tử và M là số phần tử kết quảTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

ZUNIONSTORE leaderboard:total 2 score:games score:quiz WEIGHTS 1 2
ZINTER
Sorted Set

ZINTER numkeys key [key ...] [WEIGHTS w ...] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]

Trả về giao của các tập hợp có thứ tự, điểm được gộp theo phép tổng hợp chỉ định.

Độ phức tạp: O(N*K)+O(M*log(M)) với K là số tập hợpTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

ZINTER 2 score:games score:quiz WITHSCORES
ZINTERSTORE
Sorted Set

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS w ...] [AGGREGATE SUM|MIN|MAX]

Tính giao rồi lưu vào key đích. Nhớ đặt hạn dùng cho key kết quả để nó không tồn tại mãi.

Độ phức tạp: O(N*K)+O(M*log(M)) với K là số tập hợpTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

ZINTERSTORE leaderboard:both 2 score:games score:quiz
ZINTERCARD
Sorted Set

ZINTERCARD numkeys key [key ...] [LIMIT n]

Đếm số phần tử trong giao mà không dựng ra tập kết quả, có LIMIT để dừng sớm khi chỉ cần biết đã vượt ngưỡng.

Độ phức tạp: O(N*K) với K là số tập hợpTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

ZINTERCARD 2 score:games score:quiz LIMIT 100
ZDIFF
Sorted Set

ZDIFF numkeys key [key ...] [WITHSCORES]

Trả về hiệu giữa tập hợp đầu tiên và các tập còn lại, giữ nguyên điểm của tập đầu tiên.

Độ phức tạp: O(L+M*log(M)) với L là tổng phần tử và M là số phần tử kết quảTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

ZDIFF 2 score:games score:quiz WITHSCORES
ZDIFFSTORE
Sorted Set

ZDIFFSTORE destination numkeys key [key ...]

Tính hiệu rồi lưu vào key đích, ghi đè nếu key đích đã tồn tại.

Độ phức tạp: O(L+M*log(M)) với L là tổng phần tử và M là số phần tử kết quảTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

ZDIFFSTORE result:only-games 2 score:games score:quiz
ZSCAN
Sorted Set

ZSCAN key cursor [MATCH pattern] [COUNT n]

Duyệt tập hợp có thứ tự theo con trỏ, trả về từng lô cặp thành viên và điểm. Cách an toàn để xuất toàn bộ bảng xếp hạng lớn.

Độ phức tạp: O(1) cho mỗi lần gọi, O(N) cho trọn vòng duyệtTừ Redis 2.8.0

Ví dụ chạy được trong redis-cli

ZSCAN leaderboard 0 COUNT 100
HSET
Hash

HSET key field value [field value ...]

Ghi một hoặc nhiều trường vào hash, tạo hash nếu key chưa tồn tại. Từ Redis 4.0 lệnh này nhận nhiều cặp và thay thế HMSET.

Độ phức tạp: O(1) cho mỗi trườngTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HSET user:1 name phatnguyen email a@b.com age 30
HSETNX
Hash

HSETNX key field value

Chỉ ghi trường khi trường đó chưa tồn tại trong hash, trả về 1 nếu ghi được. Dùng để khởi tạo giá trị mặc định mà không đè dữ liệu có sẵn.

Độ phức tạp: O(1)Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HSETNX user:1 role member
HGET
Hash

HGET key field

Đọc giá trị của một trường trong hash, trả về nil nếu trường hoặc key không tồn tại.

Độ phức tạp: O(1)Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HGET user:1 name
HMSET
Hash

HMSET key field value [field value ...]

Ghi nhiều trường cùng lúc. Đã bị đánh dấu cũ từ Redis 4.0, mã mới nên dùng HSET vì HSET đã nhận nhiều cặp.

Độ phức tạp: O(N) với N là số trườngTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HMSET user:2 name lan email lan@b.com
HMGET
Hash

HMGET key field [field ...]

Đọc nhiều trường trong một lệnh, trả về mảng theo đúng thứ tự truyền vào với nil cho trường không tồn tại. Đây là cách nên dùng thay cho HGETALL khi bạn biết mình cần trường nào.

Độ phức tạp: O(N) với N là số trườngTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HMGET user:1 name email age
HGETALL
Hash
Nguy hiểm trên production

HGETALL key

Trả về toàn bộ trường và giá trị của hash. Trên hash có hàng chục nghìn trường, lệnh này chặn tiến trình chính và tạo gói trả về rất lớn.

Độ phức tạp: O(N) với N là số trường trong hashTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HGETALL user:1

Nên dùng thay thế

Dùng HMGET khi biết trước danh sách trường cần đọc, hoặc HSCAN key 0 COUNT 100 để duyệt theo lô. Chỉ dùng HGETALL cho hash nhỏ dưới vài trăm trường.

HDEL
Hash

HDEL key field [field ...]

Xóa một hoặc nhiều trường khỏi hash. Hash rỗng sẽ tự bị xóa khỏi keyspace.

Độ phức tạp: O(N) với N là số trường truyền vàoTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HDEL user:1 age
HLEN
Hash

HLEN key

Đếm số trường trong hash. Luôn nhanh vì Redis lưu sẵn con số này.

Độ phức tạp: O(1)Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HLEN user:1
HEXISTS
Hash

HEXISTS key field

Kiểm tra một trường có tồn tại trong hash không, trả về 1 hoặc 0.

Độ phức tạp: O(1)Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HEXISTS user:1 email
HKEYS
Hash
Nguy hiểm trên production

HKEYS key

Trả về danh sách tên tất cả các trường trong hash. Vẫn phải duyệt toàn bộ hash nên nguy hiểm y như HGETALL trên hash lớn.

Độ phức tạp: O(N) với N là số trường trong hashTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HKEYS user:1

Nên dùng thay thế

Dùng HSCAN key 0 COUNT 100 với NOVALUES từ Redis 7.4 để duyệt tên trường theo lô, hoặc lưu sẵn danh sách trường ở một key riêng nếu bạn cần đọc nó thường xuyên.

HVALS
Hash
Nguy hiểm trên production

HVALS key

Trả về danh sách giá trị của tất cả các trường. Cùng chi phí và cùng rủi ro như HGETALL.

Độ phức tạp: O(N) với N là số trường trong hashTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HVALS user:1

Nên dùng thay thế

Dùng HSCAN key 0 COUNT 100 để duyệt theo lô, hoặc HMGET nếu bạn chỉ cần một tập trường xác định.

HINCRBY
Hash

HINCRBY key field increment

Cộng một số nguyên vào giá trị của trường, nhận cả số âm. Cách gọn để gom nhiều bộ đếm liên quan vào một key duy nhất.

Độ phức tạp: O(1)Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

HINCRBY stats:2026-08 pageview 1
HINCRBYFLOAT
Hash

HINCRBYFLOAT key field increment

Cộng một số thực vào giá trị của trường, trả về giá trị mới dạng chuỗi.

Độ phức tạp: O(1)Từ Redis 2.6.0

Ví dụ chạy được trong redis-cli

HINCRBYFLOAT cart:1 total 199.99
HRANDFIELD
Hash

HRANDFIELD key [count [WITHVALUES]]

Lấy ngẫu nhiên tên trường từ hash, count âm cho phép trùng lặp. Dùng để lấy mẫu mà không phải kéo cả hash về.

Độ phức tạp: O(N) với N là số trường trả vềTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

HRANDFIELD user:1 2 WITHVALUES
HSTRLEN
Hash

HSTRLEN key field

Trả về độ dài chuỗi của giá trị trong một trường mà không phải đọc cả giá trị về.

Độ phức tạp: O(1)Từ Redis 3.2.0

Ví dụ chạy được trong redis-cli

HSTRLEN user:1 name
HSCAN
Hash

HSCAN key cursor [MATCH pattern] [COUNT n] [NOVALUES]

Duyệt hash theo con trỏ, trả về từng lô cặp trường và giá trị. Tùy chọn NOVALUES từ Redis 7.4 chỉ trả về tên trường, tiết kiệm băng thông.

Độ phức tạp: O(1) cho mỗi lần gọi, O(N) cho trọn vòng duyệtTừ Redis 2.8.0

Ví dụ chạy được trong redis-cli

HSCAN user:1 0 COUNT 100
HEXPIRE
Hash

HEXPIRE key seconds [NX|XX|GT|LT] FIELDS numfields field [field ...]

Đặt hạn dùng cho từng trường riêng lẻ bên trong hash, không phải cho cả key. Tính năng mới từ Redis 7.4 giúp gom nhiều mục có hạn dùng khác nhau vào một hash.

Độ phức tạp: O(N) với N là số trường được đặt hạnTừ Redis 7.4.0

Ví dụ chạy được trong redis-cli

HEXPIRE session:1 600 FIELDS 1 token
HTTL
Hash

HTTL key FIELDS numfields field [field ...]

Đọc thời gian còn lại của từng trường trong hash, trả về -1 khi trường không có hạn dùng và -2 khi trường không tồn tại.

Độ phức tạp: O(N) với N là số trường truy vấnTừ Redis 7.4.0

Ví dụ chạy được trong redis-cli

HTTL session:1 FIELDS 1 token
HPERSIST
Hash

HPERSIST key FIELDS numfields field [field ...]

Gỡ bỏ hạn dùng của các trường trong hash, biến chúng thành trường tồn tại vĩnh viễn.

Độ phức tạp: O(N) với N là số trường truyền vàoTừ Redis 7.4.0

Ví dụ chạy được trong redis-cli

HPERSIST session:1 FIELDS 1 token
DEL
Key
Nguy hiểm trên production

DEL key [key ...]

Xóa một hoặc nhiều key, giải phóng bộ nhớ ngay trong tiến trình chính. Xóa một key chứa hàng triệu phần tử sẽ chặn máy chủ trong nhiều mili giây tới cả giây.

Độ phức tạp: O(N) với N là số phần tử bên trong các key bị xóaTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

DEL cache:home cache:about

Nên dùng thay thế

Với key lớn như tập hợp hoặc hash hàng triệu phần tử, hãy dùng UNLINK để việc thu hồi bộ nhớ chạy ở luồng nền. DEL chỉ an toàn với key nhỏ.

UNLINK
Key

UNLINK key [key ...]

Gỡ key khỏi keyspace ngay lập tức rồi để luồng nền thu hồi bộ nhớ. Đây là lệnh xóa mặc định nên dùng trên môi trường thật.

Độ phức tạp: O(1) cho mỗi key, phần thu hồi bộ nhớ chạy ở luồng nềnTừ Redis 4.0.0

Ví dụ chạy được trong redis-cli

UNLINK bigset:archive
EXISTS
Key

EXISTS key [key ...]

Kiểm tra key tồn tại, khi truyền nhiều key thì trả về tổng số key tồn tại, kể cả khi cùng một key được lặp lại.

Độ phức tạp: O(N) với N là số key truyền vàoTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

EXISTS user:1 user:2 user:3
EXPIRE
Key

EXPIRE key seconds [NX|XX|GT|LT]

Đặt hạn dùng tính bằng giây cho key. Các tùy chọn NX, XX, GT, LT từ Redis 7.0 cho phép chỉ đặt khi thỏa điều kiện, tránh vô tình rút ngắn hạn dùng.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

EXPIRE cache:home 300
EXPIREAT
Key

EXPIREAT key unix-time-seconds [NX|XX|GT|LT]

Đặt thời điểm hết hạn tuyệt đối theo dấu thời gian Unix tính bằng giây. Hợp khi nhiều key phải cùng hết hạn tại một mốc cố định.

Độ phức tạp: O(1)Từ Redis 1.2.0

Ví dụ chạy được trong redis-cli

EXPIREAT cache:daily 1755302400
PEXPIRE
Key

PEXPIRE key milliseconds [NX|XX|GT|LT]

Đặt hạn dùng tính bằng mili giây, dùng cho khóa phân tán và cửa sổ giới hạn tần suất dưới một giây.

Độ phức tạp: O(1)Từ Redis 2.6.0

Ví dụ chạy được trong redis-cli

PEXPIRE lock:order:1001 3000
PEXPIREAT
Key

PEXPIREAT key unix-time-milliseconds [NX|XX|GT|LT]

Đặt thời điểm hết hạn tuyệt đối theo dấu thời gian Unix tính bằng mili giây.

Độ phức tạp: O(1)Từ Redis 2.6.0

Ví dụ chạy được trong redis-cli

PEXPIREAT cache:daily 1755302400000
EXPIRETIME
Key

EXPIRETIME key

Trả về thời điểm hết hạn tuyệt đối của key tính bằng giây Unix, thay vì số giây còn lại như TTL. Rất tiện khi cần so sánh mốc hết hạn giữa nhiều key.

Độ phức tạp: O(1)Từ Redis 7.0.0

Ví dụ chạy được trong redis-cli

EXPIRETIME cache:home
PEXPIRETIME
Key

PEXPIRETIME key

Trả về thời điểm hết hạn tuyệt đối tính bằng mili giây Unix.

Độ phức tạp: O(1)Từ Redis 7.0.0

Ví dụ chạy được trong redis-cli

PEXPIRETIME cache:home
TTL
Key

TTL key

Trả về số giây còn lại trước khi key hết hạn. Giá trị -1 nghĩa là key tồn tại nhưng không có hạn dùng, -2 nghĩa là key không tồn tại.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

TTL cache:home
PTTL
Key

PTTL key

Giống TTL nhưng trả về số mili giây còn lại, cần thiết khi làm việc với khóa ngắn hạn.

Độ phức tạp: O(1)Từ Redis 2.6.0

Ví dụ chạy được trong redis-cli

PTTL lock:order:1001
PERSIST
Key

PERSIST key

Gỡ bỏ hạn dùng của key, biến nó thành key tồn tại vĩnh viễn. Trả về 1 nếu key có hạn dùng và đã được gỡ.

Độ phức tạp: O(1)Từ Redis 2.2.0

Ví dụ chạy được trong redis-cli

PERSIST cache:home
RENAME
Key

RENAME key newkey

Đổi tên key, ghi đè key đích nếu key đích đã tồn tại. Việc ghi đè này ngầm xóa key đích nên có thể chặn nếu key đích rất lớn.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

RENAME cache:home cache:home:old
RENAMENX
Key

RENAMENX key newkey

Đổi tên key nhưng chỉ khi key đích chưa tồn tại, trả về 0 nếu key đích đã có.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

RENAMENX cache:home cache:home:v2
TYPE
Key

TYPE key

Trả về kiểu dữ liệu của key: string, list, set, zset, hash hoặc stream. Cách nhanh nhất để gỡ lỗi WRONGTYPE.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

TYPE user:1
KEYS
Key
Nguy hiểm trên production

KEYS pattern

Trả về mọi key khớp mẫu bằng cách duyệt toàn bộ keyspace. Vì Redis xử lý lệnh trên một luồng, lệnh này khóa toàn bộ máy chủ trong suốt thời gian quét.

Độ phức tạp: O(N) với N là tổng số key trong cơ sở dữ liệuTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

KEYS user:*

Nên dùng thay thế

Luôn dùng SCAN 0 MATCH user:* COUNT 100 và lặp theo con trỏ. SCAN chỉ chiếm máy chủ trong từng lát rất ngắn, không khóa server. Nếu cần lọc theo kiểu, thêm TYPE hash vào SCAN.

SCAN
Key

SCAN cursor [MATCH pattern] [COUNT n] [TYPE type]

Duyệt keyspace theo con trỏ, mỗi lần trả về một lô nhỏ cùng con trỏ kế tiếp. Vòng duyệt kết thúc khi con trỏ trả về bằng 0.

Độ phức tạp: O(1) cho mỗi lần gọi, O(N) cho trọn vòng duyệtTừ Redis 2.8.0

Ví dụ chạy được trong redis-cli

SCAN 0 MATCH user:* COUNT 100 TYPE hash
RANDOMKEY
Key
Nguy hiểm trên production

RANDOMKEY

Trả về một key ngẫu nhiên trong cơ sở dữ liệu hiện tại. Bản thân một lần gọi rất rẻ, nhưng gọi trong vòng lặp để lấy mẫu là kiểu dùng sai phổ biến.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

RANDOMKEY

Nên dùng thay thế

Đừng gọi RANDOMKEY trong vòng lặp để lấy mẫu keyspace, khi phần lớn key đã hết hạn thì mỗi lần gọi phải thử lại nhiều lần và chi phí tăng vọt. Hãy dùng SCAN với COUNT vừa phải, hoặc redis-cli --memkeys nếu chỉ cần lấy mẫu để phân tích.

DUMP
Key

DUMP key

Xuất giá trị của key ra chuỗi nhị phân đã tuần tự hóa, kèm phiên bản và mã kiểm tra. Ghép với RESTORE để chuyển key giữa các máy chủ.

Độ phức tạp: O(1) cộng O(N*M) để tuần tự hóa giá trịTừ Redis 2.6.0

Ví dụ chạy được trong redis-cli

DUMP user:1
RESTORE
Key

RESTORE key ttl serialized-value [REPLACE] [ABSTTL] [IDLETIME s] [FREQ f]

Dựng lại key từ chuỗi nhị phân do DUMP tạo ra. TTL bằng 0 nghĩa là key không có hạn dùng.

Độ phức tạp: O(1) cộng O(N*M) để dựng lại giá trịTừ Redis 2.6.0

Ví dụ chạy được trong redis-cli

RESTORE user:1:copy 0 "\x00\x03abc\x0b\x00\x8f\xe6\xd0\x94\x9f\x1c\x0c\x1a" REPLACE
MOVE
Key

MOVE key db

Chuyển key sang một cơ sở dữ liệu khác trong cùng phiên bản, không làm gì nếu key đích đã tồn tại. Không dùng được trong chế độ cluster.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

MOVE user:1 1
COPY
Key

COPY source destination [DB n] [REPLACE]

Nhân bản giá trị của một key sang key mới, có thể sang cơ sở dữ liệu khác. Thay thế gọn cho cặp DUMP và RESTORE khi cùng một máy chủ.

Độ phức tạp: O(N) với N là số phần tử bên trong key nguồnTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

COPY user:1 user:1:backup REPLACE
TOUCH
Key

TOUCH key [key ...]

Chạm vào key để cập nhật thời gian truy cập cuối, trả về số key tồn tại. Hữu ích khi dùng chính sách loại bỏ theo tần suất hoặc thời gian nhàn rỗi.

Độ phức tạp: O(N) với N là số key truyền vàoTừ Redis 3.2.1

Ví dụ chạy được trong redis-cli

TOUCH user:1 user:2
OBJECT ENCODING
Key

OBJECT ENCODING key

Cho biết Redis đang lưu key bằng cách mã hóa nào, ví dụ listpack, hashtable, intset, skiplist, embstr hay raw. Đây là công cụ chính để kiểm chứng key có đang ở dạng nén bộ nhớ hay không.

Độ phức tạp: O(1)Từ Redis 2.2.3

Ví dụ chạy được trong redis-cli

OBJECT ENCODING user:1
OBJECT FREQ
Key

OBJECT FREQ key

Trả về bộ đếm tần suất truy cập của key, chỉ dùng được khi maxmemory-policy đang là allkeys-lfu hoặc volatile-lfu.

Độ phức tạp: O(1)Từ Redis 4.0.0

Ví dụ chạy được trong redis-cli

OBJECT FREQ user:1
OBJECT IDLETIME
Key

OBJECT IDLETIME key

Trả về số giây key không được truy cập, chỉ dùng được khi chính sách loại bỏ không phải dạng LFU. Dùng để tìm dữ liệu nguội cần dọn.

Độ phức tạp: O(1)Từ Redis 2.2.3

Ví dụ chạy được trong redis-cli

OBJECT IDLETIME user:1
OBJECT REFCOUNT
Key

OBJECT REFCOUNT key

Trả về số tham chiếu tới đối tượng. Với số nguyên nhỏ được chia sẻ, con số này rất lớn vì Redis dùng chung một đối tượng cho nhiều key.

Độ phức tạp: O(1)Từ Redis 2.2.3

Ví dụ chạy được trong redis-cli

OBJECT REFCOUNT user:1
SORT
Key
Nguy hiểm trên production

SORT key [BY pattern] [LIMIT offset count] [GET pattern ...] [ASC|DESC] [ALPHA] [STORE dst]

Sắp xếp phần tử của danh sách, tập hợp hoặc tập hợp có thứ tự, có thể lấy kèm dữ liệu từ key khác qua tùy chọn GET. Rất mạnh nhưng cũng rất tốn kém.

Độ phức tạp: O(N+M*log(M)) với N là số phần tử và M là số phần tử trả vềTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SORT queue:email LIMIT 0 10 ALPHA

Nên dùng thay thế

Trên tập lớn, SORT phải dựng bản sao và sắp xếp toàn bộ trong bộ nhớ, khóa server suốt thời gian đó. Hãy lưu sẵn dữ liệu vào Sorted Set rồi dùng ZRANGE, hoặc sắp xếp ở phía ứng dụng. Nếu chỉ đọc, dùng SORT_RO để lệnh chạy được trên bản sao.

SORT_RO
Key

SORT_RO key [BY pattern] [LIMIT offset count] [GET pattern ...] [ASC|DESC] [ALPHA]

Bản chỉ đọc của SORT, không có tùy chọn STORE nên chạy được trên nút bản sao. Chi phí vẫn y hệt SORT.

Độ phức tạp: O(N+M*log(M)) với N là số phần tử và M là số phần tử trả vềTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

SORT_RO queue:email LIMIT 0 10 ALPHA
XADD
Stream

XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT n]] *|id field value [field value ...]

Ghi một mục mới vào stream, dấu sao để Redis tự sinh mã theo dấu thời gian. Tùy chọn MAXLEN với dấu ngã cắt bớt gần đúng và rẻ hơn nhiều so với cắt chính xác.

Độ phức tạp: O(1) khi thêm mục mới, O(N) khi có cắt bớtTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XADD orders MAXLEN ~ 10000 * sku SKU-1001 qty 2
XLEN
Stream

XLEN key

Đếm số mục hiện có trong stream. Con số này giảm khi bạn cắt bớt bằng XTRIM hoặc xóa bằng XDEL.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XLEN orders
XRANGE
Stream

XRANGE key start end [COUNT n]

Đọc các mục trong khoảng mã, dùng dấu trừ và dấu cộng cho mã nhỏ nhất và lớn nhất. Luôn kèm COUNT để tránh kéo cả stream về.

Độ phức tạp: O(N) với N là số mục trả vềTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XRANGE orders - + COUNT 10
XREVRANGE
Stream

XREVRANGE key end start [COUNT n]

Giống XRANGE nhưng trả về theo thứ tự ngược, tiện để lấy các mục mới nhất. Lưu ý thứ tự tham số là end trước start.

Độ phức tạp: O(N) với N là số mục trả vềTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XREVRANGE orders + - COUNT 10
XREAD
Stream

XREAD [COUNT n] [BLOCK ms] STREAMS key [key ...] id [id ...]

Đọc mục mới từ một hoặc nhiều stream, dùng dấu đô la để chỉ lấy mục xuất hiện sau thời điểm gọi. Với BLOCK, lệnh chờ tới khi có dữ liệu mới.

Độ phức tạp: O(N) với N là số mục trả vềTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XREAD COUNT 10 BLOCK 5000 STREAMS orders $
XDEL
Stream

XDEL key id [id ...]

Xóa mục theo mã. Bộ nhớ không được giải phóng ngay vì stream lưu theo nút, mục chỉ bị đánh dấu là đã xóa.

Độ phức tạp: O(1) cho mỗi mãTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XDEL orders 1755300000000-0
XTRIM
Stream

XTRIM key MAXLEN|MINID [=|~] threshold [LIMIT n]

Cắt bớt stream theo độ dài tối đa hoặc theo mã nhỏ nhất được giữ lại. Dấu ngã cho phép cắt gần đúng theo ranh giới nút nên rẻ hơn nhiều.

Độ phức tạp: O(N) với N là số mục bị loại bỏTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XTRIM orders MAXLEN ~ 5000
XGROUP CREATE
Stream

XGROUP CREATE key group id|$ [MKSTREAM] [ENTRIESREAD n]

Tạo nhóm tiêu thụ trên stream, dấu đô la nghĩa là nhóm chỉ nhận mục mới từ giờ trở đi. MKSTREAM tự tạo stream nếu chưa tồn tại.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XGROUP CREATE orders workers $ MKSTREAM
XGROUP DESTROY
Stream

XGROUP DESTROY key group

Xóa nhóm tiêu thụ cùng toàn bộ danh sách mục đang chờ xác nhận của nhóm đó. Không xóa các mục trong stream.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XGROUP DESTROY orders workers
XGROUP CREATECONSUMER
Stream

XGROUP CREATECONSUMER key group consumer

Tạo tường minh một consumer trong nhóm mà không cần đọc mục nào. Tiện khi muốn đăng ký trước danh sách tiến trình xử lý.

Độ phức tạp: O(1)Từ Redis 6.2.0

Ví dụ chạy được trong redis-cli

XGROUP CREATECONSUMER orders workers worker-1
XGROUP DELCONSUMER
Stream

XGROUP DELCONSUMER key group consumer

Xóa một consumer khỏi nhóm và trả về số mục đang chờ xác nhận của consumer đó. Nhớ chuyển các mục này cho consumer khác trước khi xóa.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XGROUP DELCONSUMER orders workers worker-1
XGROUP SETID
Stream

XGROUP SETID key group id|$ [ENTRIESREAD n]

Đặt lại vị trí đọc cuối cùng của nhóm. Dùng để phát lại toàn bộ stream từ đầu bằng cách đặt về mã 0.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XGROUP SETID orders workers 0
XREADGROUP
Stream

XREADGROUP GROUP group consumer [COUNT n] [BLOCK ms] [NOACK] STREAMS key [key ...] >|id

Đọc mục theo nhóm tiêu thụ, dấu lớn hơn lấy mục chưa từng giao cho ai. Mỗi mục đã giao sẽ nằm trong danh sách chờ tới khi được XACK.

Độ phức tạp: O(1) cho mỗi mục trả vềTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XREADGROUP GROUP workers worker-1 COUNT 10 BLOCK 5000 STREAMS orders >
XACK
Stream

XACK key group id [id ...]

Xác nhận đã xử lý xong mục, gỡ nó khỏi danh sách chờ của nhóm. Quên gọi XACK là nguyên nhân số một khiến danh sách chờ phình to.

Độ phức tạp: O(1) cho mỗi mãTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XACK orders workers 1755300000000-0
XPENDING
Stream

XPENDING key group [[IDLE ms] start end count [consumer]]

Xem các mục đã giao nhưng chưa được xác nhận, có thể lọc theo thời gian nhàn rỗi và theo consumer. Đây là lệnh chẩn đoán chính khi tiến trình xử lý bị treo.

Độ phức tạp: O(N) với N là số mục trả vềTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XPENDING orders workers IDLE 60000 - + 10
XCLAIM
Stream

XCLAIM key group consumer min-idle-time id [id ...] [IDLE ms] [RETRYCOUNT n] [FORCE] [JUSTID]

Chuyển quyền sở hữu mục đang chờ sang consumer khác khi consumer cũ đã nhàn rỗi quá lâu. Cơ chế phục hồi khi một tiến trình xử lý chết giữa chừng.

Độ phức tạp: O(log N) với N là số mục trong danh sách chờTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XCLAIM orders workers worker-2 60000 1755300000000-0
XAUTOCLAIM
Stream

XAUTOCLAIM key group consumer min-idle-time start [COUNT n] [JUSTID]

Tự quét danh sách chờ và nhận lại các mục quá hạn mà không cần biết trước mã. Đơn giản hơn nhiều so với ghép XPENDING với XCLAIM.

Độ phức tạp: O(1) khấu hao cho mỗi mục được nhậnTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

XAUTOCLAIM orders workers worker-2 60000 0 COUNT 10
XINFO STREAM
Stream

XINFO STREAM key [FULL [COUNT n]]

Xem thông tin tổng quan về stream: độ dài, số nút cơ số, mã mục đầu và cuối, số nhóm tiêu thụ. Tùy chọn FULL cho ra cả chi tiết từng nhóm.

Độ phức tạp: O(1) cho bản thường, O(N) khi dùng FULLTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XINFO STREAM orders
XINFO GROUPS
Stream

XINFO GROUPS key

Liệt kê các nhóm tiêu thụ của stream cùng số consumer, số mục đang chờ và độ trễ so với cuối stream. Trường lag là chỉ số theo dõi quan trọng nhất.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XINFO GROUPS orders
XINFO CONSUMERS
Stream

XINFO CONSUMERS key group

Liệt kê các consumer trong một nhóm kèm số mục đang chờ và thời gian nhàn rỗi. Dùng để phát hiện tiến trình xử lý đã chết mà chưa được dọn.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XINFO CONSUMERS orders workers
XSETID
Stream

XSETID key last-id [ENTRIESADDED n] [MAXDELETEDID id]

Đặt lại mã mục cuối cùng của stream. Chủ yếu dùng khi sao chép stream sang máy chủ khác và cần giữ nguyên dòng mã.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

XSETID orders 1755300000000-0
SUBSCRIBE
Pub/Sub

SUBSCRIBE channel [channel ...]

Đăng ký nhận tin trên một hoặc nhiều kênh. Kết nối chuyển sang chế độ đăng ký và chỉ chấp nhận một nhóm lệnh giới hạn cho tới khi hủy đăng ký.

Độ phức tạp: O(N) với N là số kênh đăng kýTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

SUBSCRIBE news:vn news:global
UNSUBSCRIBE
Pub/Sub

UNSUBSCRIBE [channel [channel ...]]

Hủy đăng ký khỏi kênh cụ thể, hoặc khỏi tất cả kênh nếu không truyền tham số.

Độ phức tạp: O(N) với N là số kênh hủy đăng kýTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

UNSUBSCRIBE news:vn
PSUBSCRIBE
Pub/Sub

PSUBSCRIBE pattern [pattern ...]

Đăng ký theo mẫu tên kênh. Mọi tin đăng lên kênh khớp mẫu đều được chuyển tiếp, nhưng việc so khớp mẫu tốn chi phí cho mỗi tin đăng.

Độ phức tạp: O(N) với N là số mẫu đăng kýTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

PSUBSCRIBE news:*
PUNSUBSCRIBE
Pub/Sub

PUNSUBSCRIBE [pattern [pattern ...]]

Hủy đăng ký theo mẫu, hoặc hủy toàn bộ mẫu nếu không truyền tham số.

Độ phức tạp: O(N+M) với N là số mẫu và M là tổng số mẫu đang đăng kýTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

PUNSUBSCRIBE news:*
PUBLISH
Pub/Sub

PUBLISH channel message

Đăng một tin lên kênh, trả về số người nhận. Tin không được lưu lại, ai không đang lắng nghe thì mất tin vĩnh viễn.

Độ phức tạp: O(N+M) với N là số người đăng ký kênh và M là số mẫu đang đăng kýTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

PUBLISH news:vn hello-world
SPUBLISH
Pub/Sub

SPUBLISH shardchannel message

Đăng tin lên kênh phân mảnh trong chế độ cluster. Tin chỉ đi tới các nút chịu trách nhiệm cho khe của kênh, không phát tán khắp cluster.

Độ phức tạp: O(N) với N là số người đăng ký kênh phân mảnhTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

SPUBLISH orders:shard1 new-order
SSUBSCRIBE
Pub/Sub

SSUBSCRIBE shardchannel [shardchannel ...]

Đăng ký kênh phân mảnh. Đây là cách dùng pub/sub trong cluster mà không tạo lưu lượng lan truyền giữa mọi nút.

Độ phức tạp: O(N) với N là số kênh đăng kýTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

SSUBSCRIBE orders:shard1
SUNSUBSCRIBE
Pub/Sub

SUNSUBSCRIBE [shardchannel [shardchannel ...]]

Hủy đăng ký kênh phân mảnh, hoặc hủy tất cả nếu không truyền tham số.

Độ phức tạp: O(N) với N là số kênh hủy đăng kýTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

SUNSUBSCRIBE orders:shard1
PUBSUB CHANNELS
Pub/Sub

PUBSUB CHANNELS [pattern]

Liệt kê các kênh đang có ít nhất một người đăng ký. Không hiện các kênh chỉ được đăng ký qua mẫu.

Độ phức tạp: O(N) với N là số kênh đang hoạt độngTừ Redis 2.8.0

Ví dụ chạy được trong redis-cli

PUBSUB CHANNELS news:*
PUBSUB NUMSUB
Pub/Sub

PUBSUB NUMSUB [channel [channel ...]]

Đếm số người đăng ký của từng kênh được liệt kê, không tính người đăng ký theo mẫu.

Độ phức tạp: O(N) với N là số kênh truyền vàoTừ Redis 2.8.0

Ví dụ chạy được trong redis-cli

PUBSUB NUMSUB news:vn news:global
PUBSUB NUMPAT
Pub/Sub

PUBSUB NUMPAT

Đếm tổng số mẫu đăng ký duy nhất trên toàn máy chủ. Con số này ảnh hưởng trực tiếp tới chi phí của mỗi lệnh PUBLISH.

Độ phức tạp: O(1)Từ Redis 2.8.0

Ví dụ chạy được trong redis-cli

PUBSUB NUMPAT
PUBSUB SHARDCHANNELS
Pub/Sub

PUBSUB SHARDCHANNELS [pattern]

Liệt kê các kênh phân mảnh đang hoạt động trên nút hiện tại trong chế độ cluster.

Độ phức tạp: O(N) với N là số kênh phân mảnh đang hoạt độngTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

PUBSUB SHARDCHANNELS orders:*
MULTI
Transaction

MULTI

Mở một khối lệnh, các lệnh sau đó chỉ được xếp hàng chứ chưa chạy. Lỗi cú pháp lúc xếp hàng sẽ làm cả khối bị hủy khi gọi EXEC.

Độ phức tạp: O(1)Từ Redis 1.2.0

Ví dụ chạy được trong redis-cli

MULTI
EXEC
Transaction

EXEC

Chạy toàn bộ lệnh đã xếp hàng theo đúng thứ tự, không lệnh nào khác chen vào giữa. Trả về nil nếu có key bị WATCH đã thay đổi.

Độ phức tạp: O(N) với N là tổng chi phí các lệnh trong khốiTừ Redis 1.2.0

Ví dụ chạy được trong redis-cli

EXEC
DISCARD
Transaction

DISCARD

Hủy khối lệnh đang xếp hàng và gỡ mọi key đang bị WATCH, đưa kết nối về trạng thái bình thường.

Độ phức tạp: O(N) với N là số lệnh đã xếp hàngTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

DISCARD
WATCH
Transaction

WATCH key [key ...]

Theo dõi key để khóa lạc quan, nếu key bị thay đổi trước khi EXEC chạy thì cả khối lệnh bị hủy. Đây là cách duy nhất để đọc rồi ghi có điều kiện một cách an toàn.

Độ phức tạp: O(1) cho mỗi keyTừ Redis 2.2.0

Ví dụ chạy được trong redis-cli

WATCH stock:sku-1001
UNWATCH
Transaction

UNWATCH

Gỡ theo dõi mọi key đang bị WATCH trên kết nối này. Được gọi ngầm sau mỗi lần EXEC hoặc DISCARD.

Độ phức tạp: O(1)Từ Redis 2.2.0

Ví dụ chạy được trong redis-cli

UNWATCH
EVAL
Script

EVAL script numkeys key [key ...] arg [arg ...]

Chạy một đoạn Lua trên máy chủ một cách nguyên tử. Mọi key được đọc hay ghi phải khai báo trong phần numkeys để script chạy được trong cluster.

Độ phức tạp: Phụ thuộc vào nội dung scriptTừ Redis 2.6.0

Ví dụ chạy được trong redis-cli

EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 mykey myvalue
EVALSHA
Script

EVALSHA sha1 numkeys key [key ...] arg [arg ...]

Chạy script đã nạp sẵn trong bộ nhớ đệm bằng mã băm SHA1, tiết kiệm băng thông so với gửi cả nội dung script mỗi lần. Trả về lỗi NOSCRIPT nếu bộ đệm bị xóa.

Độ phức tạp: Phụ thuộc vào nội dung scriptTừ Redis 2.6.0

Ví dụ chạy được trong redis-cli

EVALSHA e0e1f9fabfc9d4800c877a703b823ac0578ff831 1 mykey myvalue
EVAL_RO
Script

EVAL_RO script numkeys key [key ...] arg [arg ...]

Bản chỉ đọc của EVAL, mọi lệnh ghi bên trong script sẽ bị từ chối. Nhờ vậy script chạy được trên nút bản sao.

Độ phức tạp: Phụ thuộc vào nội dung scriptTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

EVAL_RO "return redis.call('GET', KEYS[1])" 1 mykey
EVALSHA_RO
Script

EVALSHA_RO sha1 numkeys key [key ...] arg [arg ...]

Bản chỉ đọc của EVALSHA, dùng để phân tải truy vấn đọc sang các nút bản sao.

Độ phức tạp: Phụ thuộc vào nội dung scriptTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

EVALSHA_RO 4e6d8fc8bb01276962cce5371fa795a7763657ae 1 mykey
SCRIPT LOAD
Script

SCRIPT LOAD script

Nạp script vào bộ nhớ đệm và trả về mã băm SHA1 mà không chạy script. Bước chuẩn bị để sau đó gọi bằng EVALSHA.

Độ phức tạp: O(N) với N là độ dài scriptTừ Redis 2.6.0

Ví dụ chạy được trong redis-cli

SCRIPT LOAD "return redis.call('GET', KEYS[1])"
SCRIPT EXISTS
Script

SCRIPT EXISTS sha1 [sha1 ...]

Kiểm tra các mã băm đã có trong bộ nhớ đệm script chưa, trả về mảng 1 và 0. Thư viện client dùng lệnh này để quyết định có cần nạp lại script không.

Độ phức tạp: O(N) với N là số mã băm kiểm traTừ Redis 2.6.0

Ví dụ chạy được trong redis-cli

SCRIPT EXISTS e0e1f9fabfc9d4800c877a703b823ac0578ff831
SCRIPT FLUSH
Script
Nguy hiểm trên production

SCRIPT FLUSH [ASYNC|SYNC]

Xóa sạch bộ nhớ đệm script trên máy chủ. Mọi lời gọi EVALSHA đang chạy sẽ lập tức nhận lỗi NOSCRIPT.

Độ phức tạp: O(N) với N là số script trong bộ đệmTừ Redis 2.6.0

Ví dụ chạy được trong redis-cli

SCRIPT FLUSH ASYNC

Nên dùng thay thế

Đừng chạy SCRIPT FLUSH trên máy chủ đang phục vụ, mọi client dùng EVALSHA sẽ đồng loạt lỗi NOSCRIPT. Nếu chỉ cần bỏ một script cũ, hãy để nó nằm im vì bộ đệm rất nhẹ, hoặc dùng SCRIPT FLUSH ASYNC vào cửa sổ bảo trì sau khi đã đảm bảo client biết tự nạp lại script.

SCRIPT KILL
Script

SCRIPT KILL

Dừng script đang chạy quá lâu, chỉ hiệu quả khi script chưa thực hiện thao tác ghi nào. Nếu script đã ghi thì buộc phải dùng SHUTDOWN NOSAVE.

Độ phức tạp: O(1)Từ Redis 2.6.0

Ví dụ chạy được trong redis-cli

SCRIPT KILL
FCALL
Script

FCALL function numkeys key [key ...] arg [arg ...]

Gọi một hàm trong thư viện Function đã nạp. Khác script, Function tồn tại lâu dài và được nhân bản sang bản sao cũng như lưu vào tệp bền vững.

Độ phức tạp: Phụ thuộc vào nội dung hàmTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

FCALL myfunc 1 mykey myvalue
FCALL_RO
Script

FCALL_RO function numkeys key [key ...] arg [arg ...]

Gọi hàm ở chế độ chỉ đọc, hàm phải được khai báo với cờ no-writes. Chạy được trên nút bản sao.

Độ phức tạp: Phụ thuộc vào nội dung hàmTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

FCALL_RO myfunc 1 mykey
FUNCTION LOAD
Script

FUNCTION LOAD [REPLACE] function-code

Nạp một thư viện Function vào máy chủ. Thư viện được ghi vào tệp bền vững và nhân bản sang bản sao nên không biến mất khi khởi động lại như script.

Độ phức tạp: O(1) cộng chi phí biên dịch mãTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

FUNCTION LOAD "#!lua name=mylib\nredis.register_function('myfunc', function(keys, args) return redis.call('SET', keys[1], args[1]) end)"
FUNCTION LIST
Script

FUNCTION LIST [LIBRARYNAME name] [WITHCODE]

Liệt kê các thư viện Function đã nạp cùng danh sách hàm và các cờ của chúng.

Độ phức tạp: O(N) với N là số hàm đã nạpTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

FUNCTION LIST WITHCODE
FUNCTION DUMP
Script

FUNCTION DUMP

Xuất toàn bộ thư viện Function ra dạng nhị phân để sao lưu hoặc chuyển sang máy chủ khác qua FUNCTION RESTORE.

Độ phức tạp: O(N) với N là số hàm đã nạpTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

FUNCTION DUMP
FUNCTION FLUSH
Script
Nguy hiểm trên production

FUNCTION FLUSH [ASYNC|SYNC]

Xóa toàn bộ thư viện Function khỏi máy chủ. Mọi lời gọi FCALL sau đó đều lỗi.

Độ phức tạp: O(N) với N là số hàm đã nạpTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

FUNCTION FLUSH ASYNC

Nên dùng thay thế

Hãy chạy FUNCTION DUMP để sao lưu trước, rồi chỉ gỡ đúng thư viện cần bỏ bằng FUNCTION DELETE tên-thư-viện thay vì xóa sạch.

INFO
Server

INFO [section]

Trả về báo cáo trạng thái máy chủ theo từng phần: server, clients, memory, persistence, stats, replication, cpu, keyspace. Đây là lệnh chẩn đoán đầu tiên nên chạy khi có sự cố.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

INFO memory
DBSIZE
Server

DBSIZE

Đếm số key trong cơ sở dữ liệu hiện tại. Nhanh vì Redis lưu sẵn con số, hãy dùng thay cho việc đếm bằng KEYS.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

DBSIZE
FLUSHDB
Server
Nguy hiểm trên production

FLUSHDB [ASYNC|SYNC]

Xóa sạch mọi key trong cơ sở dữ liệu hiện tại. Không có bước xác nhận và không hoàn tác được.

Độ phức tạp: O(N) với N là số key trong cơ sở dữ liệuTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

FLUSHDB ASYNC

Nên dùng thay thế

Đừng bao giờ chạy trên môi trường thật. Nếu chỉ cần dọn một nhóm key, hãy dùng SCAN 0 MATCH tiền-tố:* COUNT 100 rồi UNLINK theo từng lô. Nếu buộc phải xóa cả cơ sở dữ liệu, dùng FLUSHDB ASYNC để việc thu hồi bộ nhớ chạy ở luồng nền và vô hiệu hóa lệnh này bằng rename-command trong tệp cấu hình.

FLUSHALL
Server
Nguy hiểm trên production

FLUSHALL [ASYNC|SYNC]

Xóa sạch mọi key trên tất cả cơ sở dữ liệu của máy chủ. Lệnh còn được nhân bản sang mọi nút bản sao.

Độ phức tạp: O(N) với N là tổng số key trên máy chủTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

FLUSHALL ASYNC

Nên dùng thay thế

Đây là lệnh xóa toàn bộ dữ liệu, kể cả trên bản sao. Hãy vô hiệu hóa bằng rename-command FLUSHALL "" trong tệp cấu hình môi trường thật. Nếu buộc phải chạy, dùng FLUSHALL ASYNC và chỉ chạy sau khi đã có bản sao lưu bằng BGSAVE.

SAVE
Server
Nguy hiểm trên production

SAVE

Ghi ảnh chụp bộ nhớ ra tệp RDB ngay trong tiến trình chính. Máy chủ ngừng phục vụ mọi client cho tới khi ghi xong.

Độ phức tạp: O(N) với N là số key trong bộ nhớTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SAVE

Nên dùng thay thế

Dùng BGSAVE, nó fork một tiến trình con để ghi RDB trong khi máy chủ vẫn phục vụ bình thường. SAVE chỉ nên dùng khi máy chủ đã ngừng nhận lưu lượng và bạn cần một ảnh chụp chắc chắn trước khi tắt.

BGSAVE
Server

BGSAVE [SCHEDULE]

Ghi ảnh chụp RDB ở tiến trình con thông qua fork, máy chủ vẫn phục vụ bình thường. Cần lưu ý fork tạm thời tăng dung lượng bộ nhớ do sao chép trang khi ghi.

Độ phức tạp: O(1) cho lời gọi, tiến trình con làm việc nặng ở nềnTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

BGSAVE
BGREWRITEAOF
Server

BGREWRITEAOF

Viết lại tệp AOF ở tiến trình nền để nén lịch sử ghi thành trạng thái hiện tại, giúp AOF nhỏ lại và khởi động lại nhanh hơn.

Độ phức tạp: O(1) cho lời gọi, tiến trình con làm việc nặng ở nềnTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

BGREWRITEAOF
LASTSAVE
Server

LASTSAVE

Trả về dấu thời gian Unix của lần ghi RDB thành công gần nhất. So sánh trước và sau BGSAVE để biết ảnh chụp đã hoàn tất.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

LASTSAVE
CONFIG GET
Server

CONFIG GET parameter [parameter ...]

Đọc giá trị tham số cấu hình đang chạy, hỗ trợ ký tự đại diện. Cách nhanh nhất kiểm tra maxmemory và chính sách loại bỏ đang đặt là gì.

Độ phức tạp: O(N) với N là số tham số khớpTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

CONFIG GET maxmemory maxmemory-policy
CONFIG SET
Server
Nguy hiểm trên production

CONFIG SET parameter value [parameter value ...]

Đổi tham số cấu hình ngay lập tức mà không cần khởi động lại. Thay đổi chỉ nằm trong bộ nhớ, mất khi khởi động lại nếu không gọi CONFIG REWRITE.

Độ phức tạp: O(N) với N là số tham số được đặtTừ Redis 2.0.0

Ví dụ chạy được trong redis-cli

CONFIG SET maxmemory-policy allkeys-lru

Nên dùng thay thế

Một dòng gõ nhầm có thể tắt bền vững hoặc đặt maxmemory quá thấp làm hàng loạt key bị loại bỏ tức thì. Hãy CONFIG GET để ghi lại giá trị cũ trước, đổi trên môi trường thử trước, và sửa thẳng vào tệp redis.conf rồi khởi động lại theo quy trình khi thay đổi mang tính lâu dài.

CONFIG RESETSTAT
Server

CONFIG RESETSTAT

Đặt lại các bộ đếm thống kê mà INFO báo cáo, ví dụ số lệnh đã xử lý và số lần trúng đệm. Tiện khi muốn đo một khoảng thời gian sạch.

Độ phức tạp: O(1)Từ Redis 2.0.0

Ví dụ chạy được trong redis-cli

CONFIG RESETSTAT
CONFIG REWRITE
Server

CONFIG REWRITE

Ghi cấu hình đang chạy trở lại tệp redis.conf để các thay đổi bằng CONFIG SET còn hiệu lực sau khi khởi động lại.

Độ phức tạp: O(1)Từ Redis 2.8.0

Ví dụ chạy được trong redis-cli

CONFIG REWRITE
CLIENT LIST
Server

CLIENT LIST [TYPE normal|master|replica|pubsub] [ID id ...]

Liệt kê mọi kết nối đang mở kèm địa chỉ, thời gian nhàn rỗi, lệnh cuối cùng và kích thước bộ đệm đầu ra. Dùng để tìm client nào đang giữ kết nối treo.

Độ phức tạp: O(N) với N là số kết nốiTừ Redis 2.4.0

Ví dụ chạy được trong redis-cli

CLIENT LIST TYPE normal
CLIENT KILL
Server
Nguy hiểm trên production

CLIENT KILL [ID id] [ADDR ip:port] [LADDR ip:port] [TYPE type] [USER user] [SKIPME yes|no] [MAXAGE s]

Đóng cưỡng bức một hoặc nhiều kết nối theo bộ lọc. Bộ lọc rộng có thể ngắt hàng loạt kết nối đang phục vụ thật.

Độ phức tạp: O(N) với N là số kết nốiTừ Redis 2.4.0

Ví dụ chạy được trong redis-cli

CLIENT KILL ID 42

Nên dùng thay thế

Chạy CLIENT LIST trước để xác định đúng ID cần ngắt, rồi CLIENT KILL ID số-cụ-thể thay vì lọc theo TYPE hay ADDR dạng rộng. Với vấn đề lệnh chạy lâu, hãy xử lý gốc bằng SLOWLOG GET thay vì ngắt kết nối.

CLIENT ID
Server

CLIENT ID

Trả về mã định danh của kết nối hiện tại. Mã này tăng đơn điệu nên có thể dùng để so sánh thứ tự kết nối.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

CLIENT ID
CLIENT NO-EVICT
Server

CLIENT NO-EVICT on|off

Loại kết nối hiện tại khỏi cơ chế loại bỏ client khi bộ nhớ dành cho client vượt ngưỡng. Dùng cho kết nối quản trị cần luôn sống.

Độ phức tạp: O(1)Từ Redis 7.0.0

Ví dụ chạy được trong redis-cli

CLIENT NO-EVICT on
CLIENT UNPAUSE
Server

CLIENT UNPAUSE

Hủy trạng thái tạm dừng do CLIENT PAUSE đặt ra, cho các client tiếp tục gửi lệnh ngay lập tức.

Độ phức tạp: O(N) với N là số kết nốiTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

CLIENT UNPAUSE
COMMAND
Server

COMMAND

Trả về chi tiết mọi lệnh mà máy chủ hỗ trợ, gồm số tham số, các cờ và vị trí key. Thư viện client dùng lệnh này để định tuyến key trong cluster.

Độ phức tạp: O(N) với N là tổng số lệnhTừ Redis 2.8.13

Ví dụ chạy được trong redis-cli

COMMAND COUNT
COMMAND COUNT
Server

COMMAND COUNT

Đếm tổng số lệnh máy chủ hỗ trợ. Con số này tăng khi bạn nạp thêm mô đun.

Độ phức tạp: O(1)Từ Redis 2.8.13

Ví dụ chạy được trong redis-cli

COMMAND COUNT
COMMAND DOCS
Server

COMMAND DOCS [command-name ...]

Trả về tài liệu của lệnh ngay từ máy chủ, gồm mô tả, nhóm, phiên bản bắt đầu có và cấu trúc tham số.

Độ phức tạp: O(N) với N là số lệnh truy vấnTừ Redis 7.0.0

Ví dụ chạy được trong redis-cli

COMMAND DOCS GET
MEMORY USAGE
Server

MEMORY USAGE key [SAMPLES n]

Ước lượng số byte một key chiếm trong bộ nhớ, kể cả phần chi phí quản lý. Với tập hợp lớn, tham số SAMPLES quyết định lấy mẫu bao nhiêu phần tử.

Độ phức tạp: O(N) với N là số mẫu lấy raTừ Redis 4.0.0

Ví dụ chạy được trong redis-cli

MEMORY USAGE user:1 SAMPLES 0
MEMORY DOCTOR
Server

MEMORY DOCTOR

Trả về báo cáo dạng câu chữ về các vấn đề bộ nhớ mà Redis tự phát hiện, ví dụ tỷ lệ phân mảnh cao hay bộ đệm client phình to.

Độ phức tạp: O(1)Từ Redis 4.0.0

Ví dụ chạy được trong redis-cli

MEMORY DOCTOR
MEMORY STATS
Server

MEMORY STATS

Báo cáo chi tiết cách bộ nhớ được phân bổ: dữ liệu, bộ đệm client, bộ đệm nhân bản, chi phí bảng băm, tỷ lệ phân mảnh.

Độ phức tạp: O(1)Từ Redis 4.0.0

Ví dụ chạy được trong redis-cli

MEMORY STATS
SLOWLOG GET
Server

SLOWLOG GET [count]

Lấy các lệnh chạy vượt ngưỡng slowlog-log-slower-than kèm thời gian thực thi và tham số. Đây là nơi đầu tiên cần nhìn khi độ trễ tăng đột biến.

Độ phức tạp: O(N) với N là số mục lấy raTừ Redis 2.2.12

Ví dụ chạy được trong redis-cli

SLOWLOG GET 10
SLOWLOG RESET
Server

SLOWLOG RESET

Xóa sạch nhật ký lệnh chậm. Hãy chạy sau khi đã ghi nhận kết quả, để lần đo tiếp theo bắt đầu từ trạng thái sạch.

Độ phức tạp: O(N) với N là số mục trong nhật kýTừ Redis 2.2.12

Ví dụ chạy được trong redis-cli

SLOWLOG RESET
SLOWLOG LEN
Server

SLOWLOG LEN

Đếm số mục hiện có trong nhật ký lệnh chậm, giới hạn bởi tham số slowlog-max-len.

Độ phức tạp: O(1)Từ Redis 2.2.12

Ví dụ chạy được trong redis-cli

SLOWLOG LEN
MONITOR
Server
Nguy hiểm trên production

MONITOR

Phát trực tiếp mọi lệnh máy chủ đang xử lý về kết nối này. Trên máy chủ có lưu lượng thật, lệnh này làm sụt khoảng một nửa thông lượng.

Độ phức tạp: O(N) với N là số lệnh máy chủ đang xử lýTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

MONITOR

Nên dùng thay thế

Dùng SLOWLOG GET 20 để tìm lệnh chậm, redis-cli --bigkeys để tìm key phình to, redis-cli --hotkeys để tìm key bị truy cập nhiều, và redis-cli --stat để xem thông lượng theo giây. Nếu buộc phải dùng MONITOR, chỉ chạy vài giây rồi thoát ngay bằng Ctrl+C.

ACL WHOAMI
Server

ACL WHOAMI

Trả về tên người dùng gắn với kết nối hiện tại. Lệnh đầu tiên nên chạy khi gặp lỗi NOPERM.

Độ phức tạp: O(1)Từ Redis 6.0.0

Ví dụ chạy được trong redis-cli

ACL WHOAMI
ACL LIST
Server

ACL LIST

Liệt kê toàn bộ quy tắc ACL dưới dạng giống cú pháp trong tệp cấu hình, gồm quyền lệnh và mẫu key mỗi người dùng được phép chạm tới.

Độ phức tạp: O(N) với N là số người dùng đã khai báoTừ Redis 6.0.0

Ví dụ chạy được trong redis-cli

ACL LIST
ACL SETUSER
Server

ACL SETUSER username [rule ...]

Tạo hoặc sửa quyền của một người dùng: bật tắt tài khoản, đặt mật khẩu, giới hạn lệnh và mẫu key được phép truy cập.

Độ phức tạp: O(N) với N là số quy tắc truyền vàoTừ Redis 6.0.0

Ví dụ chạy được trong redis-cli

ACL SETUSER reader on >secret123 ~cache:* +@read
ACL GETUSER
Server

ACL GETUSER username

Xem chi tiết quyền của một người dùng dưới dạng có cấu trúc, tiện để kiểm tra vì sao một lệnh bị chặn.

Độ phức tạp: O(N) với N là số quy tắc của người dùngTừ Redis 6.0.0

Ví dụ chạy được trong redis-cli

ACL GETUSER default
LATENCY DOCTOR
Server

LATENCY DOCTOR

Phân tích các sự kiện độ trễ đã ghi nhận và đưa ra chẩn đoán dạng câu chữ kèm gợi ý khắc phục. Cần bật latency-monitor-threshold trước.

Độ phức tạp: O(1)Từ Redis 2.8.13

Ví dụ chạy được trong redis-cli

LATENCY DOCTOR
LATENCY RESET
Server

LATENCY RESET [event ...]

Xóa dữ liệu theo dõi độ trễ cho một hoặc mọi loại sự kiện, để bắt đầu một chu kỳ đo mới.

Độ phức tạp: O(1)Từ Redis 2.8.13

Ví dụ chạy được trong redis-cli

LATENCY RESET
SHUTDOWN
Server
Nguy hiểm trên production

SHUTDOWN [NOSAVE|SAVE] [NOW] [FORCE] [ABORT]

Tắt máy chủ. Mặc định Redis cố ghi RDB nếu có cấu hình save, còn NOSAVE tắt ngay lập tức và mọi dữ liệu chưa ghi xuống đĩa sẽ mất.

Độ phức tạp: O(N) khi có ghi RDB trước lúc tắtTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SHUTDOWN SAVE

Nên dùng thay thế

Không bao giờ gõ SHUTDOWN NOSAVE trên máy chủ thật trừ khi đang gỡ một script bị treo sau khi đã ghi dữ liệu. Hãy dùng SHUTDOWN SAVE, hoặc BGSAVE rồi kiểm tra LASTSAVE trước khi tắt qua trình quản lý dịch vụ của hệ điều hành.

SWAPDB
Server
Nguy hiểm trên production

SWAPDB index1 index2

Hoán đổi tức thì nội dung hai cơ sở dữ liệu. Mọi client đang kết nối lập tức nhìn thấy tập dữ liệu khác mà không hề được báo trước.

Độ phức tạp: O(N) với N là số key trong hai cơ sở dữ liệuTừ Redis 4.0.0

Ví dụ chạy được trong redis-cli

SWAPDB 0 1

Nên dùng thay thế

Trong mẫu dựng lại đệm rồi hoán đổi, hãy dùng tiền tố key có đánh số phiên bản như cache:v2:* và chuyển hướng ứng dụng sang tiền tố mới, sau đó xóa tiền tố cũ theo lô bằng SCAN và UNLINK. Cách này có thể quay lui, còn SWAPDB thì không.

REPLICAOF
Server

REPLICAOF host port | REPLICAOF NO ONE

Biến máy chủ thành bản sao của một máy chủ khác, hoặc cắt liên kết nhân bản để trở lại làm nút chính. Thay thế cho SLAVEOF từ Redis 5.0.

Độ phức tạp: O(1) cho lời gọi, việc đồng bộ chạy ở nềnTừ Redis 5.0.0

Ví dụ chạy được trong redis-cli

REPLICAOF NO ONE
WAIT
Server

WAIT numreplicas timeout

Chờ cho tới khi các lệnh ghi trước đó được xác nhận bởi số bản sao chỉ định hoặc hết thời gian chờ. Tăng độ bền cho thao tác ghi quan trọng nhưng không phải cam kết tuyệt đối.

Độ phức tạp: O(1)Từ Redis 3.0.0

Ví dụ chạy được trong redis-cli

WAIT 1 1000
TIME
Server

TIME

Trả về thời gian của máy chủ dưới dạng cặp giây Unix và micro giây. Dùng làm nguồn thời gian thống nhất cho nhiều ứng dụng client.

Độ phức tạp: O(1)Từ Redis 2.6.0

Ví dụ chạy được trong redis-cli

TIME
DEBUG OBJECT
Server
Nguy hiểm trên production

DEBUG OBJECT key

Trả về thông tin nội bộ của một key: độ dài tuần tự hóa, cách mã hóa, số phần tử. Lệnh dành cho gỡ lỗi, không có cam kết ổn định giữa các phiên bản.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

DEBUG OBJECT user:1

Nên dùng thay thế

Dùng OBJECT ENCODING để biết cách mã hóa và MEMORY USAGE key để biết dung lượng. Đây là các lệnh công khai, ổn định giữa các phiên bản và an toàn hơn nhóm DEBUG.

DEBUG SLEEP
Server
Nguy hiểm trên production

DEBUG SLEEP seconds

Bắt tiến trình Redis ngủ đúng số giây chỉ định, dùng để mô phỏng tình huống máy chủ treo khi kiểm thử thời gian chờ và cơ chế thử lại của ứng dụng.

Độ phức tạp: O(1) nhưng chặn toàn bộ máy chủ suốt thời gian ngủTừ Redis 1.0.0

Ví dụ chạy được trong redis-cli

DEBUG SLEEP 0.1

Nên dùng thay thế

Chỉ chạy trên máy chủ kiểm thử. Redis xử lý lệnh trên một luồng duy nhất nên lệnh này treo mọi kết nối khác đúng bằng số giây đã nhập, gõ nhầm 60 thay vì 0.6 là tự tạo ra một phút mất dịch vụ. Muốn thử ứng dụng chịu độ trễ ra sao thì chèn độ trễ ở tầng mạng, hoặc dùng SLOWLOG GET để xem lệnh nào đang thực sự chậm.

DEBUG SEGFAULT
Server
Nguy hiểm trên production

DEBUG SEGFAULT

Cố tình làm tiến trình Redis đổ vỡ để kiểm thử cơ chế phục hồi. Máy chủ chết ngay lập tức, mọi dữ liệu chưa ghi xuống đĩa sẽ mất.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

DEBUG SEGFAULT

Nên dùng thay thế

Chỉ chạy trên máy chủ dùng riêng cho kiểm thử. Muốn diễn tập chuyển đổi dự phòng trên môi trường thật, hãy dùng lệnh failover của Sentinel hoặc CLUSTER FAILOVER, và vô hiệu hóa nhóm DEBUG bằng enable-debug-command no trong tệp cấu hình.

LOLWUT
Server

LOLWUT [VERSION n]

Vẽ một tác phẩm nghệ thuật ký tự thay đổi theo từng bản Redis. Trên thực tế lệnh này hữu ích để xác nhận nhanh phiên bản máy chủ đang chạy.

Độ phức tạp: O(1)Từ Redis 5.0.0

Ví dụ chạy được trong redis-cli

LOLWUT
AUTH
Connection

AUTH [username] password

Xác thực kết nối. Từ Redis 6.0 có thể truyền kèm tên người dùng ACL, nếu chỉ truyền mật khẩu thì áp cho người dùng default.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

AUTH default mypassword
PING
Connection

PING [message]

Kiểm tra kết nối còn sống, trả về PONG hoặc chính chuỗi bạn truyền vào. Dùng cho kiểm tra sức khỏe và đo vòng đi mạng.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

PING
ECHO
Connection

ECHO message

Trả về đúng chuỗi được truyền vào. Hữu ích khi gỡ lỗi thư viện client hoặc kiểm tra pipeline.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

ECHO hello
SELECT
Connection

SELECT index

Chuyển kết nối sang một cơ sở dữ liệu khác, mặc định có 16 cơ sở dữ liệu đánh số từ 0. Không dùng được trong chế độ cluster.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

SELECT 1
QUIT
Connection

QUIT

Yêu cầu máy chủ đóng kết nối sau khi đã gửi hết các phản hồi đang chờ. Từ Redis 7.2 lệnh bị đánh dấu cũ, client nên tự đóng socket.

Độ phức tạp: O(1)Từ Redis 1.0.0

Ví dụ chạy được trong redis-cli

QUIT
RESET
Connection

RESET

Đưa kết nối về trạng thái ban đầu: hủy MULTI đang mở, gỡ WATCH, thoát chế độ đăng ký, quay về cơ sở dữ liệu 0 và bỏ xác thực.

Độ phức tạp: O(1)Từ Redis 6.2.0

Ví dụ chạy được trong redis-cli

RESET
HELLO
Connection

HELLO [protover [AUTH username password] [SETNAME name]]

Bắt tay giao thức và chuyển sang RESP3 nếu truyền số 3, đồng thời trả về thông tin máy chủ. Có thể gộp cả xác thực và đặt tên kết nối vào một lệnh.

Độ phức tạp: O(1)Từ Redis 6.0.0

Ví dụ chạy được trong redis-cli

HELLO 3
CLIENT SETNAME
Connection

CLIENT SETNAME connection-name

Đặt tên cho kết nối hiện tại, tên này hiện trong CLIENT LIST. Đặt tên theo tên dịch vụ giúp truy vết nguồn gây tải nhanh hơn rất nhiều.

Độ phức tạp: O(1)Từ Redis 2.6.9

Ví dụ chạy được trong redis-cli

CLIENT SETNAME worker-email-1
CLIENT GETNAME
Connection

CLIENT GETNAME

Đọc tên đã đặt cho kết nối hiện tại, trả về chuỗi rỗng nếu chưa đặt.

Độ phức tạp: O(1)Từ Redis 2.6.9

Ví dụ chạy được trong redis-cli

CLIENT GETNAME
CLIENT INFO
Connection

CLIENT INFO

Trả về một dòng thông tin về chính kết nối hiện tại theo đúng định dạng của CLIENT LIST.

Độ phức tạp: O(1)Từ Redis 6.2.0

Ví dụ chạy được trong redis-cli

CLIENT INFO
PFADD
HyperLogLog

PFADD key [element [element ...]]

Thêm phần tử vào cấu trúc đếm xấp xỉ. Bộ nhớ luôn dưới 12 kilobyte cho mỗi key bất kể bạn thêm bao nhiêu phần tử, đổi lại sai số khoảng 0,81 phần trăm.

Độ phức tạp: O(1) cho mỗi phần tửTừ Redis 2.8.9

Ví dụ chạy được trong redis-cli

PFADD visitors:2026-08-16 user-1 user-2 user-3
PFCOUNT
HyperLogLog

PFCOUNT key [key ...]

Ước lượng số phần tử duy nhất, khi truyền nhiều key thì trả về ước lượng cho hợp của chúng. Đây là cách đếm khách truy cập duy nhất rẻ nhất về bộ nhớ.

Độ phức tạp: O(1) với một key, O(N) khi hợp nhiều keyTừ Redis 2.8.9

Ví dụ chạy được trong redis-cli

PFCOUNT visitors:2026-08-16
PFMERGE
HyperLogLog

PFMERGE destkey [sourcekey ...]

Gộp nhiều cấu trúc đếm xấp xỉ vào một key đích. Dùng để cộng dồn số liệu theo ngày thành số liệu theo tuần hoặc theo tháng.

Độ phức tạp: O(N) với N là số key nguồnTừ Redis 2.8.9

Ví dụ chạy được trong redis-cli

PFMERGE visitors:week visitors:2026-08-15 visitors:2026-08-16
GEOADD
Geo

GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]

Thêm tọa độ vào chỉ mục địa lý. Bên dưới Redis lưu bằng Sorted Set với điểm số là mã geohash 52 bit nên mọi lệnh của Sorted Set đều dùng được.

Độ phức tạp: O(log(N)) cho mỗi điểmTừ Redis 3.2.0

Ví dụ chạy được trong redis-cli

GEOADD stores 106.700424 10.775658 store-hcm 105.834160 21.027764 store-hn
GEOPOS
Geo

GEOPOS key [member ...]

Trả về kinh độ và vĩ độ của các thành viên. Giá trị trả về có sai số nhỏ so với lúc ghi vào vì bị lượng tử hóa khi mã hóa geohash.

Độ phức tạp: O(1) cho mỗi thành viênTừ Redis 3.2.0

Ví dụ chạy được trong redis-cli

GEOPOS stores store-hcm store-hn
GEODIST
Geo

GEODIST key member1 member2 [M|KM|FT|MI]

Tính khoảng cách giữa hai điểm theo đơn vị chỉ định, mặc định là mét. Giả định Trái Đất hình cầu nên sai số tối đa khoảng 0,5 phần trăm.

Độ phức tạp: O(1)Từ Redis 3.2.0

Ví dụ chạy được trong redis-cli

GEODIST stores store-hcm store-hn km
GEOSEARCH
Geo

GEOSEARCH key FROMMEMBER m|FROMLONLAT lon lat BYRADIUS r unit|BYBOX w h unit [ASC|DESC] [COUNT n [ANY]] [WITHCOORD] [WITHDIST] [WITHHASH]

Tìm các điểm trong bán kính hoặc trong hình chữ nhật quanh một điểm mốc. Từ Redis 6.2 lệnh này thay thế cho cả GEORADIUS lẫn GEORADIUSBYMEMBER.

Độ phức tạp: O(N+log(M)) với N là số điểm trong vùng và M là số điểm trong chỉ mụcTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

GEOSEARCH stores FROMLONLAT 106.700424 10.775658 BYRADIUS 50 km ASC COUNT 10 WITHDIST
GEOSEARCHSTORE
Geo

GEOSEARCHSTORE destination source [FROMMEMBER m|FROMLONLAT lon lat] [BYRADIUS r unit|BYBOX w h unit] [ASC|DESC] [COUNT n [ANY]] [STOREDIST]

Chạy GEOSEARCH rồi lưu kết quả vào key đích dưới dạng Sorted Set, tùy chọn STOREDIST lưu khoảng cách làm điểm số.

Độ phức tạp: O(N+log(M)) với N là số điểm trong vùng và M là số điểm trong chỉ mụcTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

GEOSEARCHSTORE stores:near stores FROMLONLAT 106.700424 10.775658 BYRADIUS 50 km ASC COUNT 10 STOREDIST
GEOHASH
Geo

GEOHASH key [member ...]

Trả về chuỗi geohash 11 ký tự chuẩn của các thành viên, tương thích với các dịch vụ bản đồ dùng geohash công khai.

Độ phức tạp: O(1) cho mỗi thành viênTừ Redis 3.2.0

Ví dụ chạy được trong redis-cli

GEOHASH stores store-hcm
GEORADIUS
Geo

GEORADIUS key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT n [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]

Tìm điểm trong bán kính quanh một tọa độ. Đã bị đánh dấu cũ từ Redis 6.2, mã mới nên dùng GEOSEARCH.

Độ phức tạp: O(N+log(M)) với N là số điểm trong vùng và M là số điểm trong chỉ mụcTừ Redis 3.2.0

Ví dụ chạy được trong redis-cli

GEORADIUS stores 106.700424 10.775658 50 km ASC COUNT 10
GEORADIUSBYMEMBER
Geo

GEORADIUSBYMEMBER key member radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT n [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]

Tìm điểm trong bán kính quanh một thành viên đã có trong chỉ mục. Cũng bị đánh dấu cũ từ Redis 6.2, nên chuyển sang GEOSEARCH với FROMMEMBER.

Độ phức tạp: O(N+log(M)) với N là số điểm trong vùng và M là số điểm trong chỉ mụcTừ Redis 3.2.0

Ví dụ chạy được trong redis-cli

GEORADIUSBYMEMBER stores store-hcm 50 km ASC COUNT 10
SETBIT
Bitmap

SETBIT key offset value

Đặt giá trị 0 hoặc 1 cho một bit tại vị trí chỉ định, chuỗi tự giãn ra nếu cần. Đặt bit ở vị trí rất lớn sẽ cấp phát ngay toàn bộ vùng nhớ tới vị trí đó.

Độ phức tạp: O(1)Từ Redis 2.2.0

Ví dụ chạy được trong redis-cli

SETBIT active:2026-08-16 1001 1
GETBIT
Bitmap

GETBIT key offset

Đọc giá trị bit tại vị trí chỉ định, trả về 0 nếu vị trí nằm ngoài độ dài chuỗi hiện có.

Độ phức tạp: O(1)Từ Redis 2.2.0

Ví dụ chạy được trong redis-cli

GETBIT active:2026-08-16 1001
BITCOUNT
Bitmap

BITCOUNT key [start end [BYTE|BIT]]

Đếm số bit bằng 1 trong toàn chuỗi hoặc trong một khoảng. Đây là cách đếm số người dùng hoạt động trong ngày với chi phí bộ nhớ cực thấp.

Độ phức tạp: O(N) với N là số byte phải quétTừ Redis 2.6.0

Ví dụ chạy được trong redis-cli

BITCOUNT active:2026-08-16
BITPOS
Bitmap

BITPOS key bit [start [end [BYTE|BIT]]]

Tìm vị trí bit đầu tiên có giá trị 0 hoặc 1 trong chuỗi, có thể giới hạn theo khoảng byte hoặc bit.

Độ phức tạp: O(N) với N là số byte phải quétTừ Redis 2.8.7

Ví dụ chạy được trong redis-cli

BITPOS active:2026-08-16 1
BITOP
Bitmap

BITOP AND|OR|XOR|NOT destkey key [key ...]

Thực hiện phép toán bit giữa nhiều chuỗi và lưu kết quả vào key đích. Cách chuẩn tính người dùng hoạt động liên tục nhiều ngày bằng phép AND các bản đồ bit theo ngày.

Độ phức tạp: O(N) với N là độ dài chuỗi dài nhấtTừ Redis 2.6.0

Ví dụ chạy được trong redis-cli

BITOP AND active:both active:2026-08-15 active:2026-08-16
BITFIELD
Bitmap

BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]

Coi chuỗi như một mảng số nguyên có độ rộng bit tùy ý, đọc ghi và cộng dồn từng ô. Cho phép nhồi nhiều bộ đếm nhỏ vào một key duy nhất.

Độ phức tạp: O(1) cho mỗi lệnh conTừ Redis 3.2.0

Ví dụ chạy được trong redis-cli

BITFIELD counters INCRBY u8 0 1 GET u8 0
BITFIELD_RO
Bitmap

BITFIELD_RO key GET type offset [GET type offset ...]

Bản chỉ đọc của BITFIELD, chỉ chấp nhận lệnh con GET nên chạy được trên nút bản sao.

Độ phức tạp: O(1) cho mỗi lệnh conTừ Redis 6.2.0

Ví dụ chạy được trong redis-cli

BITFIELD_RO counters GET u8 0

Hợp tác ngay với Tấn Phát Digital

Chúng tôi không chỉ thiết kế website, mà còn giúp doanh nghiệp xây dựng thương hiệu số mạnh mẽ. Cung cấp dịch vụ thiết kế website trọn gói từ thiết kế đến tối ưu SEO. Hãy liên hệ ngay với Tấn Phát Digital để cùng tạo nên những giải pháp công nghệ đột phá, hiệu quả và bền vững cho doanh nghiệp của bạn tại Hồ Chí Minh.

Tra cứu lệnh Redis: cú pháp, độ phức tạp, phiên bản và ví dụ chạy được

Bảng tra hơn 260 lệnh Redis gom theo kiểu dữ liệu, mỗi lệnh có cú pháp đầy đủ kèm tham số tùy chọn, giải thích tiếng Việt, độ phức tạp thời gian, phiên bản Redis bắt đầu có và một ví dụ dán thẳng vào redis-cli. Các lệnh có thể làm treo máy chủ thật được đánh dấu riêng kèm lệnh nên dùng thay.

Tính năng nổi bật

  • Hơn 260 lệnh chia theo 15 nhóm: string, list, set, sorted set, hash, key, stream, pub/sub, transaction, script, server, connection, bitmap, HyperLogLog và geo
  • Mỗi lệnh có đủ năm thông tin: cú pháp đầy đủ, giải thích tiếng Việt, độ phức tạp thời gian, phiên bản Redis bắt đầu có và ví dụ chạy được
  • Ô tìm kiếm quét cùng lúc tên lệnh, cú pháp và phần mô tả nên gõ được cả từ khóa tiếng Việt
  • Bộ lọc theo nhóm dữ liệu, bấm một nút là chỉ còn lệnh của kiểu dữ liệu đang quan tâm
  • Nút lọc riêng chỉ hiện các lệnh nguy hiểm trên môi trường thật, kèm số lượng ngay trên nút
  • Lệnh nguy hiểm được viền đỏ và có khối riêng ghi rõ lệnh nên dùng thay thế, ví dụ SCAN thay KEYS và UNLINK thay DEL với key lớn
  • Nút sao chép ví dụ của từng lệnh để dán thẳng vào redis-cli mà không phải gõ lại
  • Toàn bộ dữ liệu nằm sẵn trong trang, tra cứu chạy hoàn toàn trên trình duyệt và không gọi máy chủ nào

Vì sao cần một bảng tra có cả độ phức tạp và phiên bản

Phần lớn bảng tra lệnh Redis chỉ ghi lệnh làm gì. Điều đó đủ khi bạn học, nhưng không đủ khi bạn viết mã chạy thật. Redis xử lý lệnh trên một luồng duy nhất, nên một lệnh có độ phức tạp tuyến tính chạy trên key hàng triệu phần tử sẽ chặn toàn bộ máy chủ trong suốt thời gian đó, mọi client khác phải xếp hàng chờ. Đội vận hành nhìn ra ngoài chỉ thấy độ trễ tăng vọt mà không hiểu vì đâu. Con số độ phức tạp đặt ngay cạnh lệnh giúp bạn nhận ra rủi ro trước khi đẩy mã lên, chứ không phải sau khi có sự cố. Trường phiên bản bắt đầu có cũng quan trọng không kém: rất nhiều hệ thống ở Việt Nam vẫn chạy Redis 5 hoặc 6 do dùng bản đóng gói sẵn của nhà cung cấp máy chủ, trong khi tài liệu trên mạng thường viết theo bản mới nhất. Biết LMOVE cần 6.2 và LMPOP cần 7.0 giúp bạn không viết xong mới phát hiện máy chủ báo lỗi không nhận lệnh.

Lợi ích khi sử dụng

  • Biết trước lệnh nào có thể làm treo máy chủ thay vì phát hiện khi hệ thống đã chậm
  • Tra nhanh phiên bản tối thiểu cần có, tránh viết mã máy chủ không chạy được
  • Gom theo kiểu dữ liệu nên tìm ra lệnh phù hợp ngay cả khi chưa nhớ tên
  • Ví dụ dán thẳng vào redis-cli, không phải tự dựng lại tham số
  • Có sẵn lệnh thay thế an toàn cho từng lệnh nguy hiểm, dùng được làm quy ước cho cả nhóm phát triển
  • Chạy hoàn toàn trên trình duyệt, không cần cài công cụ và không gửi dữ liệu đi đâu

Cách tra cứu lệnh Redis trên trang này

  1. 1Gõ tên lệnh vào ô tìm kiếm nếu đã biết mình cần gì, ô này quét cả tên lệnh, chuỗi cú pháp và phần mô tả tiếng Việt.
  2. 2Chưa biết tên lệnh thì bấm nút nhóm tương ứng với kiểu dữ liệu đang dùng, chẳng hạn Sorted Set khi làm bảng xếp hạng hoặc Stream khi làm hàng đợi sự kiện.
  3. 3Đọc dòng cú pháp để biết tham số nào bắt buộc và tham số nào tùy chọn, phần trong ngoặc vuông là tùy chọn còn dấu gạch đứng nghĩa là chọn một trong các giá trị.
  4. 4Kiểm tra hai nhãn độ phức tạp và phiên bản trước khi đưa lệnh vào mã nguồn, nhất là khi key có thể phình lên hàng trăm nghìn phần tử.
  5. 5Bấm nút sao chép để lấy ví dụ, dán vào redis-cli trên môi trường thử nghiệm rồi mới đổi tên key thành key thật.
  6. 6Bấm nút chỉ hiện lệnh nguy hiểm khi rà soát mã của người khác hoặc khi viết tài liệu vận hành, phần này liệt kê sẵn lệnh nên dùng thay thế.

Redis chạy một luồng, nên độ phức tạp thời gian là chỉ số quan trọng nhất

Khác với cơ sở dữ liệu quan hệ chạy nhiều tiến trình song song, Redis xử lý toàn bộ lệnh trên một luồng duy nhất theo thứ tự nhận được. Điều này khiến mọi thao tác trở nên nguyên tử mà không cần khóa, đó là ưu điểm lớn. Nhưng nó cũng có nghĩa là không có khái niệm truy vấn chậm chỉ ảnh hưởng một người dùng: một lệnh chạy mất năm trăm mili giây sẽ làm mọi client khác chờ đúng năm trăm mili giây đó. Vì vậy con số độ phức tạp trong tài liệu Redis không phải kiến thức hàn lâm mà là cảnh báo vận hành trực tiếp. Lệnh O(1) như GET, SET, HGET, ZSCORE hay SISMEMBER luôn an toàn dù dữ liệu lớn tới đâu. Lệnh O(log N) như ZADD hay ZRANK vẫn rất tốt vì logarit tăng cực chậm. Nhóm cần cân nhắc là O(N): SMEMBERS, HGETALL, LRANGE với khoảng rộng, ZRANGE lấy cả tập, và đặc biệt KEYS quét toàn bộ không gian khóa. Với N vài trăm thì không sao, với N vài triệu thì đó là một sự cố. Quy tắc thực dụng là ước lượng N lớn nhất mà key có thể đạt tới sau một năm chạy thật, rồi mới quyết định dùng lệnh nào. Nếu N không chặn được thì phải đổi sang lệnh duyệt theo lô như SCAN, HSCAN, SSCAN và ZSCAN.

Sáu lệnh không nên gõ trên máy chủ thật và lệnh thay thế tương ứng

KEYS quét toàn bộ không gian khóa để tìm mẫu khớp và khóa máy chủ suốt quá trình đó, thay bằng SCAN với con trỏ và tham số COUNT để chia thành nhiều lát rất ngắn. FLUSHDB xóa sạch cơ sở dữ liệu đang chọn còn FLUSHALL xóa sạch mọi cơ sở dữ liệu, cả hai không hỏi lại và còn được nhân bản sang bản sao nên không thể khôi phục từ bản sao, thay bằng SCAN kết hợp UNLINK để dọn có chọn lọc. SHUTDOWN dừng hẳn tiến trình, kèm NOSAVE thì mất mọi thay đổi từ lần lưu gần nhất, hãy dừng dịch vụ qua công cụ quản lý của hệ điều hành. DEBUG SLEEP chặn máy chủ đúng số giây đã nhập, chỉ dùng trên máy kiểm thử. MONITOR sao chép mọi lệnh của mọi client ra một kết nối, làm thông lượng tụt tới quá nửa và lộ dữ liệu nhạy cảm trong tham số lệnh, thay bằng SLOWLOG GET để xem lệnh chậm hoặc INFO commandstats để xem phân bố lệnh. Ngoài sáu lệnh trên còn một trường hợp hay bị bỏ sót: DEL trên key rất lớn giải phóng bộ nhớ ngay trong luồng chính nên có thể chặn máy chủ, hãy dùng UNLINK để việc thu hồi chạy ở luồng nền. Cách bảo vệ chắc chắn nhất không phải là nhắc nhau cẩn thận mà là chặn ở cấu hình bằng rename-command hoặc phân quyền bằng ACL SETUSER với quy tắc trừ nhóm dangerous.

Chọn đúng kiểu dữ liệu trước, rồi mới chọn lệnh

Rất nhiều vấn đề hiệu năng của Redis bắt nguồn từ việc chọn sai kiểu dữ liệu chứ không phải viết sai lệnh. String hợp cho giá trị đơn lẻ, cache trang đã dựng sẵn và bộ đếm qua INCR. Hash hợp khi một đối tượng có nhiều trường và bạn chỉ cần đọc vài trường, vì HMGET rẻ hơn nhiều so với lấy cả đối tượng rồi phân tích. List là hàng đợi vào trước ra trước với cặp RPUSH và LPOP, hoặc hàng đợi tin cậy với LMOVE để công việc không bao giờ biến mất giữa chừng. Set dùng cho tập hợp không trùng lặp và các phép giao, hợp, hiệu ngay trong Redis. Sorted set là lựa chọn cho mọi thứ cần thứ tự theo điểm: bảng xếp hạng, hàng đợi ưu tiên với ZPOPMIN, hoặc giới hạn tần suất theo cửa sổ trượt bằng cách lấy dấu thời gian làm điểm rồi dọn bằng ZREMRANGEBYSCORE. Stream mới là thứ nên dùng cho hàng đợi sự kiện có nhiều nhóm tiêu thụ, vì nó lưu lại lịch sử và theo dõi mục chưa xác nhận, khác hẳn pub/sub vốn không lưu gì và client ngoại tuyến sẽ mất tin. Bitmap và HyperLogLog dành cho thống kê quy mô lớn với bộ nhớ rất nhỏ, còn geo dùng cho truy vấn theo bán kính. Chọn đúng ở bước này giúp bạn tránh được cảnh phải dùng lệnh O(N) chỉ vì cấu trúc dữ liệu không hợp việc.

Đọc cú pháp trong tài liệu Redis và kiểm chứng bằng chính máy chủ của bạn

Chuỗi cú pháp trong bảng tra viết theo đúng quy ước của tài liệu Redis. Chữ viết hoa là từ khóa phải gõ nguyên văn. Chữ thường là giá trị bạn thay vào. Phần đặt trong ngoặc vuông là tùy chọn, có thể bỏ hoàn toàn. Dấu gạch đứng nghĩa là chọn một trong các nhánh, ví dụ NX hoặc XX chứ không được cả hai. Ba dấu chấm nghĩa là phần trước đó lặp lại được nhiều lần. Cụm numkeys xuất hiện trong EVAL, ZUNIONSTORE, LMPOP và các lệnh nhiều key khác là số key bạn phải đếm và khai báo, đếm sai là lệnh hiểu nhầm đâu là key đâu là tham số, đây là lỗi phổ biến khi mới dùng script Lua. Nếu không chắc Redis coi tham số nào là key, hãy hỏi thẳng máy chủ bằng COMMAND GETKEYS kèm câu lệnh đầy đủ. Tương tự, từ Redis 7.0 bạn có thể dùng COMMAND DOCS để lấy tóm tắt, độ phức tạp và phiên bản của một lệnh ngay từ máy chủ đang chạy, con số này luôn đúng với bản bạn đang dùng. Thói quen tốt là mở một cơ sở dữ liệu logic riêng bằng SELECT hoặc một máy chủ thử nghiệm, chạy ví dụ ở đó, quan sát kết quả trả về rồi mới đưa vào mã nguồn.

Phiên bản Redis và những lệnh dễ khiến mã chạy được ở máy này mà hỏng ở máy khác

Trường phiên bản bắt đầu có trong bảng tra tồn tại vì một lý do rất thực tế: máy chủ của bạn hiếm khi chạy bản mới nhất. Nhiều nhà cung cấp máy chủ ảo vẫn đóng gói Redis 6 trong kho phần mềm mặc định, còn các bản Redis quản lý sẵn của nhà cung cấp đám mây thường cho chọn nhiều dòng phiên bản song song. Có vài mốc nên nhớ. Redis 4.0 mang đến UNLINK cho phép xóa key lớn ở luồng nền. Redis 5.0 giới thiệu kiểu stream với cả nhóm lệnh XADD, XREADGROUP và XACK. Redis 6.0 có phân quyền ACL và giao thức RESP3 qua lệnh HELLO. Redis 6.2 bổ sung rất nhiều lệnh thay thế cho các lệnh cũ: GETDEL, GETEX, COPY, LMOVE, ZRANGESTORE, GEOSEARCH và bản ZRANGE hợp nhất thay cho ZREVRANGE cùng ZRANGEBYSCORE. Redis 7.0 thêm nhóm lệnh nhiều key kiểu LMPOP, ZMPOP, SINTERCARD, cùng hệ thống hàm với FUNCTION LOAD và FCALL. Khi viết thư viện dùng chung cho nhiều dự án, hãy đặt phiên bản tối thiểu rõ ràng trong tài liệu và kiểm tra bằng INFO server ngay lúc khởi động, thay vì để lỗi lệnh không tồn tại nổ ra giữa giờ cao điểm. Với môi trường cụm, cần chú ý thêm rằng các lệnh nhiều key chỉ chạy khi mọi key nằm cùng một khe băm, nên phải dùng dấu ngoặc nhọn để ép chúng về chung phân mảnh.

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

Vì sao không được dùng KEYS trên máy chủ thật?

Vì KEYS quét toàn bộ không gian khóa để tìm mẫu khớp, độ phức tạp O(N) với N là tổng số key. Redis xử lý lệnh trên một luồng duy nhất nên trong suốt thời gian quét, mọi client khác phải chờ. Với một triệu key, việc chờ này đủ dài để hệ thống báo lỗi hàng loạt. Hãy dùng SCAN 0 MATCH mẫu COUNT 100 rồi lặp theo con trỏ tới khi con trỏ quay về 0.

SCAN có đảm bảo trả về đủ và không trùng key không?

SCAN đảm bảo mọi key tồn tại suốt vòng duyệt đều xuất hiện ít nhất một lần, nhưng không đảm bảo không trùng, nên chương trình cần tự khử trùng lặp. Key được thêm hoặc xóa giữa chừng thì có thể xuất hiện hoặc không. Đổi lại, mỗi lần gọi chỉ tốn thời gian rất ngắn nên máy chủ không bị chặn. Tham số COUNT chỉ là gợi ý số lượng, không phải cam kết.

Khi nào phải dùng UNLINK thay cho DEL?

Khi key chứa nhiều phần tử, chẳng hạn một tập hợp hoặc hash hàng trăm nghìn tới hàng triệu mục. DEL giải phóng bộ nhớ ngay trong luồng chính nên thời gian xóa tỷ lệ với số phần tử bên trong. UNLINK có từ Redis 4.0 chỉ gỡ key khỏi không gian khóa còn việc thu hồi bộ nhớ đẩy sang luồng nền, nhờ vậy lệnh trả về gần như tức thì. Với key nhỏ thì hai lệnh tương đương nhau.

FLUSHALL và FLUSHDB khác nhau thế nào, lỡ chạy rồi có khôi phục được không?

FLUSHDB chỉ xóa cơ sở dữ liệu logic đang chọn, FLUSHALL xóa toàn bộ mọi cơ sở dữ liệu trên máy chủ. Cả hai đều được nhân bản sang bản sao nên bản sao cũng trống theo, không dùng để khôi phục được. Cách duy nhất là phục hồi từ tệp ảnh chụp hoặc tệp nhật ký ghi thêm nếu có bật, và mọi thay đổi sau thời điểm sao lưu đó vẫn mất. Nên vô hiệu hóa hai lệnh này bằng rename-command trên máy sản xuất.

Thay MONITOR bằng cách nào để xem Redis đang nhận lệnh gì?

Dùng SLOWLOG GET để đọc các lệnh vượt ngưỡng thời gian đặt trong cấu hình, đây là nơi lộ ra lệnh gây chậm. Dùng INFO commandstats để xem mỗi loại lệnh được gọi bao nhiêu lần và tốn tổng bao nhiêu thời gian. Dùng CLIENT LIST để biết kết nối nào đang chạy lệnh gì. Ba lệnh này gần như không tốn chi phí, còn MONITOR sao chép mọi lệnh ra một kết nối và có thể làm thông lượng tụt hơn một nửa.

Redis có transaction thật sự không, lỗi giữa chừng có quay lui được không?

MULTI và EXEC đảm bảo các lệnh trong khối chạy liên tiếp không xen kẽ lệnh của client khác, nhưng không có cơ chế quay lui. Nếu một lệnh trong khối lỗi lúc chạy, chẳng hạn sai kiểu dữ liệu, các lệnh còn lại vẫn chạy bình thường. Muốn có logic điều kiện thật sự thì viết script Lua chạy bằng EVAL, vì cả đoạn script chạy nguyên tử và bạn tự kiểm soát nhánh rẽ bên trong.

WATCH dùng để làm gì trong giao dịch Redis?

WATCH thực hiện khóa lạc quan. Bạn theo dõi một hoặc nhiều key, sau đó mở MULTI và xếp hàng các lệnh. Nếu có client khác sửa key đang theo dõi trước khi EXEC chạy thì EXEC trả về nil và không lệnh nào được thực hiện, chương trình phải tự đọc lại và thử lại. Đây là cách xử lý an toàn cho các tình huống đọc rồi ghi như trừ tồn kho, thay cho việc khóa bi quan.

Nên dùng pub/sub hay stream cho hàng đợi công việc?

Stream trong hầu hết trường hợp. Pub/sub không lưu thông điệp, client đang ngoại tuyến sẽ mất hoàn toàn tin gửi trong lúc đó và không có cách nào biết đã mất. Stream lưu lại lịch sử, hỗ trợ nhóm tiêu thụ qua XREADGROUP, theo dõi mục chưa xác nhận qua XPENDING và chuyển việc từ worker chết sang worker khác qua XCLAIM hoặc XAUTOCLAIM. Pub/sub chỉ hợp cho tín hiệu tức thời không quan trọng như xóa cache.

Làm sao biết Redis của tôi có hỗ trợ một lệnh cụ thể hay không?

Xem trường phiên bản bắt đầu có trong bảng tra rồi so với kết quả INFO server trên máy chủ của bạn. Cách chắc chắn hơn là hỏi thẳng máy chủ: COMMAND DOCS tên-lệnh từ Redis 7.0 trả về tài liệu ngay tại chỗ, còn COMMAND COUNT và COMMAND cho biết toàn bộ danh sách lệnh máy chủ hiện hỗ trợ, bao gồm cả lệnh do mô đun mở rộng thêm vào.

Cách nào chặn lập trình viên gõ nhầm lệnh nguy hiểm trên máy sản xuất?

Có hai lớp. Lớp cấu hình dùng rename-command trong tệp cấu hình để đổi tên hoặc vô hiệu hóa hẳn FLUSHALL, FLUSHDB, KEYS, SHUTDOWN, DEBUG và MONITOR. Lớp phân quyền từ Redis 6.0 dùng ACL SETUSER tạo tài khoản riêng cho ứng dụng với quy tắc chỉ cho phép nhóm lệnh cần thiết và trừ nhóm dangerous. Tài khoản quản trị đầy đủ chỉ giao cho người trực vận hành.

Vì sao lệnh nhiều key báo lỗi CROSSSLOT khi chạy Redis Cluster?

Vì trong chế độ cụm, mỗi key được băm về một khe rồi phân cho một nút. Các lệnh thao tác nhiều key như MGET, SINTERSTORE, ZUNIONSTORE hay EVAL chỉ chạy được khi mọi key nằm cùng một khe. Cách xử lý là dùng dấu ngoặc nhọn để chỉ định phần tên tham gia băm, ví dụ đặt tên user:{1001}:name và user:{1001}:email thì cả hai chắc chắn về cùng một nút.

Bảng tra này có gửi dữ liệu hay lệnh của tôi đi đâu không?

Không. Toàn bộ danh sách lệnh nằm sẵn trong trang, việc tìm kiếm và lọc chạy hoàn toàn bằng JavaScript trên trình duyệt của bạn. Trang không kết nối tới bất kỳ máy chủ Redis nào, không có ô nhập chuỗi kết nối và không lưu gì lại. Nút sao chép chỉ đưa ví dụ vào bộ nhớ tạm của máy bạn.

Từ khóa liên quan

  • tra cứu lệnh redis
  • redis command reference tiếng việt
  • danh sách lệnh redis đầy đủ
  • độ phức tạp lệnh redis
  • lệnh redis nguy hiểm production
  • scan thay keys redis
  • unlink thay del redis
  • flushall là gì
  • redis monitor có nên dùng không
  • lệnh redis theo kiểu dữ liệu
  • redis sorted set lệnh
  • redis stream xreadgroup
  • redis pubsub và stream khác nhau
  • redis transaction multi exec
  • redis lua script eval
  • redis bitmap hyperloglog
  • redis geo geosearch
  • phiên bản redis hỗ trợ lệnh
  • redis cli ví dụ lệnh
  • redis acl chặn lệnh nguy hiểm
  • redis cluster crossslot
  • cheat sheet redis miễn phí

Công cụ Developer Tools liên quan

.env Generator

Tạo file .env và .env.example cho dự án.

.gitignore Generator

Tạo .gitignore cho Node.js, Python, Java.

API Mock Generator

Tạo mock JSON data cho API testing.

API Response Formatter

Format và phân tích API response.

API Tester

Test REST API: GET, POST, PUT, DELETE.

Postman Alternative - API Testing Tool Online với Collections, Environment & File Upload

Postman Alternative miễn phí - Test APIs với Collections, Multiple Environments, Pre-request Scripts, Collection Runner, File Upload (form-data), Tests/Assertions, Code Generation (cURL, JS, Python, Node.js). Browser-based, không cần cài đặt. Save requests, export/import collections, auto-save history. Hỗ trợ Bearer Token, Basic Auth, API Key. Hoàn hảo cho API development và testing.

Swagger API Tester - Test API với OpenAPI/Swagger Spec & Authentication Online

Swagger API Tester miễn phí - Import OpenAPI/Swagger specification và test API endpoints với đầy đủ authentication (Bearer Token/JWT, Basic Auth, API Key). Hỗ trợ OpenAPI 3.0, Swagger 2.0, auto-parse endpoints, parameters, request body. Giao diện như Swagger UI với color-coded methods, grouped endpoints, real-time testing. Hoàn hảo cho API development, testing, debugging secured APIs.

Base Converter

Chuyển đổi Binary, Hex, Base32.

Base64 Encoder

Mã hóa/giải mã Base64.

Binary Converter

Chuyển đổi Decimal, Binary, Hex.

Box Shadow Generator

Tạo CSS box-shadow trực quan.

Chmod Calculator

Tính quyền file Linux.

Dịch vụ của Tấn Phát Digital

Đang xây sản phẩm và cần thêm người làm phần nặng?

Gói giải pháp doanh nghiệp

Nền tảng custom cho ngân hàng, y tế và sàn B2B, chuẩn ISO 27001, GDPR, PCI-DSS, SLA 99.99%.

Từ 50.000.000đXem chi tiết →

Dịch vụ phát triển Blockchain & Web3

Smart contract, dApp và NFT marketplace đa chuỗi, audit bảo mật đầy đủ trước khi lên mainnet.

Từ 50.000.000đXem chi tiết →

Dịch vụ thiết kế website tại Hồ Chí Minh

Website doanh nghiệp, bán hàng và đặt lịch, chuẩn SEO ngay từ cấu trúc, tốc độ tải dưới 3 giây.

Từ 5.000.000đXem chi tiết →

Dịch vụ thiết kế landing page

Trang đích riêng cho từng chiến dịch quảng cáo, tỷ lệ chuyển đổi 3–8%, bàn giao trong 5–21 ngày.

Từ 3.000.000đXem chi tiết →

Tư vấn và báo giá miễn phí trong 24 giờ. Xem toàn bộ dịch vụ

Zalo
Facebook
Tấn Phát Digital
Zalo
Facebook