Redis Basics

Kiến thức cơ bản về Redis

Redis overview

Redis là gì?

Redis là tên viết tắt của Remote Dictionary Server (Máy chủ từ điển từ xa), là một phần mềm mã nguồn mở được dùng để lưu trữ một cách tạm thời trên bộ nhớ (hay còn gọi là cache data) và giúp truy xuất dữ liệu một cách nhanh chóng. Do tốc độ truy xuất dữ liệu vượt trội, Redis thường được chọn sử dụng cho hoạt động lưu trữ bộ nhớ đệm Caching, quản lý phiên, trò chơi, bảng xếp hạng, phân tích theo thời gian thực, dữ liệu không gian địa lý, ứng dụng đặt xe, trò chuyện/nhắn tin, phát trực tiếp nội dung phương tiện và pub/sub.

redis.png

Lợi ích của Redis

1. Lưu trữ dữ liệu trên RAM

Toàn bộ dữ liệu Redis nằm trong bộ nhớ chính của máy chủ, trái với cơ sở dữ liệu, chẳng hạn như PostgreSQL, Cassandra, MongoDB... thường lưu phần lớn dữ liệu trên ổ đĩa hoặc ổ SSD. So với cơ sở dữ liệu trên ổ đĩa truyền thống trong đó phần lớn các tác vụ đều yêu cầu truy cập qua lại tới ổ đĩa, kho dữ liệu trong bộ nhớ chẳng hạn như Redis không phải chịu hình phạt này. Do đó kho dữ liệu kiểu này có thể hỗ trợ thêm được khá nhiều tác vụ và có thời gian phản hồi nhanh hơn. Kết quả là – hiệu suất nhanh thấy rõ với các tác vụ đọc hoặc ghi thông thường mất chưa đầy một mili giây và hỗ trợ hàng triệu tác vụ mỗi giây.

2. Cấu trúc dữ liệu linh hoạt

Khác với những kho dữ liệu khóa-giá trị đơn giản có cấu trúc dữ liệu giới hạn, Redis có nhiều cấu trúc dữ liệu khác nhau nên đáp ứng được nhu cầu ứng dụng của bạn. Kiểu dữ liệu Redis gồm có:

3. Đơn giản và dễ sử dụng

Redis đơn giản hóa mã bằng cách cho phép bạn viết ít dòng lệnh hơn để lưu trữ, truy cập và sử dụng dữ liệu trên ứng dụng của bạn. Ví dụ: nếu ứng dụng của bạn có dữ liệu được lưu trên một bảng băm và bạn muốn lưu dữ liệu đó trên kho dữ liệu – bạn chỉ cần sử dụng cấu trúc dữ liệu mã hash của Redis để lưu dữ liệu đó. Tác vụ tương tự trên kho dữ liệu không có cấu trúc dữ liệu mã hash sẽ cần nhiều dòng mã để chuyển đổi từ định dạng này sang định dạng khác. Redis được trang bị cấu trúc dữ liệu riêng và nhiều tùy chọn để điều khiển và tương tác với dữ liệu của bạn. Trên một trăm máy khách mã nguồn mở được cung cấp cho nhà phát triển Redis. Các ngôn ngữ được hỗ trợ gồm có Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go và nhiều ngôn ngữ khác.

4. Sao chép và độ bền

Redis sử dụng kiến trúc bản sao-chính và hỗ trợ sao chép không đồng bộ trong đó có thể sao chép dữ liệu sang nhiều máy chủ bản sao. Việc này mang lại hiệu suất đọc cao hơn (vì có thể chia tách các yêu cầu giữa các máy chủ) và tốc độ khôi phục nhanh hơn khi máy chủ chính gặp sự cố. Về độ bền, Redis hỗ trợ sao lưu tại một thời điểm nào đó (chép tập dữ liệu Redis sang ổ đĩa).

5. Độ khả dụng cao và quy mô linh hoạt

Redis có kiến trúc bản sao-chính theo cấu trúc liên kết dạng một nút chính hoặc cụm. Kiến trúc này cho phép bạn xây dựng những giải pháp có độ khả dụng cao, đảm bảo hiệu suất ổn định và tin cậy. Khi cần điều chỉnh kích thước cụm, bạn có nhiều tùy chọn khác nhau để thay đổi quy mô theo chiều dọc và thay đổi quy mô theo chiều ngang. Việc này cho phép tăng cụm theo nhu cầu của bạn.

6. Khả năng mở rộng

Redis là dự án mã nguồn mở được một cộng đồng đông đảo ủng hộ. Không có giới hạn về nhà cung cấp hoặc công nghệ vì Redis được có tính tiêu chuẩn mở, hỗ trợ các định dạng dữ liệu mở và có tập hợp máy khách phong phú.

Trường hợp sử dụng phổ biến của Redis

1. Lưu trữ bộ nhớ đệm

Redis là lựa chọn tuyệt vời để triển khai một bộ nhớ đệm trong bộ nhớ có độ khả dụng cao để giảm độ trễ truy cập dữ liệu, tăng năng suất và giảm tải cho cơ sở dữ liệu quan hệ hoặc NoSQL và ứng dụng của bạn. Redis có thể phục vụ những mục dữ liệu thường xuyên được yêu cầu với thời gian phản hồi chưa đến một mili giây và cho phép bạn dễ dàng thay đổi quy mô nhằm đáp ứng mức tải cao hơn mà không cần gia tăng phần backend có chi phí tốn kém hơn. Một số ví dụ phổ biến về nhớ đệm khi sử dụng Redis bao gồm nhớ đệm kết quả truy vấn cơ sở dữ liệu, nhớ đệm phiên lâu bền, nhớ đệm trang web và nhớ đệm các đối tượng thường xuyên được sử dụng như ảnh, tập tin và siêu dữ liệu.

2. Trò chuyện, nhắn tin và danh sách tác vụ chờ xử lý

Redis hỗ trợ Pub/Sub (cấu trúc gửi nhận tin nhắn trong đó người gửi và người nhận không biết nhau) với tính năng khớp cấu trúc và nhiều cấu trúc dữ liệu như danh sách, tập được sắp xếp và mã hash. Việc này cho phép Redis hỗ trợ các phòng trò chuyện hiệu suất cao, luồng bình luận theo thời gian thực, nguồn cấp mạng xã hội và giao tiếp giữa các máy chủ. Cấu trúc dữ liệu Danh sách của Redis giúp dễ dàng triển khai một danh sách tác vụ chờ xử lý có tải trọng nhẹ. Danh sách cung cấp các hoạt động nguyên tử cũng như tính năng chặn, giúp cho chúng phù hợp với nhiều ứng dụng yêu cầu phải có trình chuyển tiếp tin nhắn tin cậy hoặc danh sách liên kết vòng.

3. Bảng xếp hạng game

Redis là giải pháp hay được các nhà phát triển game dùng để xây dựng bảng xếp hạng theo thời gian thực. Chỉ cần sử dụng cấu trúc dữ liệu Tập được sắp xếp của Redis, cấu trúc dữ liệu này đảm bảo tính duy nhất của các thành phần trong khi vẫn duy trì danh sách được sắp xếp theo điểm số của người dùng. Tạo danh sách xếp hạng theo thời gian thực dễ thực hiện như khi cập nhật điểm số của người dùng mỗi khi có thay đổi. Bạn cũng có thể sử dụng Tập được sắp xếp để xử lý dữ liệu chuỗi thời gian bằng cách dùng dấu thời gian làm điểm số.

4. Kho lưu trữ phiên

Redis là kho dữ liệu trong bộ nhớ có độ khả dụng và độ bền cao, thường được các nhà phát triển ứng dụng sử dụng để lưu trữ và quản lý dữ liệu phiên cho các ứng dụng quy mô internet. Redis có độ trễ chưa đến một mili giây, có quy mô và độ đàn hồi cần thiết để quản lý dữ liệu phiên chẳng hạn như hồ sơ người dùng, thông tin xác thực đăng nhập, trạng thái phiên và tùy chỉnh theo ý muốn người dùng.

5. Phát nội dung giàu dữ liệu

Redis cung cấp kho dữ liệu trong bộ nhớ, có tốc độ truy cập nhanh để đáp ứng các trường hợp sử dụng phát trực tiếp. Có thể sử dụng Redis để lưu trữ siêu dữ liệu về hồ sơ người dùng và xem lịch sử, thông tin/mã thông báo xác thực cho hàng triệu người dùng và hiển thị tập tin để cho phép các Mạng truyền tải nội dung (CDN) phát video cho hàng triệu người dùng di động và máy tính để bàn cùng một lúc.

6. Dữ liệu không gian địa lý

Redis cung cấp cấu trúc dữ liệu trong bộ nhớ, được tích hợp sẵn cho mục đích cụ thể và các toán tử để quản lý dữ liệu không gian địa lý theo thời gian thực ở quy mô và tốc độ mong muốn. Các lệnh như GEOADD, GEODIST, GEORADIUS và GEORADIUSBYMEMBER để lưu trữ, xử lý và phân tích dữ liệu không gian địa lý theo thời gian thực giúp cho dữ liệu không gian địa lý trở nên dễ dàng và nhanh chóng khi sử dụng Redis. Bạn có thể sử dụng Redis để thêm các tính năng dựa trên địa điểm như thời gian lái xe, quãng đường lái xe và các điểm quan tâm cho ứng dụng của bạn.

7. Machine Learning

Các ứng dụng kiểu mới, chịu sự chi phối của dữ liệu yêu cầu machine learning phải có khả năng nhanh chóng xử lý được dữ liệu theo khối lượng lớn, đa dạng, tốc độ cao và tự động hóa quá trình ra quyết định. Đối với các trường hợp sử dụng như phát hiện lỗi trong các dịch vụ game và tài chính, đấu thầu theo thời gian thực trong công nghệ quảng cáo và mai mối trong hẹn hò và đi chung xe, khả năng xử lý dữ liệu trực tiếp và ra quyết định trong vòng vài chục mili giây có ý nghĩa hết sức quan trọng. Redis cung cấp cho bạn kho dữ liệu trong bộ nhớ, có tốc độ truy cập nhanh để xây dựng, đào tạo và triển khai mô hình machine learning một cách nhanh chóng.

