【redis】3種類の特殊データ型

8809 ワード

3つの特殊なデータ型

  • geospatial地理的位置
  • geoadd緯度
  • を追加
  • geopos取得経緯度
  • geodist所与の位置間の距離
  • georadius、georadiusbymember半径
  • geohash

  • hyperloglog
  • pfadd
  • pfcount統計基数数数
  • pfmerge複数hyperlogg
  • をマージ

  • bitmap
  • setbit
  • getbit
  • bitcount統計

  • geospatial地理的位置


    最下位はzsetで実現され、zsetのコマンドで操作できます

    geoadd緯度の追加

    GEOADD key longitude latitude member [longitude latitude member ...] geoaddは、指定された地理空間位置を格納するために使用され、指定されたkeyに1つ以上の経度(longitude)、緯度(latitude)、位置名(member)を追加することができる.両極は直接追加できません.一般的には都市データをダウンロードしjavaプログラムで直接インポートします.
    127.0.0.1:6379> geoadd china:city 16.40 39.90 beijing
    (integer) 1
    127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
    (integer) 1
    127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen
    (integer) 2
    127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
    (integer) 2
    

    geopos緯度取得

    GEOPOS key member [member ...] geoposは、所与のkeyから指定された名前(member)の位置(経度と緯度)をすべて返し、存在しないnilを返すために使用される.
    127.0.0.1:6379> geopos china:city beijing #            
    1) 1) "16.39999955892562866"
       2) "39.90000009167092543"
    127.0.0.1:6379> geopos china:city chongqing
    1) 1) "106.49999767541885376"
       2) "29.52999957900659211"
    

    geodist所定位置間の距離


    geodistは、2つの所与の位置間の距離GEODIST key member1 member2 [m|km|ft|mi]を返すために使用される最後の距離単位パラメータの説明:m:m、デフォルト単位.km:千メートル.mi:マイルです.ft:フィート.
    127.0.0.1:6379> geodist china:city chongqing hangzhou km #            
    "1318.8910"
    

    georadius、georadiusbymember半径


    georadiusは、所与の緯度を中心として、戻りキーに含まれる位置要素のうち、中心との距離が所与の最大距離を超えないすべての位置要素を含む.GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
    パラメータの説明:
    m:メートル、デフォルト単位.km:千メートル.mi:マイルです.ft:フィート.WITHDIST:位置要素を返すと同時に、位置要素と中心との距離も一緒に返します.WITHCOORD:位置要素の経度と次元も一緒に返します.WITHHASH:52ビットの符号付き整数の形で、元のgeohash符号化された位置要素の秩序化集合スコアを返す.このオプションは主に下位アプリケーションやデバッグに使用され、実際の役割は大きくありません.COUNTは、返されるレコードの数を制限します.ASC:検索結果は距離によって近距離から遠距離に並べ替えられます.DESC:検索結果は遠近から並べ替えられます.
    127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km #  110 30              1000km    
    1) "chongqing"
    2) "xian"
    3) "shenzhen"
    4) "hangzhou"
    127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
    1) "chongqing"
    2) "xian"
    

    georadiusbymemberの中心点は、所与の位置要素によって決定されるGEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
    127.0.0.1:6379> GEORADIUSBYMEMBER china:city hangzhou 1000 km #         1000km
    1) "hangzhou"
    2) "shanghai"
    

    geohash


    Redis GEOは、geohashを使用して地理的位置の座標geohashを保存し、1つまたは複数の位置要素のgeohash値を取得する.GEOHASH key member [member ...] 2次元の緯度を1次元の文字列に変換し、2つの文字列が近づくほど距離が近づく
    127.0.0.1:6379> geohash china:city hangzhou chongqing 
    1) "wtmkn31bfb0"
    2) "wm5xzrybty0"
    

    hyperloglog

  • HyperLogLogは基数統計を行うアルゴリズム
  • である.
  • 基数:たとえばデータセット{1,3,5,7,5,7,8}では、このデータセットの基数セットは{1,3,5,7,8}であり、基数(要素を繰り返さない)は5である.
  • HyperLogLogの利点は、入力要素の数や体積が非常に大きい場合、基数を計算するのに必要な空間が常に固定され、小さいことです.Redisでは、HyperLogキーごとに12 KBのメモリを消費するだけで、2^64個近くの異なる要素の基数を計算することができます. !!アプリケーションシーン:Webサイト統計ユーザーアクセスuv
  • pfadd

    127.0.0.1:6379> pfadd mykey a b c d e
    (integer) 1
    127.0.0.1:6379> pfadd mykey1 a b q w o
    (integer) 1
    

    pfcount統計基数数数数

    127.0.0.1:6379> pfcount mykey
    (integer) 5
    127.0.0.1:6379> pfcount mykey1
    (integer) 5
    

    pfmerge複数hyperloglogをマージ

    127.0.0.1:6379> pfmerge mykey3 mykey mykey1
    OK
    127.0.0.1:6379> pfcount mykey3
    (integer) 8
    

    bitmap


    適用シーン:
  • 統計ユーザー情報:アクティブ、非アクティブ!ログイン、未ログイン!カードを打つ!

  • 2つの状態であればbitmapsを使用できます
    bitmapsはいずれも操作バイナリでビット記録を行う

    setbit

    SETBIT key offset value
    

    valueは0または1のみです
    bitmapを使用して月曜日から日曜日までのカードを記録します
    127.0.0.1:6379> setbit sign 0 1
    (integer) 0
    127.0.0.1:6379> setbit sign 1 0
    (integer) 0
    127.0.0.1:6379> setbit sign 2 0
    (integer) 0
    127.0.0.1:6379> setbit sign 3 1
    (integer) 0
    127.0.0.1:6379> setbit sign 4 0
    (integer) 0
    127.0.0.1:6379> setbit sign 5 0
    (integer) 0
    127.0.0.1:6379> setbit sign 6 1
    (integer) 0
    

    getbit


    ある日カードを打ったかどうかを確認します
    127.0.0.1:6379> getbit sign 3
    (integer) 1
    127.0.0.1:6379> getbit sign 6
    (integer) 1
    

    bitcount統計

    127.0.0.1:6379> bitcount sign #         
    (integer) 3