redis 如何实现数据按 id 或者 timestamp 筛选?
比如,像 sql 这样
sql
select * from news_table where id > '512'; select * from news_table where id > '512' and cat_id = '2'; select * from news_table where pubdate > 'yesterday';
sql
-- news_table info CREATE TABLE `news_table` ( `id` int(10), `cat_id`, int(10), `title` text, `content` longtext, `pubdate` int(10), );
redis의 zset을 살펴보세요. scop은 귀하의 요구 사항을 충족할 수 있지만 100%보다 큰 ID로 언급한 쿼리 종류는 Redis에서 아이디어를 변경하는 것이 가장 좋습니다. 이는 장점이 아닙니다.
Key-Value 데이터베이스는 조건으로 필터링하는 애플리케이션에는 적합하지 않다고 생각합니다.
512
이 조건이 해결되면 기사를 추가할 때 512보다 큰 요소를 세트에 추가할 수 있습니다.yesterday
은EXPIRE
을 사용하여 구현할 수 있습니다.설계 시 필터링 조건을 결정할 수 없는 경우 해시 테이블/링크드 리스트를 순회해야 하는데 이는 그다지 효율적이지 않습니다...
512란 무엇인가요? 특별한 의미가 있는 숫자이고 이런 식으로 자주 확인해야 하는 경우 id>512 집합을 redis에서 map_512와 같은 별도의 맵에 저장하고 매번 전체 맵을 꺼내는 것이 좋습니다. . 그렇지 않은 경우 매번 지도를 꺼내어 로컬로 필터링할 수 있습니다. 이러한 쿼리가 매우 빈번하고 필터링 조건이 다른 경우에는 한꺼번에 검색한 후 균일하게 필터링하는 것이 좋습니다.
답변해 주신 모든 분들께 감사드립니다! :)
이러한 요구에 redis가 적합하지 않다면 mongodb와 같은 적합한 nosql을 추천해 주세요.
키 추가, 수정, 삭제 등 데이터가 자주 바뀌는 경우에는 mongodb를 이용하면 쉽고 즐겁습니다~
다른 인덱스를 생성하거나 mongodb로 변경