8. Phân tích theo thời gian thực

Có thể dùng Redis kết hợp với các giải pháp phát trực tuyến như Apache Kafka và Amazon Kinesis làm kho dữ liệu trong bộ nhớ để tiêu thụ, xử lý và phân tích dữ liệu thời gian thực với độ trễ chưa đến một mili giây. Redis là lựa chọn lý tưởng cho các trường hợp sử dụng phân tích theo thời gian thực chẳng hạn như phân tích mạng xã hội, nhắm mục tiêu quảng cáo, cá nhân hóa và IoT.

Redis Installation

Cài đặt Redis

Phần này sẽ hướng dẫn bạn cách redis sử dụng bộ cài đặt dành cho hệ điều hành Linux. Mở chương trình dòng lệnh (hay terminal) lên và chạy các câu lệnh sau (bạn cũng có thể chuyển vào thư mục Downloads trước khi chạy các câu lệnh này):

$ wget http://download.redis.io/redis-stable.tar.gz

Câu lệnh trên sẽ tải tập tin redis-stable.tar.gz về máy tính bạn. Bạn cần phải giải nén tập tin này:

$ tar xvzf redis-stable.tar.gz

Sau câu lệnh trên bạn sẽ thấy một thư mục có tên redis-stable được tạo ra trên thư mục bạn đang đứng để thực thi câu lệnh. Bạn có thể kiểm tra bằng cách chạy lệnh ls:

$ ls .

Tiếp theo chúng ta sẽ di chuyển vào bên trong thư mục redis-stable này và thực hiện công việc biên soạn ứng dụng để có thể thực thi trực tiếp.

$ cd redis-stable && make

Bạn sẽ cần cần một khoảng thời gian vài phút để kết thúc quá trình biên soạn ra ứng dụng. Sau khi kết thúc bạn có thể kiếm tra quá trình biên soạn bằng câu lệnh:

$ make test

Kết quả của quá trình biên soan ở trên bạn sẽ thấy trong thư mục src được thêm vào 6 tập tin khác nhau là: redis-server, redis-sentinel, redis-cli, redis-benchmark, redis-check-aof và redis-check-dump. Ở đây chúng ta chỉ quan tâm 2 tập tin chính là redis-server và redis-cli. Hai tập tin này lần lượng dùng để chạy Redis server và Redis client.

Vì đây là 2 tập tin thực thi lên để tránh việc phải gõ toàn bộ đường dẫn tham chiếu tới chúng khi chạy câu lệnh sử dụng 2 chương trình này thì chúng ta lên chép chúng vào một trong các thư mục của biến $PATH. Thông thường, trên hầu hết các phiên bản của Linux thì biến $PATH sẽ bao gồm thư mục /usr/local/bin. Chúng ta sử dụng 2 câu lệnh sau để chép 2 tập tin trên vào thư mục này:

$ sudo cp src/redis-server /usr/local/bin/
$ sudo cp src/redis-cli /usr/local/bin/
Khởi động Redis

Cách đơn giản nhất để khởi động Redis là chạy tập tin thực thi redis-server trên cửa sổ dòng lệnh mà không đưa vào đối số nào trong câu lệnh này:

$ redis-server

Bạn sẽ thấy trên cửa sổ terminal có hiện thông báo như sau:

[id_redis_server] date_time # Warning: no config file specified, using the default config. In order to specify a config file use 'redis-server /path/to/redis.conf'
[id_redis_server] date_time * Server started, Redis version 2.2.11
[id_redis_server] date_time * The server is now ready to accept connections on port 6379

Thông báo đầu tiên nói rằng bạn không đặt giá trị cho tập tin dùng để xác định các giá trị cài đặt cho Redis server, tuy nhiên điều này không quá quan trọng vào lúc này. Các thông báo tiếp theo hiển thị thông tin về phiên bản Redis server mà bạn đang sử dụng và port mà server này đang dùng.

Nếu bạn muốn đưa 1 tập tin chứa giá trị dùng để cài đặt Redis server bạn chỉ việc thêm đường dẫn của tập tin này khi chạy redis-server. Ví dụ như sau:

$ redis-server /etc/redis.conf
Kiểm tra hoạt động của Redis Server

Bây giờ để xem Redis server hoạt động như thế nào bạn có thể sử dụng phần mềm redis-cli. Trên cửa sổ dòng lệnh bạn chạy câu lệnh sau:

$ redis-cli ping

Nếu Redis server hoạt động bình thường bạn sẽ có Kết quả trả về như sau:

PONG

Khi thực thi câu lệnh bash trên, chương trình redis-cli sẽ thực hiện công việc gửi 1 câu lệnh ping tới Redis server. Khi nhận được câu lệnh này Redis server, nếu như đang hoạt động bình thường, sẽ trả về kết quả PONG như bạn đã thấy ở trên.

Ngoài ra trường hợp bạn cũng có thể sử dụng redis-cli ở chế độ interactive mode để có thể dễ dàng tương tác với Redis server hơn. Để vào chế độ này bạn chạy câu lệnh sau trên shell:

``bash
$ redis-cli
redis 127.0.0.1:6379> ping

Kết quả:

PONG

