TL;DR
Redis client của bạn đang gửi lệnh AUTH, nhưng server chưa cấu hình mật khẩu. Hãy sửa bằng cách xóa mật khẩu khỏi cấu hình client, hoặc thêm requirepass yourpassword vào redis.conf rồi khởi động lại Redis. Client và server phải khớp với nhau.
Ý nghĩa của lỗi
Redis chỉ kiểm tra thông tin xác thực khi requirepass được khai báo trong redis.conf. Nếu chỉ thị này bị thiếu (hoặc bị comment out), server sẽ không có mật khẩu — nhưng client của bạn vẫn gửi mật khẩu đi. Redis không bỏ qua điều này; nó ném ra lỗi:
ERR Client sent AUTH, but no password is set. Did you mean ACL SETUSER with >password?
Hãy nghĩ đây là ngược lại của NOAUTH Authentication required. Lỗi đó nghĩa là client quên xác thực. Còn lỗi này nghĩa là client xác thực với một server không cần xác thực. Các nguyên nhân phổ biến:
- Bạn sao chép connection string từ môi trường staging/prod (có mật khẩu) sang Redis local dev không có mật khẩu.
- Ai đó đã xóa
requirepasskhỏiredis.confnhưng không cập nhật lại cấu hình ứng dụng. - File Docker Compose chỉ truyền
--requirepassở một số môi trường nhất định. - Bạn đang dùng Redis 6+ với hệ thống ACL, nhưng client vẫn gửi
AUTH passwordtheo kiểu cũ.
Cách sửa 1 — Xóa mật khẩu khỏi client (sửa cho môi trường dev/local)
Chạy local mà không cần xác thực? Hãy dừng việc gửi AUTH từ phía client. Chỉ vậy thôi.
redis-cli
Bỏ flag -a:
# Sai — gửi AUTH
redis-cli -a mypassword ping
# Đúng — không gửi AUTH
redis-cli ping
Node.js (ioredis)
// Xóa hoàn toàn trường password
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
// password: 'mypassword' ← xóa hoặc comment dòng này
});
Python (redis-py)
import redis
# Bỏ password=
r = redis.Redis(host='localhost', port=6379, db=0)
# r = redis.Redis(host='localhost', port=6379, password='mypassword', db=0) ← cũ
Dùng biến môi trường
Nếu ứng dụng đọc Redis URL từ biến môi trường, hãy đảm bảo môi trường local không mang theo thông tin xác thực từ staging:
# Local .env — không có mật khẩu
REDIS_URL=redis://localhost:6379
# Production .env — có mật khẩu
REDIS_URL=redis://:strongpassword@redis-host:6379
Cách sửa 2 — Thêm requirepass vào Redis server (khuyến nghị cho môi trường không phải dev)
Ngược lại: client có mật khẩu đúng, nhưng server chưa được cấu hình để yêu cầu mật khẩu. Hãy thiết lập ở phía server.
Chỉnh sửa redis.conf
# Tìm file redis.conf
# Các vị trí thường gặp:
# /etc/redis/redis.conf
# /etc/redis.conf
# /usr/local/etc/redis.conf
sudo nano /etc/redis/redis.conf
Tìm dòng requirepass (thường đang bị comment) và đặt giá trị:
# Trước:
# requirepass foobared
# Sau:
requirepass yourStrongPassword
Rồi khởi động lại Redis:
sudo systemctl restart redis
# hoặc
sudo service redis-server restart
Docker / Docker Compose
# docker run
docker run -d --name redis \
-p 6379:6379 \
redis:7 redis-server --requirepass yourStrongPassword
# docker-compose.yml
services:
redis:
image: redis:7
command: redis-server --requirepass yourStrongPassword
ports:
- "6379:6379"
Đặt ngay lúc chạy (không cần restart, không lưu vĩnh viễn)
redis-cli config set requirepass yourStrongPassword
Cảnh báo: thay đổi này sẽ mất sau khi restart, trừ khi bạn cũng cập nhật redis.conf. Dùng được cho thử nghiệm nhanh, không phù hợp cho môi trường ổn định.
Cách sửa 3 — Hệ thống ACL của Redis 6+
Thông báo lỗi có gợi ý: "Did you mean ACL SETUSER with >password?" — Redis đang hướng bạn đến hệ thống xác thực hiện đại được giới thiệu từ phiên bản 6. Thay vì một mật khẩu toàn cục duy nhất, ACL cho phép định nghĩa thông tin xác thực riêng cho từng user.
Để đặt mật khẩu cho user mặc định:
# Đặt mật khẩu cho default user qua ACL
redis-cli ACL SETUSER default on >yourpassword ~* &* +@all
# Hoặc trong redis.conf (acl file hoặc inline):
# user default on >yourpassword ~* &* +@all
Trước tiên, kiểm tra trạng thái hiện tại:
redis-cli ACL LIST
# Ví dụ output:
# user default on nopass ~* &* +@all ← nghĩa là KHÔNG yêu cầu mật khẩu
Nếu thấy nopass, server chấp nhận kết nối không cần mật khẩu — client của bạn không nên gửi AUTH trong trường hợp này.
Kiểm tra lại sau khi sửa
Kiểm tra nhanh sau khi thực hiện bất kỳ thay đổi nào ở trên:
# Thử xác thực thủ công
redis-cli -a yourStrongPassword ping
# Kết quả mong đợi: PONG
# Kiểm tra cấu hình server
redis-cli -a yourStrongPassword config get requirepass
# Kết quả mong đợi:
# 1) "requirepass"
# 2) "yourStrongPassword"
# Kiểm tra ACL cho default user
redis-cli -a yourStrongPassword ACL WHOAMI
# Kết quả mong đợi: "default"
Nhận được PONG nghĩa là quá trình bắt tay xác thực đã hoạt động đúng.
Mẹo thêm
Hãy tạo mật khẩu ngẫu nhiên đủ mạnh cho Redis — đừng dùng thứ gì dễ nhớ. Mật khẩu yếu là rủi ro thực sự nếu Redis vô tình bị lộ ra ngoài mạng. Tôi dùng trình tạo mật khẩu của ToolCraft để lấy chuỗi ngẫu nhiên 32 ký tự trong vài giây. Công cụ chạy hoàn toàn trên trình duyệt, không upload lên server — điều quan trọng khi bạn đang xử lý thông tin xác thực máy chủ.
Thêm ba điều cần chú ý khi đang cấu hình:
- Bind Redis vào
127.0.0.1trừ khi thực sự cần truy cập từ mạng: thêmbind 127.0.0.1vàoredis.conf. - Lưu connection string của Redis trong biến môi trường ở tất cả các môi trường. Không bao giờ hardcode chúng.
- Chạy Redis trên Kubernetes? Lưu mật khẩu trong Secret và tham chiếu qua biến môi trường trong cả Redis deployment lẫn các app pod.

