Giới thiệu về Redis

REDIS LÀ GÌ?

Redis là một cơ sở dữ liệu giá trị quan trọng thường được xếp vào nhóm cơ sở dữ liệu NoSQL. Được phát hành bởi nhà phát triển Salvatore Sanfilippo vào ngày 10 tháng 4 năm 2009.

Redis là một cơ sở dữ liệu trong bộ nhớ, có nghĩa là dữ liệu được lưu trữ trên bộ nhớ RAM của máy chủ lưu trữ. Điều này làm cho Redis nhanh bởi vì nó không phải chờ cho ổ cứng truyền thống tìm kiếm và đọc nhiều lần.

Là một cơ sở dữ liệu NoSQL, Redis cho phép bạn tạo cấu trúc dữ liệu ít lược đồ phù hợp với nhu cầu ứng dụng của bạn. Bạn có thể sử dụng Redis cho những cái đơn giản, như tạo một bộ đếm lượng khách truy cập, hoặc để biết thêm thông tin, như lưu trữ thông tin người dùng.

Redis hữu dụng khi bạn cần một cái gì đó thật sự rất nhanh. Redis có thể được sử dụng cho một loạt các trường hợp sử dụng khác nhau, như:

・Caching

・Queuing

・Pub/sub

・Machine learning

CÁCH CÀI ĐẶT REDIS

Cài đặt máy chủ Redis và công cụ dòng lệnh Redis trên Ubuntu 14.04. Hãy thêm một repository mới:

sudo add-apt-repository ppa:chris-lea/redis-server

Cập nhật hệ thống:

sudo apt-get update

Cài đặt máy chủ Redis:

sudo apt-get install -y redis-server

Redis đã được cài đặt. Chúng ta có thể xác nhận điều này bằng cách truy cập vào công cụ dòng lệnh Redis bằng cách chạy lệnh sau:

redis-cli

Đây là một ví dụ:

Bây giờ bạn có thể thoát khỏi công cụ dòng lệnh bằng cách chạy lệnh 'quit'. Redis sử dụng cổng 6379 theo mặc định.

REDIS DATA TYPES

Tương tự như các cơ sở dữ liệu khác, Redis hỗ trợ một số loại dữ liệu:

Strings

Lists

Sets

Hashes

Sorted Sets

Bitmaps

Việc chọn loại dữ liệu chính xác cho dữ liệu và yêu cầu của bạn là chìa khóa để khai thác tối đa hiệu suất và khả năng mở rộng của Redis. Hãy tìm hiểu về từng loại dữ liệu:

THÍCH ỨNG VỚI SERVER REDIS

Bây giờ chúng ta đã cài đặt máy chủ Redis, chúng ta có thể bắt đầu tương tác với nó. Để làm như vậy, chúng ta sẽ sử dụng công cụ dòng lệnh Redis mà chúng ta đã kiểm tra trước đó. Để bắt đầu, hãy chạy lệnh sau:

redis-cli

Chạy lệnh 'help':

Type: "help @<group>" to get a list of commands in <group>
      "help <command>" for help on <command>
      "help <tab>" to get a list of possible help topics
      "quit" to exit

Chúng ta có thể sử dụng lệnh 'help' để xem cách sử dụng lệnh. Ví dụ: "help HGET" trả về như sau:

HGET key field
  summary: Get the value of a hash field
  since: 2.0.0
  group: hash

Chúng ta có thể thấy rằng lệnh này là một phần của nhóm "hash", nếu chúng ta muốn tìm hiểu thêm thông tin về nhóm đó, chúng ta có thể chạy lệnh sau:

help @hash

Sau đó, sẽ xuất tất cả các lệnh có sẵn trong nhóm đó, chẳng hạn như HGET, HGETALL và HKEYS. Nếu bạn không chắc chắn nơi để bắt đầu với lệnh help sau đó đánh 'help' (xin lưu ý không gian) và sau đó nhấn phím tab. Redis sau đó sẽ đề xuất chủ đề, bạn có thể nhấn Enter để tìm hiểu thêm về chủ đề đó nếu bạn quan tâm hoặc tiếp tục nhấn tab để xoay vòng các chủ đề.

PLAYING WITH DATA

Hãy bắt đầu thêm một số dữ liệu vào Redis và sửa đổi dữ liệu đó. Chúng ta sẽ tạo một khóa cơ bản "firstkey" bằng cách chạy lệnh sau:

SET firstkey “1”

Đặt giá trị của 'firstkey' là 1. Chúng ta có thể xác nhận điều này bằng cách chạy lệnh 'GET':

GET firstkey

Giá trị trả về sẽ là "1." Bây giờ bạn đã thiết lập và lấy khóa đầu tiên của bạn trong Redis. Để tiếp tục, chúng ta có thể cập nhật giá trị bằng cách tăng nó. Chạy lệnh "INCR", khóa sẽ được tăng lên một và giá trị mới sẽ được trả về:

127.0.0.1:6379> INCR firstkey
(integer) 2

Bạn cũng có thể giảm giá trị của khoá bằng cách sử dụng lệnh "DECR". Sẽ làm giảm giá trị đi một và trả lại giá trị mới nhất của khoá.

MÔ HÌNH DỮ LIỆU