Redis Configuration - Thực hiện cấu hình bằng lệnh trong Python

Redis có một file để thực hiện cấu hình các tham số (redis.conf) tại thư mục root của Redis, tuy nhiên, bạn có thể get và set các tham số bằng cách sử dụng CONFIG command.

Cú pháp

Cú pháp cơ bản của Redis CONFIG command:

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

Ví dụ:

redis 127.0.0.1:6379> CONFIG GET loglevel  
1) "loglevel" 
2) "notice"

Để get tất cả cấu hình, sử dụng * thay cho CONFIG_SETTING_NAME

Ví dụ:

redis 127.0.0.1:6379> CONFIG GET *  
  1) "dbfilename" 
  2) "dump.rdb" 
  3) "requirepass" 
  4) "" 
  5) "masterauth" 
  6) "" 
  7) "unixsocket" 
  8) "" 
  9) "logfile" 
 10) "" 
 11) "pidfile" 
 12) "/var/run/redis.pid" 
 13) "maxmemory" 
 14) "0"
 15) "maxmemory-samples" 
 16) "3" 
 17) "timeout" 
 18) "0" 
 19) "tcp-keepalive" 
 20) "0" 
 21) "auto-aof-rewrite-percentage" 
 22) "100" 
 23) "auto-aof-rewrite-min-size" 
 24) "67108864" 
 25) "hash-max-ziplist-entries" 
 26) "512" 
 27) "hash-max-ziplist-value" 
 28) "64" 
 29) "list-max-ziplist-entries" 
 30) "512" 
 31) "list-max-ziplist-value" 
 32) "64" 
 33) "set-max-intset-entries" 
 34) "512" 
 35) "zset-max-ziplist-entries" 
 36) "128" 
 37) "zset-max-ziplist-value" 
 38) "64" 
 39) "hll-sparse-max-bytes" 
 40) "3000" 
 41) "lua-time-limit" 
 42) "5000" 
 43) "slowlog-log-slower-than" 
 44) "10000" 
 45) "latency-monitor-threshold" 
 46) "0" 
 47) "slowlog-max-len" 
 48) "128" 
 49) "port" 
 50) "6379" 
 51) "tcp-backlog" 
 52) "511" 
 53) "databases" 
 54) "16" 
 55) "repl-ping-slave-period" 
 56) "10" 
 57) "repl-timeout" 
 58) "60" 
 59) "repl-backlog-size" 
 60) "1048576" 
 61) "repl-backlog-ttl" 
 62) "3600" 
 63) "maxclients" 
 64) "4064" 
 65) "watchdog-period" 
 66) "0" 
 67) "slave-priority" 
 68) "100" 
 69) "min-slaves-to-write" 
 70) "0" 
 71) "min-slaves-max-lag" 
 72) "10" 
 73) "hz" 
 74) "10" 
 75) "no-appendfsync-on-rewrite" 
 76) "no" 
 77) "slave-serve-stale-data" 
 78) "yes" 
 79) "slave-read-only" 
 80) "yes" 
 81) "stop-writes-on-bgsave-error" 
 82) "yes" 
 83) "daemonize" 
 84) "no" 
 85) "rdbcompression" 
 86) "yes"
 87) "rdbchecksum" 
 88) "yes" 
 89) "activerehashing" 
 90) "yes" 
 91) "repl-disable-tcp-nodelay" 
 92) "no" 
 93) "aof-rewrite-incremental-fsync" 
 94) "yes" 
 95) "appendonly" 
 96) "no" 
 97) "dir" 
 98) "/home/deepak/Downloads/redis-2.8.13/src" 
 99) "maxmemory-policy" 
100) "volatile-lru" 
101) "appendfsync" 
102) "everysec" 
103) "save" 
104) "3600 1 300 100 60 10000" 
105) "loglevel" 
106) "notice" 
107) "client-output-buffer-limit" 
108) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60" 
109) "unixsocketperm" 
110) "0" 
111) "slaveof" 
112) "" 
113) "notify-keyspace-events" 
114) "" 
115) "bind" 
116) "" 
Sửa cấu hình

Để sửa cấu hình, bạn có thể sửa tại file redis.conf hoặc cập nhật cấu hình bằng cách sửa dụng lệnh CONFIG set.

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

Ví dụ:

redis 127.0.0.1:6379> CONFIG SET loglevel "notice" 
OK 
redis 127.0.0.1:6379> CONFIG GET loglevel  
1) "loglevel" 
2) "notice" 

Redis Data types - Kiểu dữ liệu trong Redis

Redis hỗ trợ 5 kiểu dữ liệu, bao gồm:

1. Strings

Redis string là lệnh sử dụng để quản lý các key/value trong đó value có giá trị string trong redis.

Ví dụ:

redis 127.0.0.1:6379> SET name "laptrinh.vn"
OK
redis 127.0.0.1:6379> GET name
"laptrinh.vn"

Trong ví dụ trên, sử dụng SET và SET command, name là key được sử dụng trong Redis và laptrinh.vn là giá trị được lưu trữ

Chú ý: Một string value có thể được lưu trữ đến 512 megabytes.

Các lệnh thường dùng:

