Tổng hợp Redis command: Chi tiết lệnh Redis phổ biến kèm ví dụ

Redis là một hệ thống cơ sở dữ liệu in-memory nổi bật, không chỉ nhờ hiệu năng truy xuất cực nhanh mà còn bởi khả năng xử lý linh hoạt với nhiều cấu trúc dữ liệu. Để khai thác tối đa sức mạnh của Redis, ta cần hiểu và sử dụng thành thạo các Redis command từ những lệnh cơ bản đến các lệnh nâng cao.

Đọc bài viết này để hiểu rõ:

  • Các cách thực thi Redis command
  • Cách sử dụng từng lệnh Redis (có ví dụ minh họa)
  • Một số kịch bản dùng lệnh Redis torng thực tế

Tổng quan về Redis

Redis (Remote Dictionary Server) là một hệ thống cơ sở dữ liệu key-value dạng in-memory, mã nguồn mở, nổi tiếng với tốc độ truy xuất cực nhanh. Redis thường được dùng để làm cache, quản lý session, xử lý hàng đợi, lưu trữ dữ liệu tạm thời, truyền và nhận thông điệp giữa các thành phần trong hệ thống (pub/sub messaging), xây dựng bảng xếp hạng (leaderboards), phân tích dữ liệu theo thời gian thực (real-time analytics) và hỗ trợ các hệ thống yêu cầu phản hồi nhanh chóng.

Đọc thêm: Redis là gì: Tổng hợp tính năng hữu ích nhất của Redis

Không giống các hệ quản trị cơ sở dữ liệu quan hệ (như MySQL), Redis lưu trữ dữ liệu trong bộ nhớ RAM, giúp các thao tác đọc/ghi diễn ra gần như tức thời. Tuy nhiên, Redis cũng hỗ trợ cơ chế lưu trữ bền vững (persistence) để ghi dữ liệu xuống đĩa cứng để tránh mất mát trong trường hợp hệ thống gặp sự cố. Hai phương pháp phổ biến là: 

  • RDB (Redis Database snapshot) chụp nhanh toàn bộ dữ liệu định kỳ
  • AOF (Append Only File) ghi lại từng thao tác ghi dữ liệu để có thể phục hồi chính xác trạng thái trước đó. 

Ngoài ra, Redis hỗ trợ nhiều kiểu dữ liệu đa dạng như: 

  • Strings: kiểu dữ liệu cơ bản.
  • Lists: danh sách có thứ tự.
  • Sets: tập hợp không trùng lặp.
  • Sorted Sets: tập hợp có thứ tự theo điểm số.
  • Hashes: bảng băm (key-value lồng nhau).
  • Bitmaps, HyperLogLogs: phục vụ tính toán số lượng phần tử duy nhất với chi phí thấp.
  • Geospatial Indexes: lưu trữ và truy vấn theo vị trí địa lý.
  • Streams: quản lý dữ liệu luồng theo thời gian.

Redis command là gì?

Redis hoạt động chủ yếu thông qua các lệnh (commands) được gửi qua giao thức TCP hoặc Unix socket. Mỗi thao tác từ lưu dữ liệu, đọc dữ liệu, đến cấu hình hệ thống đều được thực hiện thông qua câu lệnh Redis.

Có thể thực thi Redis command bằng nhiều cách:

  • Dòng lệnh (redis-cli): công cụ CLI mặc định đi kèm Redis.
  • Từ ứng dụng: sử dụng client library như ioredis, node-redis (Node.js), redis-py (Python), Jedis (Java), StackExchange.Redis (.NET),…
  • Thông qua UI trực quan như RedisInsight, Redis Commander để quan sát dữ liệu và gửi lệnh dễ dàng.

Tổng hợp Redis commands

Nhóm lệnh thao tác với key-value (cơ bản)

