- Tạo ứng dụng Spring Boot bằng Spring Launchizr
- Cấu hình Cassandra trong Spring Boot
- Định cấu hình nhóm kết nối Tomcat trên Spring Boot
- Định tuyến tin nhắn Camel đến Artemis được nhúng bằng WildFly
Redis là một cơ sở dữ liệu khóa-giá trị. Khóa thường thuộc loại Chuỗi, nhưng các loại giá trị rất đa dạng. Dưới đây là một vài ví dụ:
loại giá trị | Ví dụ |
---|---|
Sợi dây | xin chào thế giới |
Băm | {tên: “Jack”, tuổi: 13} |
Danh sách | [A -> B -> C -> C] |
Bộ | {A, B, C} |
Đã sắp xếp | {A: 1, B: 2, C: 3} |
ĐỊA LÝ | {Đ: (120.3, 30.5)} |
Bản đồ bit | 0110110101110101011 |
siêu nhật ký | 0110110101110101011 |
Năm loại đầu tiên là loại cơ bản và ba loại cuối cùng là loại đặc biệt, ngoài những loại này còn có các loại được sử dụng để xử lý hàng đợi tin nhắn, v.v.
Trên trang web chính thức của Redis (https://redis.io/commands/?group=string), bạn có thể dễ dàng truy vấn các lệnh để vận hành các cấu trúc dữ liệu khác nhau.
Các lệnh chung là các hướng dẫn có thể được sử dụng cho một số loại dữ liệu phổ biến bao gồm:
PHÍM
: Xem tất cả các khóa khớp với mẫu (không khuyến khích sử dụng trên thiết bị môi trường sản xuất, vì truy vấn mờ không hiệu quả và vì Redis là luồng đơn nên các lệnh khác không thể được thực thi trong thời gian truy vấn, gây ra tình trạng chặn.)# Truy vấn tất cả các phím khóa * # Truy vấn các phím khóa n* bắt đầu bằng n
DEL
: Xóa một khóa đã chỉ định và giá trị trả về là số lượng khóa đã xóa.# Xóa khóa có tên tên DEL name # Xóa nhiều khóa (nếu tồn tại cả 4 khóa thì sẽ trả về 4. Nếu chỉ tồn tại 3 khóa đầu tiên thì xóa thành công và trả về 3 khóa) DEL k1 k2 k3 k4
Tồn tại
: Xác định xem khóa có tồn tại hay không và trả về số lượng khóa hiện có.# Xác định xem khóa có phải là tên hay không và tên EXISTS có tồn tại không
HẾT HẠN
: Đặt thời hạn hiệu lực (tính bằng giây) cho một khóa. Khi hết thời hạn hiệu lực, khóa sẽ tự động bị xóa.# Đặt thời gian hiệu lực là 20s cho key có tên EXPIRE name 20
TTL
: Kiểm tra thời hạn hiệu lực còn lại của khóa (kết quả là -2 sau thời hạn hiệu lực và -1 nếu thời hạn hiệu lực không được đặt (vĩnh viễn))# Kiểm tra thời hạn hiệu lực của tên TTL
trợ giúp [lệnh]
: Xem cách sử dụng cụ thể của một lệnhGiá trị của kiểu String là một chuỗi nhưng nó được chia thành 3 loại theo các định dạng chuỗi khác nhau:
CHÌA KHÓA | GIÁ TRỊ |
---|---|
tên | giắc cắm |
tuổi | hai mươi mốt |
điểm | 95,5 |
Bất kể định dạng nào, lớp dưới cùng đều được lưu trữ dưới dạng mảng byte, nhưng phương pháp mã hóa thì khác nhau. Không gian tối đa của loại chuỗi không thể vượt quá 512m.
Các lệnh phổ biến:
BỘ
: Thêm hoặc sửa đổi cặp khóa-giá trị loại Chuỗi hiện cóSET tên jack
LẤY
: Lấy giá trị của kiểu Chuỗi dựa trên khóaNHẬN tên
MSET
: Thêm nhiều cặp khóa-giá trị loại Chuỗi theo đợtMSET k1 v1 k2 v2 k3 v3
MGET
: Nhận nhiều giá trị kiểu String dựa trên nhiều khóaMGET k1 k2 k3
INCR
: Để một khóa số nguyên tự động tăngSET tuổi 10 INCR tuổi
INCRBY
: Để khóa số nguyên tự động tăng và chỉ định kích thước bướcINCRBY 5 tuổi
INCRBYFLOAT
: Để số loại dấu phẩy động tự tăng và chỉ định kích thước bướcĐiểm SET 90,5 Điểm INCRBYFLOAT 5
SETNX
: Thêm một cặp khóa-giá trị kiểu Chuỗi, với điều kiện khóa đó không tồn tại, nếu không nó sẽ không được thực thi.# tên tồn tại, kết quả trả về là 0 SETNX tên tom # class không tồn tại, kết quả trả về là 1 SETNX class 2003
THIẾT LẬP
: Thêm một cặp khóa-giá trị loại Chuỗi và chỉ định khoảng thời gian hiệu lựcchiều cao SETEX 20 180
Redis không có khái niệm tương tự Table trong MySQL, vậy làm sao để phân biệt các loại key khác nhau?
Khóa Redis cho phép nhiều từ tạo thành cấu trúc phân cấp và nhiều từ được phân tách bằng :
Tách ra, định dạng như sau:
Tên dự án: Tên doanh nghiệp: Loại hình: id
Định dạng này không cố định và các mục có thể được xóa hoặc thêm theo nhu cầu của riêng bạn.
Ví dụ: tên dự án là mmr và có hai loại dữ liệu khác nhau: người dùng và blog. Chúng ta có thể xác định khóa như sau:
Nếu Giá trị là một đối tượng Java, chẳng hạn như đối tượng Người dùng, thì đối tượng đó có thể được tuần tự hóa thành chuỗi JSON và được lưu trữ:
CHÌA KHÓA | GIÁ TRỊ |
---|---|
mmr:người dùng:1 | {"id": 1, "tên": "jack", "tuổi": 21} |
mmr:người dùng:1 | {"id": 1, "title": "java", "star": 10} |
Kiểu Hash hay còn gọi là hash, giá trị của nó là một từ điển không có thứ tự, tương tự như cấu trúc HashMap trong Java.
Cấu trúc Chuỗi là một đối tượng được tuần tự hóa thành chuỗi JSON và sau đó được lưu trữ, điều này gây bất tiện khi một trường nhất định của đối tượng cần được sửa đổi.
Cấu trúc Hash có thể lưu trữ từng trường trong đối tượng một cách độc lập và CRUD có thể được thực hiện trên một trường duy nhất:
Các lệnh phổ biến:
Giá trị trường khóa HSET
: Thêm hoặc sửa đổi giá trị trường của khóa loại bămHSET mmr:user:3 tên lucy HSET mmr:user:3 tuổi 18
Trường khóa HGET
: Lấy giá trị trường của khóa loại bămHGET mmr:người dùng:3 tên
HMSET
: Thêm các giá trị trường của nhiều khóa loại băm theo đợtHMSET mmr:user:4 tên judy tuổi 11
HMGET
: Nhận các giá trị trường của nhiều khóa loại băm theo lôHMGET mmr:user:4 tên tuổi
HGETALL
: Lấy tất cả các trường và giá trị trong một khóa loại bămHKEY
: Lấy tất cả các trường trong một khóa loại bămHVALS
: Lấy tất cả các giá trị trong một khóa loại bămHINCRBY
: Tăng trường của khóa loại băm và chỉ định kích thước bướcHSETNX
: Thêm giá trị trường của khóa loại băm, với điều kiện trường đó không tồn tại, nếu không nó sẽ không được thực thi.Kiểu Danh sách trong Redis tương tự như LinkedList trong Java và có thể được coi là cấu trúc danh sách liên kết đôi. Nó hỗ trợ cả truy xuất tiến và truy xuất ngược.
Đặc điểm tương tự như LinkedList:
Các lệnh phổ biến:
Yếu tố chính LPUSH ...
: Chèn một hoặc nhiều phần tử vào bên trái danh sách# Thứ tự sau khi lưu là 3 2 1 LPUSH user 1 2 3
Khóa LPOP
: Xóa và trả về phần tử đầu tiên ở bên trái danh sách hoặc không nếu không có# Xóa người dùng LPOP ngoài cùng bên trái # Xóa hai người dùng LPOP ngoài cùng bên trái 2
Phần tử khóa RPUSH ...
: Chèn một hoặc nhiều phần tử vào bên phải danh sáchkhóa RPOP
: Xóa và trả về phần tử đầu tiên ở bên phải danh sáchPhím LRANGE kết thúc bắt đầu
: Trả về tất cả các phần tử trong một phạm vi chỉ mục (chỉ mục bắt đầu từ 0)#Trả về các phần tử từ vị trí 0-2, kết quả là 3 2 1 LRANGER user 0 2
BLPOP
Và BRPOP
: Tương tự như LPOP và RPOP, ngoại trừ việc nó đợi thời gian được chỉ định khi không có phần tử nào, thay vì trả về trực tiếp con số 0.Làm cách nào để mô phỏng ngăn xếp bằng cấu trúc Danh sách?
Lối vào và lối ra ở cùng một phía (nếu cả hai đều sử dụng RPUSH và RPOP)
Làm cách nào để mô phỏng hàng đợi bằng cấu trúc Danh sách?
Lối vào và lối ra không cùng phía (chẳng hạn như sử dụng LPOP và RPUSH)
Làm cách nào để sử dụng cấu trúc Danh sách để mô phỏng hàng đợi chặn?
Lối vào và lối ra không ở cùng một phía và BLPOP hoặc BRPOP được sử dụng khi rời khỏi hàng đợi.
Cấu trúc Set của Redis tương tự như HashSet trong Java và có thể được coi là HashMap có giá trị null. Vì cũng là bảng băm nên nó có những đặc điểm tương tự như HashSet:
Các lệnh phổ biến:
Thành viên chủ chốt của SADD...
: Thêm một hoặc nhiều phần tử vào tập hợpSADD s1 1 2 3
Thành viên chủ chốt của SREM...
: Xóa phần tử đã chỉ định khỏi tập hợpSREM s1 1
phím SCARD
: Trả về số phần tử trong tập hợpTHẺ s1
Thành viên chủ chốt SISMEMBER
r: Xác định xem một phần tử có tồn tại trong tập hợp khôngSINH VIÊN1 1
THÀNH VIÊN
: Lấy tất cả các phần tử trong tập hợpTHÀNH VIÊN s1
Phím SINTER1 phím2 ...
: Tìm giao điểm của key1, key2,...SADD s2 1 2 3 SADD s3 3 4 5 # Tìm giao điểm của s2 và s3, kết quả là 3 SINTER s2 s3
Khóa SDIFF1 khóa2 ...
: Tìm tập sai khác của key1, key2,...# Tìm tập sai phân của s2 so với s3, kết quả là 1 2 SDIFF s2 s3
Phím SUNION1 phím2 ...
: Tìm hợp của key1, key2,...# Tìm hợp của s2 và s3, kết quả là 1 2 3 4 5 SUNION s2 s3
SortedSet của Redis là một tập hợp có thể sắp xếp, tương tự như TreeSet trong Java, nhưng cấu trúc dữ liệu cơ bản rất khác. Mỗi phần tử trong SortedSet có một thuộc tính điểm và các phần tử có thể được sắp xếp dựa trên thuộc tính điểm. Việc triển khai cơ bản là danh sách bỏ qua (SKipList) + bảng băm.
SortedSet có các thuộc tính sau:
Do khả năng sắp xếp của SortedSet nên nó thường được sử dụng để triển khai các chức năng như xếp hạng.
Các lệnh phổ biến:
Thành viên ghi điểm chính của ZADD
: Thêm một hoặc nhiều phần tử vào bộ sắp xếp và cập nhật giá trị điểm của nó nếu nó đã tồn tạiZADD trung quốc 85 jack 86 judy 91 tom 76 Rose
Thành viên chủ chốt ZREM
: Xóa một phần tử được chỉ định trong bộ sắp xếpThành viên chủ chốt ZSCORE
: Lấy giá trị điểm của phần tử được chỉ định trong bộ sắp xếpThành viên chủ chốt ZRANK
: Lấy thứ hạng của phần tử được chỉ định trong bộ sắp xếpChìa khóa ZCARD
: Lấy số phần tử trong SortSetKhóa ZCOUNT tối thiểu tối đa
: Đếm số lượng tất cả các phần tử có giá trị điểm nằm trong phạm vi đã choThành viên gia tăng khóa ZINCRBY
: Để phần tử được chỉ định trong bộ sắp xếp được tăng theo giá trị tăng đã chỉ định.Khóa ZRANGE tối thiểu tối đa
: Sau khi sắp xếp theo điểm, lấy các phần tử nằm trong khoảng xếp hạng quy địnhKhóa ZRANGEBYSCORE tối thiểu tối đa
: Sau khi sắp xếp theo điểm, lấy các phần tử trong khoảng điểm quy địnhZDIFF, ZINTER, ZUNION
: Tìm sự khác biệt, giao điểm và sự kết hợpĐể ý:
Tôi có một bài tập về Redis Pubsub như sau: Nếu nhà xuất bản xuất bản một tin nhắn nhưng người đăng ký không nhận được thì máy chủ gặp sự cố. Làm thế nào để người đăng ký nhận được thông báo này khi máy chủ được khởi động lại? Xin hãy giúp tôi, cảm ơn bạn! Câu trả lời hay nhất Trong trường hợp này tin nhắn sẽ biến mất vĩnh viễn
Chúng tôi đang sử dụng BlockingDequeue của RedisClient của Service Stack để giữ một số dữ liệu cho đến khi nó có thể được xử lý. Mã gọi trông giống như sử dụng (var client =
Tôi có một máy chủ Redis và nhiều máy khách Redis. Mỗi máy khách Redis là một máy chủ WebSocket+HTTP, bao gồm cả việc quản lý các kết nối WebSocket. ThisWebSocket+HTT
Tôi có nhiều phiên bản Redis. Tôi đã tạo một cụm bằng các cổng khác nhau. Bây giờ tôi muốn chuyển dữ liệu từ phiên bản redis có sẵn sang cụm. Tôi biết cách chuyển dữ liệu từ một phiên bản sang cụm nhưng tôi không thể thực hiện việc đó khi có nhiều hơn một phiên bản. tối ưu
Cấu hình: ba phân vùng cụm redis, trải rộng trên ba nhóm, một chính và một phụ. Khi Master đi xuống, Lettuce sẽ ngay lập tức phát hiện sự gián đoạn và bắt đầu thử lại. Tuy nhiên, Lettuce không phát hiện ra rằng người nô lệ liên quan đã thăng chức cho mình thành chủ nhân.
Tôi muốn xóa khóa Redis (và bộ dữ liệu của chúng) dựa trên việc truy xuất các khóa này từ một bộ sưu tập được chỉ định, ví dụ: HMSET id:1 mật khẩu 123 danh mục sữa HMSET id:2 mật khẩu 456
Tôi đang viết một bot (có danh sách các lệnh cần tắt) để giám sát Redis. Nó vô hiệu hóa lệnh bằng cách thực thi nó như (rename-command ZADD "") Khi tôi khởi động lại bot của mình, nếu danh sách các lệnh bị vô hiệu hóa thay đổi
Tôi được giao nhiệm vụ sử dụng xuất bản/đăng ký cho một lượng lớn khán giả. Đây là một ví dụ đơn giản về đăng ký từ các tài liệu: r = redis.StrictRedis(...) p = r.pubsub() p.subscribe('my-firs
Tôi đã đọc về cách sử dụng Redis Sentinel để chuyển đổi dự phòng. Mình dự định có 1 master + 1 Slave nếu master down lâu hơn 1 phút thì Slave sẽ trở thành master. Tôi biết điều này ở Sentinel là
Ưu điểm của việc sử dụng Redis Cluster so với việc chỉ sử dụng Redis thông thường và tạo phân đoạn là gì? Theo tôi, Redis Cluster chú trọng hơn đến vấn đề bảo mật dữ liệu (để kiến trúc master-slave giải quyết các lỗi). Câu trả lời hay nhất tôi nghĩ khi bạn cần làm điều này mà không mất bất kỳ dữ liệu nào
Vì Redis hết hạn khóa theo cả cách thụ động và chủ động, nên có cách nào để lấy khóa ngay cả khi thời gian hết hạn đã qua (nhưng vẫn tồn tại trong Redis) không? Câu trả lời hay nhất ĐỐI TƯỢNG GỠ LỖI myKey sẽ quay trở lại
Tôi muốn sử dụng redis lua để thực hiện lệnh giám sát thay vì màn hình redis-cli. Nhưng tôi không biết phải làm gì. redis.call('monitor') không hoạt động. Câu trả lời hay nhất Bạn không thể đọc từ Redis
Tôi đã đọc https://github.com/redisson/redisson và thấy rằng có một số thiết lập sao chép Redis (bao gồm hỗ trợ cho AWS ElastiCache và Azure Redis Cache)
Microsoft.AspNet.SignalR.Redis và StackExchange.Redis.Extensions.Core được sử dụng trong cùng một dự án. Cái trước yêu cầu StackExchange.Red
1. Làm quen với máy chủ từ điển từ xa Redis Redis (Máy chủ Từ điển Từ xa) là một cơ sở dữ liệu NoSQL dựa trên cặp khóa-giá trị dựa trên bộ nhớ. Các tính năng: loại khóa-giá trị, giá trị
1. Giới thiệu về cấu trúc dữ liệu Redis Redis là một cơ sở dữ liệu khóa-giá trị. Khóa nói chung là loại Chuỗi, nhưng có nhiều loại giá trị khác nhau Dưới đây là một số ví dụ: Ví dụ về loại giá trị Str.
1. Cache là gì? Cache là bộ đệm để trao đổi dữ liệu. Nói chung, nó có hiệu suất đọc và ghi cao. Vai trò của bộ đệm: Giảm tải phía sau, cải thiện hiệu quả đọc và ghi và giảm thời gian phản hồi: Chi phí nhất quán dữ liệu, Chi phí bảo trì mã.
Tôi có một danh sách các hồ sơ. Đối với mỗi bản ghi của mình, tôi cần thực hiện một số phép tính nặng nề vì tôi đang tạo chỉ mục đảo ngược trong Redis. Để đạt được bản ghi đến, nhiều lệnh redis cần được thực thi trong đường ống (sadd là 100 s + set là 1
Tôi có Redis 3 nút và Sentinel 3 nút, mọi thứ đều hoạt động tốt, tất cả các nút chính và phụ đều được xác minh và các tệp cấu hình trọng điểm được cập nhật với tất cả các nút redis và trọng điểm, nhưng vấn đề là khi redis master không hoạt động và trọng điểm muốn bầu lại kẻ thua cuộc
Tôi đang cố tính thời gian phản hồi giữa các tin nhắn được lưu trữ trong Redis. Nhưng tôi không biết làm thế nào để làm điều đó. Trước tiên, tôi phải lưu trữ luồng thời gian của tin nhắn trò chuyện như cuộc trò chuyện ZADD này:CONVERSATION_ID
Tôi là một lập trình viên xuất sắc, rất giỏi!