STT Command Ý nghĩa
1 SET key value Đặt giá trị value cho key
2 GET key Lấy giá trị lưu trữ bởi key
3 GETRANGE key start end Lấy giá trị lưu trữ bởi key từ (start) đến (end)
4 GETSET key value Lấy ra giá trị cũ và đặt giá trị mới cho key
5 MGET key1 key2 .. Lấy giá trị của nhiều key theo thứ tự
6 SETEX key seconds value Đặt giá trị và thời gian expire cho key
7 SETNX key value Đặt giá trị cho key nếu key chưa tồn tại
8 RENAMENX key newkey Đổi tên key sang newkey nếu newkey chưa tồn tại
9 STRLEN key Lấy độ dài giá trị lưu trữ bởi key
9 APPEND key value Thêm vào sau giá trị lưu trữ bởi key là value
10 INCR key Tăng giá trị lưu trữ của key (số nguyên) 1 đơn vị
11 INCRBY key n Tăng giá trị lưu trữ của key (số nguyên) n đơn vị
12 DECR key Giảm giá trị lưu trữ của key (số nguyên) 1 đơn vị
11 DECRBY key n Giảm giá trị lưu trữ của key (số nguyên) n đơn vị
2. Hashes

Redis hash lưu trữ hash table của các cặp key-value, trong đó key được sắp xếp ngẫu nhiên, không theo thứ tự nào cả. Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, cũng như đọc tất cả giá trị.

Ví dụ:

redis 127.0.0.1:6379> HMSET user:1 username laptrinh.vn password
laptrinh.vn points 200
OK
redis 127.0.0.1:6379> HGETALL user:1
1) "username"
2) "laptrinh.vn"
3) "password"
4) "laptrinh.vn"
5) "points"
6) "200"

Chú ý: Mỗi Redis hash có thể lưu trữ đến 232-1 cặp field-value (> 4 tỷ).

Các lệnh thường dùng:

STT Command Ý nghĩa
1 HSET key field value Đặt giá trị cho field là value trong hash
2 HGET key field Lấy giá trị của field trong hash
3 HDEL key field1 field2 ... xóa field1, field2 ... trong hash
4 HEXISTS key field Kiểm tra file có tồn tại trong hash không
5 HGETALL key Lấy tất cả các field và value của nó trong hash
6 HINCRBY key field n Tăng giá trị của field (số nguyên) lên n đơn vị
7 HDECRBY key field n Giảm giá trị của field (số nguyên) lên n đơn vị
8 HINCRBYFLOAT key field f Tăng giá trị của field (số thực) lên f
9 HDECRBYFLOAT key field n Giảm giá trị của field (số thực) f
10 HKEYS key Lấy tất cả các field của hash
11 HVALS key Lấy tất cả các value của hash
12 HLEN key Lấy số lượng field của hash
13 HMSET key field1 value1 field2 value2 ... Đặt giá trị cho các field1 giá trị value1 field2 giá trị value2 ...
14 HMGET key field1 field2 ... Lấy giá trị của các field1 field2 ...
3. Lists

Redis Lists là danh sách liên kết của các strings. Redis hỗ trợ các thao tác push, pop từ cả 2 phía của list, trim dựa theo offset, đọc 1 hoặc nhiều items của list, tìm kiếm và xóa giá trị.

Ví dụ:

redis 127.0.0.1:6379> lpush tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> lpush tutoriallist mongodb
(integer) 2
redis 127.0.0.1:6379> lpush tutoriallist rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange tutoriallist 0 10

1) "rabitmq"
2) "mongodb"
3) "redis"

Chú ý: Độ dài lớn nhất của Redis List là 232-1 phần tử (> 4 tỷ).

Các lệnh thường dùng:

STT Command Ý nghĩa
1 LINDEX key index Lấy giá trị từ danh sách (list) ở vị trí index (index bắt đầu từ 0)
2 LLEN key Lấy số lượng phần tử trong danh sách
3 LPOP key Lấy phần tử ở đầu danh sách
4 LPUSH key value1 value2 ... Thêm value1 value2... vào đầu danh sách
5 LRANGE key start stop Lấy các phần tử trong list từ vị trí start đến vị trí stop
6 LSET key index value Đặt lại giá trị tại index bằng value
7 RPOP key Lấy giá trị ở cuối danh sách
8 RPUSH key value1 value2 ... Thêm phần tử value1 value2 ... vào cuối danh sách
9 LINSERT key BEFORE value1 value2 Thêm phần tử value2 vào trước phần tử value1 trong danh sách
10 LINSERT key AFTER value1 value2 Thêm phần tử value2 vào sau phần tử value1 trong danh sách
4. Sets

Redis Sets là tập hợp các string (không được sắp xếp). Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, kiểm tra sự xuất hiện của phần tử trong tập hợp. Ngoài ra Redis còn hỗ trợ các phép toán tập hợp, gồm intersect/union/difference.

Ví dụ:

redis 127.0.0.1:6379> sadd tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist mongodb
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers tutoriallist

1) "rabitmq"
2) "mongodb"
3) "redis"

Chú ý: Số phần tử lớn nhất trong Redis Set được lưu trữ là 232-1 phần tử (> 4 tỷ).