Cú pháp lệnhMô tả chi tiếtVí dụ lệnh
SET key value [EX seconds] [NX|XX]Dùng để lưu giá trị cho một key; nếu key đã tồn tại thì giá trị sẽ bị ghi đè.
EX seconds: thiết lập thời gian sống (expire time) cho key, tính bằng giây.
NX: chỉ thực hiện nếu key chưa tồn tại (thường dùng trong cơ chế locking để tránh ghi đè).
XX: chỉ thực hiện nếu key đã tồn tại (dùng để cập nhật có điều kiện).
Lưu tên người dùng:
SET user:name "Alice"
→ Lưu chuỗi “Alice” vào key user:name. Nếu key chưa tồn tại, Redis sẽ tạo mới. 
SET session:token "abc123" EX 3600 NX
GET keyTruy xuất giá trị đã lưu từ key và trả về nil nếu key không tồn tại.Lấy tên đã lưu:
GET user:name
→ Trả về “Alice” nếu key tồn tại.
DEL key [key ...]Xóa một hoặc nhiều key khỏi Redis. Trả về số lượng key đã xóa thành công.Xoá tên đã lưu:
DEL user:name
Xóa nhiều key: 
DEL user:name user:email user:age
EXPIRE key secondsThiết lập thời gian sống cho một key (tính bằng giây). Sau thời gian này, key sẽ tự động bị xóa.Thiết lập thời gian sống cho key:EXPIRE session:123 3600
→ Sau 60 giây, key user:name sẽ bị Redis tự động xóa.
TTL keyKiểm tra thời gian còn lại (tính bằng giây) trước khi key hết hạn. Trả về -1 nếu key không có expire, -2 nếu key không tồn tại.TTL session:123 
→ Trả về số giây còn lại hoặc -1/-2
SETEX key seconds valueThiết lập giá trị và thời gian hết hạn cho key trong một bước.SETEX session:token 3600 "abc123"
→ Lưu giá trị “abc123” vào key session:token và thiết lập thời gian sống cho key là 3600 giây.
PSETEX key milliseconds valueThiết lập giá trị và thời gian hết hạn cho key tính bằng millisecond.PSETEX session:token 3600000 "abc123"
→ Lưu giá trị “abc123” vào key session:token và thiết lập thời gian sống cho key là 3600000 milliseconds (60 phút).
SETNX key valueThiết lập giá trị cho key nếu key chưa tồn tại.SETNX user:name "Alice"
→ Lệnh này chỉ thực hiện nếu key user:name chưa tồn tại.
ARRAPPEND key value [value ...]Thêm phần tử vào cuối mảng (array) trong key.ARRAPPEND arr1 "value1" "value2"
→ Thêm các phần tử “value1”, “value2” vào cuối mảng arr1.
ARRINDEX key valueTrả về chỉ số của một phần tử trong mảng (array) của key.ARRINDEX arr1 "value1"
→ Trả về chỉ số của phần tử “value1” trong mảng arr1.

Nhóm lệnh thao tác với số và chuỗi

Cú pháp lệnhMô tả chi tiếtVí dụ lệnh
INCR keyTăng giá trị số nguyên của key lên 1. Nếu key chưa tồn tại, Redis sẽ khởi tạo nó với giá trị 0 rồi tăng.Tạo bộ đếm lượt truy cập:INCR page:views
→ Redis sẽ tăng giá trị tại key page:views thêm 1. Nếu key chưa tồn tại, nó sẽ được tạo và khởi tạo bằng 1.
DECR keyGiảm giá trị số nguyên của key đi 1.DECR page:views
STRLEN keyTrả về độ dài chuỗi giá trị của key.STRLEN msg 
→ Trả về 6 nếu msg = “Hello!“.
APPEND key valueThêm chuỗi vào cuối giá trị hiện tại của key.APPEND msg "!" 
→ Nếu key = “Hello”, kết quả là “Hello!”.
MGET key [key ...]Trả về giá trị của nhiều keys cùng một lúc.MGET user:name user:email
→ Trả về giá trị của các key user:name và user:email nếu chúng tồn tại.

Nhóm lệnh thao tác với danh sách (List)