Redis có thể được sử dụng cho nhiều hơn một truy cập đơn giản. Hãy nhìn vào mô hình cấu trúc dữ liệu truyền thống của bảng người dùng. Nếu sử dụng MySQL, thì một hàng trong bảng người dùng đơn giản trông giống như sau:

Lưu ý: Mật khẩu trong ví dụ này đã được hash. Điều này có nghĩa là mật khẩu không được lưu trữ trong cơ sở dữ liệu dưới dạng văn bản thuần túy. Thông thường mật khẩu đã được hash sẽ dài hơn rất nhiều so với mật khẩu sử dụng trong ví dụ này. Ví dụ: nếu bạn sử dụng hàm sha256 để hash mật khẩu, chiều dài sẽ xấp xỉ 64 ký tự.

Chúng ta lưu giữ mật khẩu như là một hash trong trường hợp cơ sở dữ liệu của chúng ta đã từng bị đánh cắp hoặc bị truy cập độc hại. Để kiểm tra xem người dùng đã nhập đúng mật khẩu thì bạn phải hash đầu vào của họ và kiểm tra cơ sở dữ liệu cho giá trị hash đó. Để tăng cường an ninh nhiều người thêm chút "muối" vào quá trình hash của họ. Muối được sử dụng để giúp ngẫu nhiên hóa các hashes (vì vậy hai người dùng có mật khẩu giống nhau sẽ có hash khác nhau) và khiến nó khó hơn để hack một hashed password. Nếu bạn quan tâm thì có thể tìm hiểu thêm ở đây - http://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right & https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet.

Để đạt được điều này trong Redis chúng ta có thể sử dụng kiểu dữ liệu hash. Chúng ta sẽ sử dụng lệnh HMSET để thêm vào dữ liệu sử dụng của chúng ta. Đây là cấu trúc của lệnh HMSET:

HMSET [hash name] [key1] [value1] [key2] [value2]

Hãy xem lệnh đang hoạt động:

HMSET user:1 id 1 username alexbraunton password a67b9b40f76 email [email protected] verified Y

Nếu Redis hài lòng với định dạng và nhập vào thì nó sẽ trở lại "OK". Chúng ta có thể kiểm tra rằng hash đã được thêm vào máy chủ bằng cách chạy lệnh "KEYS *":

127.0.0.1:6379> KEYS *
1) "firstkey"
2) "user:1" 

Giá trị đã được lưu vào Redis. Hãy kiểm tra các hash và xem các giá trịi:

127.0.0.1:6379> HGETALL user:1
 1) "id"
 2) "1"
 3) "username"
 4) "alexbraunton"
 5) "password"
 6) "a67b9b40f76"
 7) "email"
 8) "[email protected]"
 9) "verified"
10) "Y"

Nếu bạn chỉ cần nhìn thấy các phím có sẵn (và không phải là giá trị) của một hash thì bạn có thể chạy lệnh "HKEYS":

127.0.0.1:6379> HKEYS user:1
1) "password"
2) "email"
3) "username"
4) "id"
5) "verified"

Để có được một giá trị cụ thể, chúng ta có thể truy cập nó bằng khóa của nó bằng cách sử dụng lệnh "HGET":

127.0.0.1:6379> HGET user:1 email
"[email protected]"

Người dùng muốn cập nhật địa chỉ email của họ, vì vậy hãy cập nhật thông tin của người dùng. Chúng ta có thể làm điều này bằng cách sử dụng lệnh "HMSET":

127.0.0.1:6379> HMSET user:1 email "[email protected]"
OK
127.0.0.1:6379> HGET user:1 email
"[email protected]"

Bạn có thể thấy rằng Redis đã trả lại "OK" và khi chúng ta kiểm tra giá trị của khóa, chúng ta thấy rằng nó đã được cập nhật. Giả sử một trong những người dùng của chúng ta cần phải được xóa khỏi Redis. Chúng ta có thể làm điều này bằng cách chạy lệnh "DEL":

127.0.0.1:6379> DEL user:1
(integer) 1
127.0.0.1:6379> KEYS *
1) "firstkey"

Chúng ta truyền hash vào lệnh DEL như một đối số và Redis trả về một số nguyên là 1 để cho chúng ta biết rằng thao tác đã hoàn tất. Nếu chúng ta đã cố gắng chạy lệnh "DEL user: 1" thì Redis sẽ trả lại một số nguyên là 0. Câu lệnh thứ hai chạy là "KEYS " để xác nhận rằng nó đã bị xóa.

SỬ DỤNG REDIS VỚI ỨNG DỤNG PHP

Bây giờ bạn đã cài đặt máy chủ Redis và bạn đã quen thuộc với công cụ dòng lệnh, hãy xem xét việc tích hợp Redis với ứng dụng web PHP.

Đối với một cơ sở mã PHP, tôi khuyên bạn nên sử dụng thư viện Predis vì nó rất nhanh và rất dễ bắt đầu nhưng cũng rất có thể cấu hình khi cần.

Bạn có thể tìm thấy nhiều tài liệu như hướng dẫn cài đặt và cách bắt đầu trên trang Predis GitHub chính thức - http://github.com/nrk/predis

NGUỒN THAM KHẢO

Trang web chính thức Redis - http://redis.io/

Danh sách các lệnh Redis - http://redis.io/commands

Thư viện mã Predis - https://github.com/nrk/predis