Các lệnh thường dùng:

STT Command Ý nghĩa
1 SADD key value1 value2 .. Thêm các giá trị value1 value2 ... vào tập hợp
2 SCARD key Lấy số lượng phần tử trong tập hợp
3 SMEMBERS key Lấy các phần tử trong tập hợp
4 SPOP key Xóa bỏ ngẫu nhiên một phần tử trong tập hợp và trả về giá trị phần tử đó
5. Sorted Sets (ZSets)

Redis Sorted Sets là 1 danh sách, trong đó mỗi phần tử là map của 1 string (member) và 1 floating-point number (score), danh sách được sắp xếp theo score này. Redis hỗ trợ thao tác thêm, đọc, xóa từng phần tử, lấy ra các phần tử dựa theo range của score hoặc của string.

Ví dụ:

redis 127.0.0.1:6379> zadd tutoriallist 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000

1) "redis"
2) "mongodb"
3) "rabitmq"

Các lệnh thường dùng:

STT Command Ý nghĩa
1 ZADD key score1 value1 score2 value2 .. Thêm các phần tử value1 value2 vào sorted set với độ ưu tiên tương ứng là score1 và score2
2 SCARD key Lấy số lượng phần tử trong sorted set
3 ZRANGE key start stop Lấy các phần tử trong tập hợp từ start đến stop
4 ZRANGE key start stop WITHSCORES Lấy các phần tử trong tập hợp từ start đến stop kèm theo giá trị score của chúng
5 ZSCORE key member Lấy giá trị score của member
6 ZRANK key member Lấy vị trí của member trong sorted set
7 ZCOUNT key score1 score2 Đếm số member có score tương ứng trong đoạn score1 đến score2

Redis Commands - Redis-cli trong Redis

Redis command được sử dụng để thực hiện các lệnh thực thi trên Redis server.

Để run command trên Redis server, bạn cần một Redis client. Redis client có sẵn trong Redis package khi chúng ta cài đặt.

Cú pháp

Cú pháp cơ bản của Redis client:

$redis-cli

Ví dụ:

Để start Redis client, mở terminal và nhập command redis-cli. Nó sẽ kết nối tới Local server và bạn có thể run bất kỳ command nào.

$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG

Trong ví dụ trên, chúng ta đã kết nối đến Redis server được chạy trên máy local và thực thi lệnh PING, để kiểm tra xem server có đang chạy hay không.

Run Commands trên Remote Server

Để run command trên Redis remote server, bạn cần kết nối đến server sử dụng redis-cli kèm theo tham số host

Cú pháp:

$ redis-cli -h host -p port -a password

Ví dụ: Kết nối đến Redis remote server, với host 127.0.0.1, port 6379 và password là mypass.

$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG

Redis Key command - Quản lý Key trong Redis

Redis key command được sử dụng để quản lý key trong Redis.

Cú pháp
redis 127.0.0.1:6379> COMMAND KEY_NAME

Ví dụ:

redis 127.0.0.1:6379> SET laptrinhvn redis
OK
redis 127.0.0.1:6379> DEL laptrinhvn
(integer) 1

Trong ví dụ trên, DEL là command, laptrinhvn là key. Nếu key laptrinhvn được xóa thành công, output của command là (integer) 1, ngược lại là (integer) 0.

Redis Key Command

Bảng sau đây là danh sách các command cơ bản của key:

STT Command Mô tả
1 DEL key Xóa key nếu nó tồn tại
2 DUMP key Trả về serialized version của giá trị được lưu trữ bởi key
3 EXISTS key Kiểm tra key có tồn tại không
4 EXPIRE key seconds Đặt expire time cho key sau n giây
5 EXPIREAT key timestamp Đặt expire time cho key tại thời điểm xác định. Time có kiểu Unix timestamp
6 PEXPIRE key milliseconds Đặt expire time cho key sau n milliseconds
7 PEXPIREAT key milliseconds-timestamp Đặt expire time cho key tại thời điểm xác định. Time có kiểu Unix timestamp (milliseconds)
8 KEYS pattern Tìm các key theo pattern
9 MOVE key db Move một key sang một database Redis khác
10 PERSIST key Xóa expire time của key
11 PTTL key Lấy thời gian sống (còn lại) của key (milliseconds)
12 TTL key Lấy thời gian sống (còn lại) của key (giây)
13 RANDOMKEY Trả về một random key từ Redis
14 RENAME key newkey Đổi tên key sang newkey, nếu newkey đã tồn tại giá trị của nó sẽ bị ghi đè bởi giá trị của key
15 RENAMENX key newkey Đổi tên key sang newkey nếu newkey chưa tồn tại
16 TYPE key Lấy loại dữ liệu được lưu trữ bởi key

Redis Transaction - Thực hiện nhóm lệnh trong Redis

Redis transaction cho phép một nhóm các lệnh thực hiện theo thứ tự cho đến khi lệnh cuối cùng được thực hiện xong. Khi này Redis mới cập nhật đồng thời dữ liệu thay đổi bởi nhóm lệnh này. Redis transaction bắt đầu bằng lệnh MULTI và kết thúc bằng lệnh EXEC

Ví dụ:

redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET test redis
QUEUED
redis 127.0.0.1:6379> GET test
QUEUED
redis 127.0.0.1:6379> INCR visitors
QUEUED
redis 127.0.0.1:6379> EXEC

1) OK
2) "redis"
3) (integer) 1

Các lệnh thường dùng:

STT Command Ý nghĩa
1 MULTI Đánh dấu bắt đầu khối lệnh transaction
2 EXEC Thực hiện khối lệnh
3 DISCARD Hủy tất cả các lệnh được ban hành sau MULTI
4 UNWATCH Quên về tất cả các key đã xem
5 WATCH key [key ...] Theo dõi các key đã cho để xác định việc thực hiện khối MULTI / EXEC

Redis HyperLogLog

Redis HyperLogLog là một thuật toán sử dụng phương pháp ngẫu nhiên để tạo ra một số lượng phần tử là duy nhất trong một tập hợp chỉ sử dụng một lượng bộ nhớ nhỏ và không đổi.

HyperLogLog cung cấp một xấp xỉ rất tốt về tính chính xác của một tập hợp ngay cả khi sử dụng một lượng bộ nhớ rất nhỏ khoảng 12 kbyte mỗi khóa với sai số chuẩn là 0,81%. Không có giới hạn về số lượng phần tử, trừ khi bạn cần một số lượng lớn hơn 264 phần tử.

Ví dụ:

redis 127.0.0.1:6379> PFADD items "redis"  
1) (integer) 1  
redis 127.0.0.1:6379> PFADD items "mongodb"  
1) (integer) 1  
redis 127.0.0.1:6379> PFADD items "mysql"  
1) (integer) 1  
redis 127.0.0.1:6379> PFCOUNT items  
(integer) 3 

Các cú pháp cơ bản:

STT Command Mô tả
1 PFADD key element [element ...] Thêm một phần tử vào HyperLogLog
2 PFCOUNT key [key ...]

 

Trả về giá trị xấp xỉ của tập hợp được quan sát bởi HyperLogLog theo key.
3 PFMERGE destkey sourcekey [sourcekey ...] Nhập N HyperLogLog thành một

Redis Publish - Subscribe

Redis Pub / Sub được áp dụng trong các hệ thống cần gửi/nhận bản tin message nơi sender (publisher) gửi message trong khi receiver (subscriber) nhận được chúng. Liên kết mà các message được chuyển được gọi là kênh.

Trong Redis, khách hàng có thể subscribe bất kỳ số lượng kênh.

Redis-Pub-Sub-2-768x253.jpeg

Ví dụ:

- subscriber: 1 Client đăng ký nhận message từ redisChat:

redis 127.0.0.1:6379> SUBSCRIBE redisChat  
Reading messages... (press Ctrl-C to quit) 
1) "subscribe" 
2) "redisChat" 
3) (integer) 1 

- publisher: 2 Client gửi message vào channel redisChat:

redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"  
(integer) 1  
redis 127.0.0.1:6379> PUBLISH redisChat "Learn redis by Laptrinh.vn"  
(integer) 1   
1) "message" 
2) "redisChat" 
3) "Redis is a great caching technique" 
1) "message" 
2) "redisChat" 
3) "Learn redis by Laptrinh.vn" 

Các command cơ bản:

STT Command Mô tả
1 PSUBSCRIBE pattern [pattern ...] Đăng ký (subscibe) channel theo pattern
2 PUBSUB subcommand [argument [argument ...]] Cho biết trạng thái của hệ thống Pub / Sub. Ví dụ, client nào đang hoạt động trên máy chủ.
3 PUBLISH channel message Gửi message tới channel
4 PUNSUBSCRIBE [pattern [pattern ...]] Dừng nhận message của channel theo pattern
5 SUBSCRIBE channel [channel ...] Lắng nghe message của channel
6 UNSUBSCRIBE [channel [channel ...]] Dừng lắng nghe message của channel

Redis Scripting

Redis scripting được sử dụng để thực thi các script bằng thông dịch Lua (Lua interpreter). Nó được tích hợp vào Redis bắt đầu từ phiên bản 2.6.0. Lệnh được sử dụng cho scripting là lệnh EVAL.

Cú pháp:

redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

Ví dụ:

redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 
key2 first second  
1) "key1" 
2) "key2" 
3) "first" 
4) "second"

Giải thích:

Các command cơ bản của Redis Scripting:

STT Command Mô tả
1 EVAL script numkeys key [key ...] arg [arg ...] Thực thi Lua script
2 EVALSHA sha1 numkeys key [key ...] arg [arg ...] Thực thi Lua script
3 SCRIPT EXISTS script [script ...] Kiểm tra tồn tại của một script trong cache
4 SCRIPT FLUSH Xóa toàn bộ script trong cache
5 SCRIPT KILL Kill việc thực thi một script
6 SCRIPT LOAD script Load một Lua script từ cache

Redis Connection command

Redis connection là command cơ bản được sử dụng để quản lý các kết nối của client tới Redis server.

Ví dụ:

redis 127.0.0.1:6379> AUTH "password" 
OK 
redis 127.0.0.1:6379> PING 
PONG 

Các command cơ bản của Redis connection:

