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

存储的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 順序付きセットを使用できます。順序付きセット内の各キーはスコアに対応しており、値はスコアに従って並べ替えることができます。

例:

リーリー

上記のコードは、3 人の年齢をスコアとして使用して、年齢ソート セットに 3 つのデータを挿入します。 10~20歳までの年齢範囲を数えたい場合は、次のようにします:

リーリー

保存したいデータが単純な文字列ではなく、それをキーとして直接保存する方法がない場合は、次の 2 つの解決策があります:

  1. データをキーとしてjson形式の文字列に変換し、取り出す際にコードがサポートできる形式にjson文字列を復元します。たとえば、json.dumps 将字典转为字符串,从 redis 取出时再使用json.loads を使用して Python で復元できます。

  2. ID をキーとして使用し、別のハッシュまたはその他のデータ構造を使用して実際のユーザー情報を保存します。この方法では、まず統計フィールドに基づいて ID を見つけ、次にその ID に基づいて完全な情報を確認する必要があり、これには 2 つのクエリが必要です。

ただし、上記の解決策は、あなたが言及した年齢など、統計のフィールドが 1 つしかない場合にのみ適用されます。 複数の統計ニーズがある場合、理論的には解決策があるはずですが、この作業を完了するために本当に Redis を使用する必要があるかどうかを検討する必要があると思います。結局のところ、redis の使用シナリオにより、SQL と同じくらい複雑かつ多様な統計を実行する能力が制限されます。 mongodb などの他の NoSQL を検討することもできます。

手にハンマーがあれば何でも釘として見るのではなく、使用シナリオに基づいてツールを選択するのが最も賢明です。

いいねを押す +0
伊谢尔伦

redis-cli で処理する必要がありますか?他の言語で Redis にアクセスするには、user:* を取り出してカウントを調べます。
redis を使い始めたばかりです =.=

いいねを押す +0
世界只因有你

Redis クエリはキーを介してのみ行う必要があり、キーに対して何かを行うことができます。

いいねを押す +0
phpcn_u1582

無理に使用するのではなく、リレーショナル データベースに切り替えてください。

または、データを挿入するたびに統計専用のキーを追加します。
INCR('性別:1')
INCR('性別:1')

INCR('age:0')
INCR('age:1')
INCR('age:2')
0/1/2は年齢層を表します

いいねを押す +0
仅有的幸福

アプリケーションを作成せず、特定のハッシュ キーに含まれる値の数だけを知っている場合、Hkey keyname ですべてのフィールドがリストされ、redis が自動的にソート番号 (カウント) を与えます。 、 右? !

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート