存储的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,找遍了资料,没有发现相关的文档
Redisの特性上、統計演算には適していないと判断されます。 SQL のような構造化クエリ言語がないからです。これが解決策ですが、データ構成を変更する必要があります:
Redis では、本当に統計的なニーズがある場合は、SortedSet 順序付きセットを使用できます。順序付きセット内の各キーはスコアに対応しており、値はスコアに従って並べ替えることができます。
例:
リーリー上記のコードは、3 人の年齢をスコアとして使用して、年齢ソート セットに 3 つのデータを挿入します。 10~20歳までの年齢範囲を数えたい場合は、次のようにします:
リーリー保存したいデータが単純な文字列ではなく、それをキーとして直接保存する方法がない場合は、次の 2 つの解決策があります:
データをキーとしてjson形式の文字列に変換し、取り出す際にコードがサポートできる形式にjson文字列を復元します。たとえば、
json.dumps
将字典转为字符串,从 redis 取出时再使用json.loads
を使用して Python で復元できます。ID をキーとして使用し、別のハッシュまたはその他のデータ構造を使用して実際のユーザー情報を保存します。この方法では、まず統計フィールドに基づいて ID を見つけ、次にその ID に基づいて完全な情報を確認する必要があり、これには 2 つのクエリが必要です。
ただし、上記の解決策は、あなたが言及した年齢など、統計のフィールドが 1 つしかない場合にのみ適用されます。 複数の統計ニーズがある場合、理論的には解決策があるはずですが、この作業を完了するために本当に Redis を使用する必要があるかどうかを検討する必要があると思います。結局のところ、redis の使用シナリオにより、SQL と同じくらい複雑かつ多様な統計を実行する能力が制限されます。 mongodb などの他の NoSQL を検討することもできます。
手にハンマーがあれば何でも釘として見るのではなく、使用シナリオに基づいてツールを選択するのが最も賢明です。
redis-cli で処理する必要がありますか?他の言語で Redis にアクセスするには、user:* を取り出してカウントを調べます。
redis を使い始めたばかりです =.=
Redis クエリはキーを介してのみ行う必要があり、キーに対して何かを行うことができます。
無理に使用するのではなく、リレーショナル データベースに切り替えてください。
または、データを挿入するたびに統計専用のキーを追加します。
INCR('性別:1')
INCR('性別:1')
INCR('age:0')
INCR('age:1')
INCR('age:2')
0/1/2は年齢層を表します
アプリケーションを作成せず、特定のハッシュ キーに含まれる値の数だけを知っている場合、Hkey keyname ですべてのフィールドがリストされ、redis が自動的にソート番号 (カウント) を与えます。 、 右? !