STT Command Mô tả
1 AUTH password Thiết lập xác thực tới server sử dụng password
2 ECHO message Print một message string
3 PING Kiểm tra server có đang hoạt động hay không
4 QUIT Đóng một kết nối hiện tại
5 SELECT index Thay đổi một database cho kết nối hiện tại

Redis Server command - Lệnh quản lý Redis

Redis server command được sử dụng để quản lý Redis server.

Ví dụ;

redis 127.0.0.1:6379> INFO  

# Server 
redis_version:2.8.13 
redis_git_sha1:00000000 
redis_git_dirty:0 
redis_build_id:c2238b38b1edb0e2 
redis_mode:standalone 
os:Linux 3.5.0-48-generic x86_64 
arch_bits:64 
multiplexing_api:epoll 
gcc_version:4.7.2 
process_id:3856 
run_id:0e61abd297771de3fe812a3c21027732ac9f41fe 
tcp_port:6379 
uptime_in_seconds:11554 
uptime_in_days:0 hz:10 
lru_clock:16651447 
config_file:  

# Clients 
connected_clients:1
client_longest_output_list:0 
client_biggest_input_buf:0 
blocked_clients:0  

# Memory 
used_memory:589016 
used_memory_human:575.21K 
used_memory_rss:2461696 
used_memory_peak:667312 
used_memory_peak_human:651.67K 
used_memory_lua:33792 
mem_fragmentation_ratio:4.18 
mem_allocator:jemalloc-3.6.0  

# Persistence 
loading:0 
rdb_changes_since_last_save:3 
rdb_bgsave_in_progress:0 
rdb_last_save_time:1409158561 
rdb_last_bgsave_status:ok 
rdb_last_bgsave_time_sec:0 
rdb_current_bgsave_time_sec:-1 
aof_enabled:0 
aof_rewrite_in_progress:0 
aof_rewrite_scheduled:0 
aof_last_rewrite_time_sec:-1 
aof_current_rewrite_time_sec:-1 
aof_last_bgrewrite_status:ok 
aof_last_write_status:ok  

# Stats 
total_connections_received:24 
total_commands_processed:294 
instantaneous_ops_per_sec:0 
rejected_connections:0 
sync_full:0 
sync_partial_ok:0 
sync_partial_err:0 
expired_keys:0 
evicted_keys:0 
keyspace_hits:41
keyspace_misses:82 
pubsub_channels:0 
pubsub_patterns:0 
latest_fork_usec:264  

# Replication 
role:master 
connected_slaves:0 
master_repl_offset:0 
repl_backlog_active:0 
repl_backlog_size:1048576 
repl_backlog_first_byte_offset:0 
repl_backlog_histlen:0  

# CPU 
used_cpu_sys:10.49 
used_cpu_user:4.96 
used_cpu_sys_children:0.00 
used_cpu_user_children:0.01  

# Keyspace 
db0:keys = 94,expires = 1,avg_ttl = 41638810 
db1:keys = 1,expires = 0,avg_ttl = 0 
db3:keys = 1,expires = 0,avg_ttl = 0 

Các command cơ bản:

STT Command Mô tả
1 BGREWRITEAOF Asynchronously rewrites the append-only file
2 BGSAVE Asynchronously saves the dataset to the disk
3 CLIENT KILL [ip:port] [ID client-id] Kills the connection of a client
4 CLIENT LIST Gets the list of client connections to the server
5 CLIENT GETNAME Gets the name of the current connection
6 CLIENT PAUSE timeout Stops processing commands from the clients for a specified time
7 CLIENT SETNAME connection-name Sets the current connection name
8 CLUSTER SLOTS Gets an array of Cluster slot to node mappings
9 COMMAND Gets an array of Redis command details
10 COMMAND COUNT Gets total number of Redis commands
11 COMMAND GETKEYS Extracts the keys given a full Redis command
12 BGSAVE Asynchronously saves the dataset to the disk
13 COMMAND INFO command-name [command-name ...] Gets an array of specific Redis command details
14 CONFIG GET parameter Gets the value of a configuration parameter
15 CONFIG REWRITE Rewrites the configuration file with the in-memory configuration
16 CONFIG SET parameter value Sets a configuration parameter to the given value
17 CONFIG RESETSTAT Resets the stats returned by INFO
18 DBSIZE Returns the number of keys in the selected database
19 DEBUG OBJECT key Gets debugging information about a key
20 DEBUG SEGFAULT Makes the server crash
21 FLUSHALL Removes all the keys from all databases
22 FLUSHDB Removes all the keys from the current database
23 INFO [section] Gets information and statistics about the server
24 LASTSAVE Gets the UNIX time stamp of the last successful save to the disk
25 MONITOR Listens for all the requests received by the server in real time
26 ROLE Returns the role of the instance in the context of replication
27 SAVE Synchronously saves the dataset to the disk
28 SHUTDOWN [NOSAVE] [SAVE] Synchronously saves the dataset to the disk and then shuts down the server
29 SLAVEOF host port Makes the server a slave of another instance, or promotes it as a master
30 SLOWLOG subcommand [argument] Manages the Redis slow queries log
31 SYNC Command used for replication
32 TIME Returns the current server time