Redis trong 25 ngày

Tuần 1:

  • Ngày 1:

    • Sáng: Giới thiệu về Redis: Lịch sử, ưu điểm, so sánh với các cơ sở dữ liệu khác, kiến trúc cơ bản, các trường hợp sử dụng phổ biến.

    • Chiều: Cài đặt môi trường Redis: Trên Linux, macOS, Windows. Làm quen với Redis CLI.

    • Bài tập:

      1. Cài đặt Redis trên máy tính cá nhân.

      2. Thực hiện các lệnh cơ bản như PING, ECHO, SET, GET.

      3. Tìm hiểu các thông tin về Redis server bằng lệnh INFO.

  • Ngày 2:

    • Sáng: Các kiểu dữ liệu cơ bản trong Redis: String, Hash, List, Set, Sorted Set.

    • Chiều: Các lệnh thao tác với từng kiểu dữ liệu (SET, GET, HSET, HGET, LPUSH, RPUSH, SADD, SMEMBERS, ZADD, ZRANGE...).

    • Bài tập:

      1. Sử dụng Redis để lưu trữ thông tin người dùng (Hash).

      2. Xây dựng một bảng xếp hạng đơn giản sử dụng Sorted Set.

      3. Tạo một hàng đợi công việc sử dụng List.

  • Ngày 3:

    • Sáng: Keys trong Redis: Các lệnh quản lý key (KEYS, EXISTS, DEL, EXPIRE, TTL...).

    • Chiều: Redis Configuration: Các tham số cấu hình quan trọng, tối ưu hóa hiệu suất Redis.

    • Bài tập:

      1. Thực hiện các thao tác tìm kiếm, xóa, đặt thời gian sống cho key.

      2. Tìm hiểu và điều chỉnh các tham số maxmemory, maxclients.

      3. Cấu hình Redis để lưu trữ dữ liệu trên đĩa (AOF, RDB).

  • Ngày 4:

    • Sáng: Redis Transactions: MULTI, EXEC, WATCH, UNWATCH. Xử lý lỗi trong transaction.

    • Chiều: Redis Pipelining: Tăng tốc độ xử lý lệnh, giảm độ trễ mạng.

    • Bài tập:

      1. Thực hiện một giao dịch chuyển tiền giữa hai tài khoản.

      2. Sử dụng pipelining để tăng tốc độ SET 1000 giá trị.

      3. Tìm hiểu về optimistic locking trong Redis.

  • Ngày 5:

    • Sáng: Pub/Sub: Xây dựng ứng dụng realtime.

    • Chiều: Redis Lua Scripting: Mở rộng khả năng của Redis bằng Lua.

    • Bài tập:

      1. Xây dựng một ứng dụng chat đơn giản sử dụng Pub/Sub.

      2. Viết một Lua script để tính toán số Fibonacci.

      3. Tìm hiểu về EVALSHA và script cache.

Tuần 2:

  • Ngày 6:

    • Sáng: Redis Replication: Cấu hình master-slave, failover.

    • Chiều: Redis Sentinel: Giám sát và tự động failover.

    • Bài tập:

      1. Cài đặt một hệ thống Redis master-slave.

      2. Cấu hình Redis Sentinel để giám sát master.

      3. Gây lỗi master và kiểm tra quá trình failover.

  • Ngày 7:

    • Sáng: Redis Cluster: Scaling Redis, sharding dữ liệu.

    • Chiều: Redis Persistence: AOF, RDB, ưu nhược điểm, cấu hình.

    • Bài tập:

      1. Cài đặt một Redis Cluster 3 node.

      2. Thực hiện các thao tác đọc ghi trên cluster.

      3. Tìm hiểu về resharding và node failover trong cluster.

  • Ngày 8:

    • Sáng: Redis Security: Authentication, firewall, mã hóa dữ liệu.

    • Chiều: Giới thiệu Redis Modules: RediSearch, RedisJSON, RedisTimeSeries.

    • Bài tập:

      1. Cấu hình Redis để yêu cầu mật khẩu đăng nhập.

      2. Sử dụng RediSearch để tìm kiếm toàn văn bản.

      3. Lưu trữ dữ liệu JSON trong Redis.

  • Ngày 9:

    • Sáng: Redis Clients: Sử dụng Redis với Python (redis-py), Golang (redigo), Rust (redis-rs).

    • Chiều: Redis Caching Strategies: Cache aside, write-through, write-back.

    • Bài tập:

      1. Kết nối đến Redis từ Python, Golang, Rust.

      2. Thực hiện các thao tác cơ bản với Redis từ các ngôn ngữ này.

      3. Xây dựng một ứng dụng web đơn giản sử dụng Redis làm cache.

  • Ngày 10:

    • Sáng: Redis Rate Limiting: Giới hạn tốc độ truy cập API.

    • Chiều: Redis Queues: Xây dựng hệ thống xử lý công việc bất đồng bộ.

    • Bài tập:

      1. Cài đặt rate limiting cho một API sử dụng Redis.

      2. Xây dựng một hệ thống gửi email bất đồng bộ sử dụng Redis queue.

      3. Tìm hiểu về các thư viện hỗ trợ Redis queue như RQ (Python).