Cú pháp lệnhMô tả chi tiếtVí dụ lệnh
LPUSH key value [value ...]Thêm phần tử vào đầu danh sách. Nếu key chưa tồn tại, Redis sẽ tạo mới.Thêm công việc vào hàng đợi:
LPUSH tasks "email"
→ Redis sẽ thêm công việc vào đầu danh sách, trong đó:
tasks là danh sách hàng đợi
– “send-email” là công việc mới.
RPUSH key value [value ...]Thêm một phần tử vào cuối của danh sách.Thêm công việc vào cuối hàng đợi:
LPUSH job:queue "send-email"
Trong đó:
job:queue: tên danh sách
– “send-email“: công việc cần xử lý
→ Redis sẽ thêm “send-email” vào đầu danh sách. Các phần tử mới sẽ xếp sau các phần tử cũ. Thích hợp cho kiểu xử lý  FIFO (First In – First Out)
LPOP key [count]Lấy và loại bỏ phần tử ở đầu danh sách. Có thể lấy nhiều phần tử cùng lúc với tham số count.Lấy công việc tiếp theo:
LPOP tasks
LPOP tasks 3 (lấy 3 phần tử) 
→ Lấy và xóa phần tử đầu tiên trong danh sách.
LRANGE key start stopTruy vấn một phạm vi phần tử từ danh sách, với chỉ số bắt đầu và kết thúc.LRANGE tasks 0 2
→ Trả về các phần tử trong danh sách tasks từ chỉ số 0 đến chỉ số 2 (bao gồm cả chỉ số 0 và 2).

Nhóm lệnh thao tác với bảng băm (Hash)

Cú pháp lệnhMô tả chi tiếtVí dụ lệnh
HSET key field valueGán một field trong bảng hash (giống như object JSON).Lưu thông tin người dùng dạng object:
HSET user:1 name "Alice"
→ Tạo bảng hash user:1, gán field name là “Alice“.
HGET key fieldLấy giá trị field từ hash.HGET user:1 name
→ Trả về “Alice” 
HDEL key field [field ...]Xóa một hoặc nhiều trường trong bảng hash.HDEL user:1 age
→ Xóa trường age trong bảng hash user:1.
HGETALL keyLấy tất cả các trường và giá trị của một bảng hash.HGETALL user:1
→ Trả về tất cả các trường và giá trị trong bảng hash user:1.
HINCRBY key field incrementTăng giá trị của một trường trong bảng hash.HINCRBY user:1 age 1
→ Tăng giá trị của trường age trong bảng hash user:1 lên 1.

Nhóm lệnh thao tác với tập hợp (Set)

Cú pháp lệnhMô tả chi tiếtVí dụ lệnh
SADD key valueThêm phần tử vào tập hợp (set), không thêm nếu phần tử đã tồn tại.Tạo danh sách tag không trùng lặp:
SADD tags "redis"
→ Thêm “redis” vào tập hợp tags. Nếu “redis” đã có thì không thêm lại.
SISMEMBER key valueKiểm tra xem phần tử có trong tập hợp không.SISMEMBER tags "redis"
→ Trả về 1 nếu “redis” có trong tập, 0 nếu không.
SPOP key [count]Lấy và xóa một hoặc nhiều phần tử ngẫu nhiên từ tập hợp.SPOP tags 2
→ Lấy và xóa 2 phần tử ngẫu nhiên từ tập hợp tags.
SMEMBERS keyLấy tất cả các phần tử trong một tập hợp.SMEMBERS tags
→ Trả về tất cả các phần tử trong tập hợp tags.
SDIFF key1 key2 [key3 ...]Trả về phần tử chỉ có trong tập hợp đầu tiên nhưng không có trong các tập hợp còn lại.SDIFF tags other_tags
→ Trả về phần tử trong tập hợp tags mà không có trong tập hợp other_tags.

Nhóm lệnh thao tác với Sorted Set (ZSet)

