怎么统计redis的hash中的某个字段个数,在线等
迷茫
迷茫 2017-04-24 16:00:39
0
5
918

存储的hash这样的:

user:1 => id:1, name: 'a', age:30, sex:1
user:2 => id:2, name: 'b', age:18, sex:0
user:3 => id:3, name: 'c', age:22, sex:1
user:4 => id:4, name: 'd', age:10, sex:0

我想统计sex为1的用户有多少个?

另外再复杂一点,以age分组,分成三组[age<15, 15<=age<25, age>=25],分别统计用用户的个数

刚入redis,找遍了资料,没有发现相关的文档

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

모든 응답(5)
仅有的幸福

Redis의 특성상 통계 연산에는 적합하지 않다고 판단됩니다. SQL과 같은 구조화된 쿼리 언어가 없기 때문입니다. 다음은 귀하를 위한 솔루션이지만 데이터 구성을 수정해야 합니다.

Redis에서 통계적 필요가 있는 경우 SortedSet을 사용할 수 있습니다. 정렬된 세트의 각 키는 점수에 해당하며, 값은 점수에 따라 정렬될 수 있습니다.

예:

으아아아

위 코드는 세 사람의 나이를 점수로 사용하여 세 가지 데이터를 연령 정렬 세트에 삽입합니다. 10~20세 사이의 연령 범위를 계산하려면 다음과 같이 하세요.

으아아아

저장하려는 데이터가 단순한 문자열이 아니고 이를 키로 직접 저장할 수 있는 방법이 없다면 다음 두 가지 해결 방법이 있습니다.

  1. 데이터를 json 형식의 문자열로 키로 변환한 후, json 문자열을 꺼낼 때 코드가 지원할 수 있는 형식으로 복원합니다. 예를 들어 Python에서는 json.dumps을 사용하여 사전을 문자열로 변환한 다음, Redis에서 가져올 때 json.loads을 사용하여 복원할 수 있습니다.

  2. id를 키로 사용한 후 다른 해시나 다른 데이터 구조를 사용하여 실제 사용자 정보를 저장합니다. 이런 방식으로 먼저 통계 필드를 기반으로 ID를 알아낸 다음 ID를 기반으로 완전한 정보를 확인해야 하는데, 이는 두 번의 쿼리가 필요합니다.

하지만 위의 해결 방법은 언급한 연령과 같이 통계 필드가 하나만 있는 경우에만 적용됩니다. 통계적 요구가 여러 개인 경우 이론적으로는 해결책이 있어야 하지만 이 작업을 완료하기 위해 Redis를 사용해야 하는지 고려해야 한다고 생각합니다. 결국 Redis의 사용 시나리오는 SQL만큼 복잡하고 다양한 통계를 수행하는 능력을 제한합니다. mongodb와 같은 다른 NoSQL을 고려할 수 있습니다.

손에 망치가 있다면 모든 것을 못으로 보기보다는 사용 시나리오에 따라 도구를 선택하는 것이 가장 현명합니다.

伊谢尔伦

redis-cli에서 처리해야 하나요? 다른 언어로 Redis에 액세스하려면 user:*를 가져온 다음 개수를 순회하면 됩니다.
이제 막 redis를 사용하기 시작했습니다 =.=

世界只因有你

Redis 쿼리는 키를 통해서만 이루어져야 하며 키는 규칙에 따라 일치할 수 있습니다.

phpcn_u1582

강요하지 말고 관계형 데이터베이스로 전환하세요.

또는 데이터를 삽입할 때마다 통계용으로 특별히 키를 추가하세요.
INCR('sex:1')
INCR('sex:1')

INCR('age:0')
INCR('age:1')
INCR('age:2')
0/1/2은 연령대를 나타냅니다

仅有的幸福

애플리케이션을 만들지 않고 특정 해시 키에 몇 개의 값이 있는지만 알고 있다면 매우 간단합니다. Hkey keyname은 모든 필드를 나열한 다음 redis가 자동으로 정렬 번호를 제공합니다. 계산해, 그렇지? !

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!