Tuần 3:

  • Ngày 11:

    • Sáng: Redis Streams: Xây dựng ứng dụng log và message queue.

    • Chiều: Redis HyperLogLog: Đếm số lượng phần tử duy nhất với độ chính xác cao.

    • Bài tập:

      1. Sử dụng Redis Streams để ghi lại lịch sử hoạt động người dùng.

      2. Ước tính số lượng khách truy cập website duy nhất bằng HyperLogLog.

      3. Tìm hiểu về các trường hợp sử dụng khác của Redis Streams.

  • Ngày 12:

    • Sáng: Redis Bloom Filter: Kiểm tra sự tồn tại của phần tử với xác suất cao.

    • Chiều: Redis Geospatial Indexes: Lưu trữ và truy vấn dữ liệu vị trí địa lý.

    • Bài tập:

      1. Sử dụng Bloom Filter để kiểm tra xem một email đã tồn tại hay chưa.

      2. Lưu trữ vị trí của các cửa hàng trong Redis và tìm kiếm các cửa hàng gần nhất.

      3. Tìm hiểu về các ứng dụng khác của Geospatial Indexes.

  • Ngày 13:

    • Sáng: Redis Time Series: Lưu trữ và phân tích dữ liệu chuỗi thời gian.

    • Chiều: Redis Graph: Xây dựng ứng dụng mạng xã hội và đồ thị.

    • Bài tập:

      1. Sử dụng Redis Time Series để lưu trữ dữ liệu nhiệt độ và độ ẩm.

      2. Tạo một đồ thị mạng xã hội đơn giản và thực hiện các truy vấn trên đồ thị.

      3. Tìm hiểu về các thuật toán đồ thị trong Redis Graph.

  • Ngày 14:

    • Sáng: RedisAI: Thực hiện các tác vụ machine learning trong Redis.

    • Chiều: RedisGears: Xử lý dữ liệu theo thời gian thực với Redis.

    • Bài tập:

      1. Sử dụng RedisAI để thực hiện một mô hình dự đoán đơn giản.

      2. Xây dựng một ứng dụng xử lý dữ liệu log theo thời gian thực sử dụng RedisGears.

      3. Tìm hiểu về các khả năng của RedisAI và RedisGears.

  • Ngày 15:

    • Sáng: Ôn tập lại các kiến thức đã học trong tuần.

    • Chiều: Làm một dự án nhỏ tổng hợp các kiến thức đã học.