Cú pháp lệnhMô tả chi tiếtVí dụ lệnh
ZADD key score memberThêm phần tử vào sorted set kèm điểm số (dùng để sắp xếp).Tạo bảng xếp hạng:
ZADD leaderboard 1500 "player1"
→ Thêm “player1” với điểm 1500 vào sorted set leaderboard.
ZRANGE key start stop [WITHSCORES]Truy xuất các phần tử theo thứ tự điểm từ thấp đến cao.ZRANGE leaderboard 0 -1 WITHSCORES
→ Lấy toàn bộ danh sách theo thứ tự từ thấp đến cao kèm điểm.
ZREM key member [member …]Xóa một hoặc nhiều phần tử khỏi sorted set.ZREM leaderboard “player1″→ Xóa phần tử “player1” khỏi sorted set leaderboard.
ZINCRBY key increment memberTăng điểm của một phần tử trong sorted set.ZINCRBY leaderboard 10 "player1"
→ Tăng điểm của phần tử “player1” trong sorted set leaderboard lên 10.

Nhóm lệnh thao tác với Stream (dữ liệu luồng)

Cú pháp lệnhMô tả chi tiếtVí dụ lệnh
XADD key ID field value [field value ...]Thêm một mục vào stream (dòng) Redis.XADD mystream * sensor-id 1234 temperature 19
→ Thêm mục mới vào stream mystream với ID tự động và các trường sensor-idtemperature.
XREAD key [COUNT count] [BLOCK milliseconds] STREAMS key [key ...]Đọc từ stream Redis. Lệnh này thường dùng trong hệ thống thời gian thực (real-time).XREAD COUNT 2 BLOCK 0 STREAMS mystream
→ Đọc các mục từ stream mystream, trả về 2 mục đầu tiên, và chặn cho đến khi có mục mới nếu cần.

Nhóm lệnh Pub/Sub và Transaction

Cú pháp lệnhMô tả chi tiếtVí dụ lệnh
PUBLISH channel messageGửi một tin nhắn đến một kênh.PUBLISH news "Hello, Redis!"
→ Gửi tin nhắn “Hello, Redis!” đến kênh news.
SUBSCRIBE channel [channel ...]Đăng ký để nhận tin nhắn từ một kênh.SUBSCRIBE news
→ Đăng ký để nhận tất cả tin nhắn từ kênh news.
MULTIBắt đầu một giao dịch Redis, được thực thi sau khi gọi lệnh EXEC
EXECThực thi các lệnh trong giao dịch đã bắt đầu với lệnh MULTI.
DISCARDHủy bỏ giao dịch.

Nhóm lệnh quản trị và quan sát hệ thống

Cú pháp lệnhMô tả chi tiếtVí dụ lệnh
SCAN cursor [MATCH pattern] [COUNT count]Duyệt qua các keys trong Redis theo cách không đồng bộ, giúp tránh chặn Redis.SCAN 0 MATCH user:* COUNT 100
→ Tìm kiếm tất cả các keys bắt đầu với “user:” và giới hạn kết quả là 100 keys.
INFOTrả về thông tin về Redis server.
MONITORGiám sát tất cả các lệnh được gửi đến Redis server.

6 ví dụ thực tế dùng Redis command hiệu quả

Cache dữ liệu API để tăng tốc độ phản hồi

Trong các ứng dụng hiện đại, dữ liệu thường được lấy từ API bên ngoài (thời tiết, tỷ giá, dữ liệu thị trường,…). Nếu mỗi lần người dùng thao tác đều phải gọi API thì ứng dụng sẽ chậm và dễ bị rate limit. 

Giải pháp là cache kết quả tạm thời trong Redis. Ví dụ để cache dữ liệu API trong 5 phút, ta dùng:

GET weather:saigon
# Nếu chưa có, gọi API rồi:
SET weather:saigon "{temp:31}" EX 300

=> Dữ liệu được lưu vào Redis với key weather:saigon, thời hạn 300 giây. Lần truy cập sau chỉ cần GET, không cần gọi lại API.

Mẹo: Nên áp dụng quy tắc đặt tên (naming convention) nhất quán cho các key trong Redis, ví dụ: api:weather:saigon. Ngoài ra, bạn cũng có thể triển khai các chiến lược như cache warming (tự động nạp sẵn dữ liệu phổ biến vào cache sau khi khởi động hệ thống) và cache invalidation (làm mới hoặc xóa cache khi dữ liệu gốc thay đổi) để đảm bảo hiệu suất và tính nhất quán dữ liệu.

Lưu phiên đăng nhập người dùng (Session Store)

