- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我是 Redis 的新手,我有一个包含数百万个成员(member) ID、电子邮件和用户名的数据集,并且正在考虑将它们存储在例如列表结构中。我认为 danh sách
Và sorted set
可能最适合我的情况。
现在,我正在使用用户名的第一个字母索引到一个列表并将数据推送到后面的列表:rpush list:name:a username,member_id
。但是,由于列表没有排序,在几百万条目中检索某条记录会很慢吗?
在这种情况下,有序集(因为它是有序的)会比列表更好吗?或者,您有任何其他提高性能的建议吗?
访问记录的key应该是username和email。
câu trả lời hay nhất
通过任何不靠近前端或末尾的索引访问列表的代价很高,成本为 O(N)。对于大型列表,这不是很有效。
使用哈希可能更适合您的需求。这将使用比列表更多的内存,但将提供接近 O(1) 的访问。
redis 中的哈希是可以包含任意字段和值的命名键。
您可以将整个用户记录存储在单个 redis 哈希中,使用 member_id 命名(希望这是一个短值)。如果保证每个用户的 member_id 是唯一的,下面是如何使用 member_id 42 为用户填充哈希。
hset user:42 email foo@example.com
hset user:42 username foobar
hset user:42 logincount 0
这里的redis“key name”是“user:42”。每个用户将获得一个键,类似于 SQL 数据库中的单行,但更灵活。然后您可以更新两个辅助哈希:一个将用户名映射到 member_id,另一个将电子邮件地址映射到 member_id。这假设您在 member_id、用户名和电子邮件地址之间具有 1:1 的关系。
hset username_to_id foobar 42
hset email_to_id foo@example.com 42
当您需要查找特定用户的电子邮件地址时,首先从 email_to_id
哈希中查找 member_id,然后从哈希中检索 e-mail
字段at key user:member_id 同样,您可以从用户名开始,在 username_to_id
哈希中查找 member_id,然后获取存储在用户中的用户记录:member_id
散列。
这是一个在给定电子邮件地址的情况下查找用户名的示例:
redis> hget email_to_id foo@example.com
"42"
redis> hget user:42 username
"foobar"
redis>
您可以通过向“user:”散列添加更多字段来向用户添加更多记录。如果您想增加登录计数器,这也很简单:
redis> hincrby user:42 login_count 1
(integer) 1
redis> hgetall user:42
1. "email"
2. "foo@example.com"
3. "username"
4. "foobar"
5. "login_count"
6. "1"
redis>
你可以找到more information about hashes在 redis.io 网站上。
关于redis结构、性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661583/
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!