Tuần 4:

  • Ngày 16:

    • Sáng: Bắt đầu dự án ứng dụng chat realtime:

      • Xác định các tính năng chính của ứng dụng: gửi/nhận tin nhắn văn bản, hình ảnh, tạo phòng chat riêng tư/công khai, hiển thị danh sách người dùng trực tuyến.

      • Lên kế hoạch chi tiết cho dự án: các công nghệ sử dụng (Redis Pub/Sub, Streams, WebSocket), timeline.

    • Chiều: Thiết kế cơ sở dữ liệu Redis cho dự án chat:

      • Sử dụng Hash để lưu trữ thông tin người dùng (username, avatar, trạng thái online/offline).

      • Sử dụng Sorted Set để lưu trữ danh sách phòng chat và danh sách người dùng trong mỗi phòng.

      • Sử dụng Stream để lưu trữ lịch sử tin nhắn của mỗi phòng chat.

    • Bài tập:

      1. Vẽ sơ đồ cấu trúc dữ liệu Redis cho ứng dụng chat.

      2. Viết các lệnh Redis để tạo và thao tác với dữ liệu mẫu (tạo người dùng, phòng chat, gửi tin nhắn).

      3. Nghiên cứu thư viện Redis client cho ngôn ngữ lập trình bạn chọn (ví dụ: redis-py cho Python, redigo cho Golang, redis-rs cho Rust).

  • Ngày 17:

    • Sáng: Xây dựng backend cho ứng dụng chat:

      • Sử dụng ngôn ngữ lập trình và framework bạn quen thuộc (ví dụ: Python/Flask, Node.js/Express, Golang/Gin).

      • Tích hợp Redis client vào backend.

      • Viết các API hoặc hàm xử lý để:

        • Đăng ký/đăng nhập người dùng và cập nhật trạng thái online/offline.

        • Tạo phòng chat và thêm người dùng vào phòng.

        • Gửi tin nhắn đến phòng chat và lưu vào Stream.

    • Chiều: Triển khai tính năng gửi/nhận tin nhắn văn bản:

      • Sử dụng WebSocket để tạo kết nối hai chiều giữa client và server.

      • Khi có tin nhắn mới, server sẽ publish tin nhắn lên kênh Pub/Sub tương ứng với phòng chat.

      • Client lắng nghe kênh Pub/Sub và hiển thị tin nhắn mới lên giao diện.

    • Bài tập:

      1. Viết API đăng ký/đăng nhập người dùng và cập nhật trạng thái online/offline trong Redis.

      2. Viết API tạo phòng chat và thêm người dùng vào phòng.

      3. Viết API gửi tin nhắn văn bản và lưu vào Redis Stream.

  • Ngày 18:

    • Sáng: Triển khai tính năng gửi/nhận hình ảnh:

      • Cho phép người dùng tải lên hình ảnh và lưu đường dẫn vào Redis.

      • Gửi đường dẫn hình ảnh cùng với tin nhắn văn bản.

    • Chiều: Xây dựng giao diện người dùng (frontend) cho ứng dụng chat:

      • Sử dụng HTML, CSS, JavaScript và một framework frontend (ví dụ: React, Vue.js, Angular).

      • Hiển thị danh sách phòng chat và danh sách người dùng trực tuyến.

      • Hiển thị lịch sử tin nhắn và cho phép người dùng gửi tin nhắn mới.

    • Bài tập:

      1. Viết chức năng tải lên và hiển thị hình ảnh trong ứng dụng chat.

      2. Tạo giao diện người dùng cho việc đăng ký/đăng nhập, tạo phòng chat, và gửi tin nhắn.

      3. Kết nối frontend với backend thông qua WebSocket.

  • Ngày 19:

    • Sáng: Hoàn thiện tính năng tạo phòng chat riêng tư/công khai:

      • Cho phép người dùng tạo phòng chat và đặt chế độ riêng tư/công khai.

      • Chỉ những người được mời mới có thể tham gia phòng chat riêng tư.

    • Chiều: Xử lý lỗi và tối ưu hóa hiệu suất:

      • Xử lý các trường hợp lỗi như mất kết nối Redis, tin nhắn không hợp lệ, người dùng không tồn tại.

      • Tối ưu hóa việc đọc/ghi dữ liệu từ Redis để giảm thiểu độ trễ và tăng tốc độ xử lý.

    • Bài tập:

      1. Viết API tạo phòng chat và kiểm tra tính hợp lệ của dữ liệu đầu vào.

      2. Thêm cơ chế xác thực người dùng trước khi tham gia phòng chat riêng tư.

      3. Sử dụng Redis pipelining hoặc Lua scripting để tối ưu hóa các thao tác với Redis.

  • Ngày 20:

    • Sáng: Triển khai tính năng hiển thị danh sách người dùng trực tuyến:

      • Cập nhật trạng thái online/offline của người dùng trong Redis khi họ đăng nhập/đăng xuất hoặc đóng trình duyệt.

      • Hiển thị danh sách người dùng trực tuyến trong mỗi phòng chat.

    • Chiều: Triển khai dự án lên môi trường production:

      • Chuẩn bị môi trường production (ví dụ: server, Redis server).

      • Cấu hình và triển khai backend và frontend.

      • Kiểm tra lại hoạt động của ứng dụng chat trên môi trường production.

    • Bài tập:

      1. Viết API lấy danh sách người dùng trực tuyến trong một phòng chat.

      2. Cấu hình Redis để lưu trữ dữ liệu persistent (AOF hoặc RDB).

      3. Viết tài liệu hướng dẫn sử dụng và triển khai ứng dụng chat.