Khi người dùng đăng nhập, hệ thống thường cần lưu trạng thái đăng nhập tạm thời (token, userID,…). Redis là nơi lưu session lý tưởng vì tốc độ cao và hỗ trợ TTL. 

Ví dụ để lưu session có thời hạn 1 giờ, ta dùng:

SET session:abc123 "userId:42"
EXPIRE session:abc123 3600

=> Session abc123 lưu thông tin người dùng, sau 3600 giây sẽ tự hết hạn. Phù hợp cho các hệ thống cần logout tự động hoặc chống session rác.

Mẹo: Khi cần lưu trữ dữ liệu phiên (session) có cấu trúc phức tạp, bạn nên sử dụng lệnh HSET. Redis Hash cho phép lưu nhiều cặp trường–giá trị (field–value) trong cùng một key, giúp bạn dễ dàng cập nhật từng phần của session mà không cần ghi đè toàn bộ dữ liệu. 

Tạo hàng đợi xử lý công việc nền (Job Queue)

Trong các hệ thống như gửi email, resize ảnh, xử lý đơn hàng…, các tác vụ thường chạy nền và cần được xử lý lần lượt. Redis list kết hợp LPUSH và LPOP là một giải pháp đơn giản và hiệu quả. 

Ví dụ để push và pop công việc từ hàng đợi:

LPUSH job:queue "send-email"
LPOP job:queue

=> LPUSH thêm công việc mới vào hàng đợi; LPOP lấy ra công việc đầu tiên để xử lý. Dễ tích hợp với worker chạy song song.

Mẹo: Dùng BLPOP để tránh polling liên tục, giúp tiết kiệm CPU vì worker chỉ “thức dậy” khi có dữ liệu và có thể triển khai hàng đợi ưu tiên bằng cách dùng nhiều list.

Tạo bảng xếp hạng người chơi (Leaderboard)

Khi cần xếp hạng người dùng theo điểm số (ví dụ game, thi đua, KPI…), Redis Sorted Set giúp lưu và truy vấn dữ liệu đã sắp xếp rất nhanh. 

Ví dụ để thêm người chơi vào leaderboard và xem bảng xếp hạng:

ZADD leaderboard 2000 "playerA"
ZADD leaderboard 3200 "playerB"
ZRANGE leaderboard 0 -1 WITHSCORES

=> Redis sắp xếp theo điểm (score), cho phép lấy danh sách top theo thứ tự tăng dần (hoặc dùng ZREVRANGE để lấy top giảm dần).

Mẹo: Dùng ZREVRANGE để lấy danh sách xếp hạng từ cao xuống (top list), ZRANK hoặc ZREVRANK để biết vị trí của một user. Có thể tạo nhiều bảng xếp hạng (leaderboard) tương ứng với từng khoảng thời gian khác nhau như ngày, tuần, tháng.

Đếm lượt truy cập trang (Page Views Counter)

Đếm số lượt xem trang là tính năng rất phổ biến. Redis hỗ trợ INCR để tăng số nguyên nhanh, gọn mà không cần read-modify-write như database truyền thống. 

Ví dụ để tăng lượt truy cập mỗi lần trang được truy cập:

INCR page:homepage

=> Redis sẽ tăng giá trị tại key page:homepage thêm 1 mỗi lần người dùng truy cập. Vì dữ liệu lưu ở dạng số nguyên, thao tác rất nhẹ, tốc độ cao và đặc biệt là atomic – đảm bảo tính nhất quán ngay cả khi có nhiều người truy cập cùng lúc.

Mẹo: Kết hợp INCR với EXPIRE để tạo bộ đếm trượt theo thời gian (sliding window counters). Ngoài ra, có thể dùng HINCRBY để nhóm các bộ đếm theo ngày hoặc phân loại khác, ví dụ: HINCRBY stats:daily 2025-07-12 1 => Tăng bộ đếm truy cập cho ngày 2025-07-12 trong nhóm stats:daily.

Lưu và gợi ý từ khóa tìm kiếm không trùng lặp