Tuần 5:

  • Ngày 21:

    • Sáng: Nghiên cứu chuyên sâu về Redis Streams:

      • Tìm hiểu về các khái niệm như consumer group, XREADGROUP, XACK, XPENDING.

      • Tìm hiểu cách sử dụng Redis Streams để xây dựng các ứng dụng xử lý sự kiện theo thời gian thực.

    • Chiều: Áp dụng Redis Streams vào ứng dụng chat:

      • Sử dụng Redis Streams để lưu trữ lịch sử tin nhắn của từng phòng chat một cách hiệu quả hơn.

      • Tìm hiểu cách sử dụng consumer group để xử lý tin nhắn một cách đồng thời và đảm bảo tính nhất quán của dữ liệu.

    • Bài tập:

      1. Viết một consumer đơn giản để đọc tin nhắn từ một Redis Stream.

      2. Sử dụng XREADGROUP để đọc tin nhắn từ một Stream với consumer group.

      3. Xây dựng một ứng dụng đơn giản để theo dõi các sự kiện hệ thống bằng Redis Streams.

  • Ngày 22:

    • Sáng: Tìm hiểu về các kỹ thuật mở rộng quy mô cho ứng dụng chat realtime:

      • Nghiên cứu về các giải pháp như sharding, load balancing, và caching để xử lý lượng lớn người dùng và tin nhắn.

      • Tìm hiểu về các mô hình kiến trúc như microservices và serverless để tăng tính linh hoạt và khả năng mở rộng của ứng dụng.

    • Chiều: Áp dụng các kỹ thuật mở rộng quy mô vào ứng dụng chat:

      • Phân chia ứng dụng thành các microservices độc lập (ví dụ: microservice quản lý người dùng, microservice quản lý phòng chat, microservice quản lý tin nhắn).

      • Sử dụng Redis Cluster để phân tán dữ liệu và tăng khả năng chịu lỗi.

      • Sử dụng một bộ cân bằng tải (load balancer) để phân phối lưu lượng truy cập đều giữa các microservices.

    • Bài tập:

      1. Thiết kế kiến trúc microservices cho ứng dụng chat.

      2. Cài đặt và cấu hình Redis Cluster.

      3. Tìm hiểu về các công cụ và kỹ thuật để giám sát và quản lý hiệu suất của ứng dụng chat.

  • Ngày 23:

    • Sáng: Thêm tính năng gửi tin nhắn thoại vào ứng dụng chat:

      • Cho phép người dùng ghi âm và gửi tin nhắn thoại.

      • Lưu trữ file âm thanh trên hệ thống lưu trữ (ví dụ: Amazon S3, Google Cloud Storage) và lưu đường dẫn vào Redis.

    • Chiều: Thêm tính năng video call vào ứng dụng chat:

      • Tích hợp một thư viện hoặc dịch vụ WebRTC để hỗ trợ video call.

      • Sử dụng Redis để quản lý trạng thái cuộc gọi và trao đổi thông tin giữa những người tham gia.

    • Bài tập:

      1. Tìm hiểu về WebRTC và cách tích hợp nó vào ứng dụng chat.

      2. Viết code để xử lý việc ghi âm, gửi và phát lại tin nhắn thoại.

      3. Triển khai tính năng video call đơn giản giữa hai người dùng.

  • Ngày 24:

    • Sáng: Đọc các bài viết, blog về Redis:

      • Tìm kiếm các bài viết về các chủ đề như Redis Modules, Redis performance tuning, Redis security best practices.

      • Tham gia các diễn đàn và cộng đồng Redis để trao đổi kinh nghiệm và học hỏi từ những người khác.

    • Chiều: Tìm hiểu về các ứng dụng khác của Redis:

      • Redis có thể được sử dụng trong nhiều lĩnh vực khác nhau như gaming, IoT, fintech, và nhiều hơn nữa.

      • Tìm hiểu về các trường hợp sử dụng cụ thể và cách Redis được áp dụng trong các lĩnh vực này.

    • Bài tập:

      1. Đọc ít nhất 3 bài viết về Redis từ các nguồn uy tín.

      2. Tham gia một diễn đàn hoặc cộng đồng Redis và đặt một câu hỏi hoặc trả lời một câu hỏi của người khác.

      3. Tìm hiểu về một ứng dụng cụ thể của Redis trong một lĩnh vực mà bạn quan tâm.

  • Ngày 25:

    • Sáng: Tổng kết lại quá trình học tập và thực hành Redis:

      • Xem lại các kiến thức đã học và các dự án đã thực hiện.

      • Đánh giá lại điểm mạnh và điểm yếu của bản thân trong việc sử dụng Redis.

    • Chiều: Lập kế hoạch tiếp tục học tập và phát triển với Redis:

      • Đặt mục tiêu cụ thể cho việc học tập và sử dụng Redis trong tương lai.

      • Tìm kiếm các tài liệu, khóa học, hoặc dự án mới để tiếp tục nâng cao kiến thức và kỹ năng của mình.

    • Bài tập:

      1. Viết một bản tóm tắt về những gì bạn đã học được trong khóa học Redis này.

      2. Lập danh sách các mục tiêu cụ thể mà bạn muốn đạt được với Redis trong 3 tháng tới.

      3. Tìm kiếm một khóa học nâng cao về Redis hoặc một dự án thực tế để áp dụng kiến thức đã học.