Trong hệ thống tìm kiếm, ta cần lưu danh sách từ khóa người dùng đã tìm, nhưng không muốn lưu trùng. Redis Set là cấu trúc phù hợp vì tự loại bỏ trùng lặp. 

Ví dụ để lưu từ khóa tìm kiếm:

SADD search:tags "redis"
SADD search:tags "nodejs"
SMEMBERS search:tags

=> SADD chỉ thêm nếu phần tử chưa tồn tại. SMEMBERS lấy toàn bộ tập hợp, là lựa chọn lý tưởng cho autocomplete hoặc filter.

Mẹo: Dùng SINTER để tìm các tag chung giữa người dùng (intersection), SUNION để gộp nhiều tập tag lại với nhau. Có thể dùng SPOP để xoay vòng hoặc chọn ngẫu nhiên một tag trong các kịch bản như gợi ý nội dung luân phiên.

Câu hỏi thường gặp về Redis command

Làm sao kiểm tra key còn tồn tại hay không?

Để kiểm tra một key có tồn tại trong Redis hay không, ta có thể sử dụng lệnh EXISTS <key>. Lệnh này sẽ trả về 1 nếu key tồn tại và 0 nếu không tồn tại. Ví dụ: EXISTS user:1 sẽ trả về 1 nếu key user:1 đang có trong Redis. Đây là cách kiểm tra đơn giản và rất hữu dụng trước khi thực hiện các thao tác như GET, DEL hay EXPIRE.

Redis command có hỗ trợ atomic không?

Có. Redis đảm bảo rằng tất cả các lệnh đơn lẻ đều được thực thi theo cách atomic – tức là mỗi lệnh được xử lý hoàn toàn trước khi chuyển sang lệnh kế tiếp, không bị gián đoạn hay ghi đè bởi lệnh từ các client khác.

Ngoài ra, Redis cũng hỗ trợ thực hiện giao dịch (transaction) thông qua nhóm lệnh MULTI, EXEC, WATCH DISCARD, giúp đảm bảo tính nhất quán khi cần thực hiện nhiều lệnh liên tiếp như một khối thống nhất.

Có command nào để backup hoặc dump dữ liệu Redis không?

Redis không có lệnh xuất dữ liệu thành file như database truyền thống, nhưng cung cấp hai cơ chế sao lưu là RDB (Redis Database Backup) và AOF (Append Only File). Với RDB, ta có thể dùng lệnh SAVE (đồng bộ) hoặc BGSAVE (chạy nền) để tạo file dump.rdb chứa snapshot dữ liệu toàn bộ Redis. Với AOF, Redis sẽ ghi lại mọi lệnh ghi dữ liệu, có thể dùng để khôi phục trạng thái gần nhất.

Ngoài ra, Redis cũng hỗ trợ chế độ hybrid persistence, kết hợp cả RDB và AOF để tăng tính an toàn. Nếu muốn backup, bạn chỉ cần sao chép các file này từ thư mục lưu trữ của Redis.

Tổng kết

Redis không chỉ là một kho lưu tạm đơn thuần, mà là một nền tảng dữ liệu mạnh mẽ có thể xử lý đủ loại bài toán  từ cache, hàng đợi, session store cho đến leaderboard hay counting. Việc nắm vững các Redis command giúp ta viết code hiệu quả hơn, tận dụng tối đa tài nguyên hệ thống và xây dựng các ứng dụng có hiệu suất vượt trội. 

ITviec hy vọng với cheatsheet và các ví dụ cụ thể trong bài viết, bạn đã có nền tảng vững vàng để bắt đầu ứng dụng Redis vào dự án của mình một cách tự tin và hiệu quả hơn.

TÁC GIẢ
Mỹ Duyên
Mỹ Duyên

Content Writer

Là cử nhân ngành Data Science, Duyên có hơn 1 năm kinh nghiệm nghiên cứu trong ngành Data và tập trung vào AI, phân tích dữ liệu. Thông qua những bài viết từ cơ bản đến nâng cao thuộc lĩnh vực cơ sở dữ liệu, Duyên mang đến cho độc giả những cái nhìn toàn diện và mới mẻ về thế giới công nghệ thông tin và dữ liệu.