Dieser Artikel führt Sie durch die drei speziellen Datentypen in Redis (Kardinalitätsstatistik, Bitmaps, geografischer Standort).
Zusätzlich zu den 5 Grunddatentypen verfügt Redis auch über drei spezielle Datentypen, nämlich HyperLogLogs (Kardinalitätsstatistik), Bitmaps (Bitmaps) und geospatial (geografischer Standort). [Verwandte Empfehlungen: Redis-Video-Tutorial]
Redis Version 2.8.9 hat die Hyperloglog-Datenstruktur aktualisiert!
Was ist eine Basiszahl?
Zum Beispiel: A = {1, 2, 3, 4, 5}, B = {3, 5, 6, 7, 9}; dann ist die Basis (sich nicht wiederholende Elemente) = 1, 2 , 4, 6, 7, 9; (Fehlertoleranz ist zulässig, das heißt, ein bestimmter Fehler kann akzeptiert werden)
Welches Problem wird mit der Kardinalitätsstatistik von HyperLogLogs gelöst?
Diese Struktur kann sehr speichersparend sein, um verschiedene Zählungen zu zählen, wie z. B. die Anzahl der registrierten IPs, die Anzahl der täglich besuchten IPs, die Echtzeit-UV der Seite, die Anzahl der Online-Benutzer, die Anzahl von gemeinsamen Freunden usw.
Was sind seine Vorteile?
Zum Beispiel hat eine große Website 1 Million IPs pro Tag. Wenn man grob berechnet, dass eine IP 15 Bytes verbraucht, dann sind 1 Million IPs 15 MB. Jeder Schlüssel in HyperLogLog belegt 12 KB Inhalt in Redis, und der theoretische Speicher beträgt ungefähr 2 ^ 64 Werte. Unabhängig vom gespeicherten Inhalt handelt es sich um einen Algorithmus, der auf der Kardinalitätsschätzung basiert und die Kardinalität nur genauer schätzen kann. Verwenden Sie eine kleine Menge festen Speichers, um eindeutige Elemente in einer Sammlung zu speichern und zu identifizieren. Darüber hinaus ist die Grundlage dieser Schätzung nicht unbedingt genau. Es handelt sich um eine Näherung mit einem Standardfehler von 0,81 % (bei Geschäftsszenarien, die eine gewisse Fehlertoleranz akzeptieren können, wie z. B. IP-Nummernstatistiken, UV usw., kann dies ignoriert werden). ).
Verwandte Befehle verwenden
127.0.0.1:6379> pfadd key1 a b c d e f g h i # 创建第一组元素 (integer) 1 127.0.0.1:6379> pfcount key1 # 统计元素的基数数量 (integer) 9 127.0.0.1:6379> pfadd key2 c j k l m e g a # 创建第二组元素 (integer) 1 127.0.0.1:6379> pfcount key2 (integer) 8 127.0.0.1:6379> pfmerge key3 key1 key2 # 合并两组:key1 key2 -> key3 并集 OK 127.0.0.1:6379> pfcount key3 (integer) 13
Bitmap ist eine Bitmap-Datenstruktur, die zur Aufzeichnung mit Binärbits arbeitet und nur zwei Zustände hat: 0 und 1.
Welches Problem wird damit gelöst?
Zum Beispiel: Benutzerinformationen zählen, aktiv, inaktiv! Einloggen, nicht eingeloggt! Einchecken, nicht einchecken! Bitmaps können in beiden Staaten verwendet werden!
Wie viel Speicher wird benötigt, um den Check-in-Status eines Jahres zu speichern? 365 Tage = 365 Bit 1 Byte = 8 Bit 46 Byte oder so!
Verwandte Befehle zur Verwendung
Verwenden Sie Bitmap, um den Check-in von Montag bis Sonntag aufzuzeichnen! Montag: 1 Dienstag: 0 Mittwoch: 0 Donnerstag: 1...
127.0.0.1:6379> setbit sign 0 1 (integer) 0 127.0.0.1:6379> setbit sign 1 1 (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
Überprüfen Sie, ob an einem bestimmten Tag ein Check-in stattfindet!
127.0.0.1:6379> getbit sign 3 (integer) 1 127.0.0.1:6379> getbit sign 5 (integer) 0
Statistischer Betrieb, zählen Sie die Anzahl der eingestempelten Tage!
127.0.0.1:6379> bitcount sign # 统计这周的打卡记录,就可以看到是否有全勤! (integer) 3
Redis’ Geo wurde in der Redis 3.2-Version gestartet! Diese Funktion kann geografische Standortinformationen berechnen: die Entfernung zwischen zwei Orten und die Anzahl der Personen in einem Umkreis.
geoadd
Geografischen Standort hinzufügen
127.0.0.1:6379> geoadd china:city 118.76 32.04 manjing 112.55 37.86 taiyuan 123.43 41.80 shenyang (integer) 3 127.0.0.1:6379> geoadd china:city 144.05 22.52 shengzhen 120.16 30.24 hangzhou 108.96 34.26 xian (integer) 3
Regeln
Zwei Ebenen können nicht direkt hinzugefügt werden, wir laden normalerweise Stadtdaten herunter (Sie können GEO auf dieser Website abfragen: http://www. jsons.cn/lngcode)!
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。 127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin (error) ERR invalid longitude,latitude pair 39.900000,116.400000
geopos
Erhalten Sie den Längen- und Breitengrad des angegebenen Mitglieds
127.0.0.1:6379> geopos china:city taiyuan manjing 1) 1) "112.54999905824661255" 1) "37.86000073876942196" 2) 1) "118.75999957323074341" 1) "32.03999960287850968"
Erhalten Sie die aktuelle Positionierung, die ein Koordinatenwert sein muss!
geodist
Wenn nicht vorhanden, gibt leer zurück
Einheiten sind wie folgt
127.0.0.1:6379> geodist china:city taiyuan shenyang m "1026439.1070" 127.0.0.1:6379> geodist china:city taiyuan shenyang km "1026.4391"
Georadius
Personen in der Nähe. ==> ; Holen Sie sich die Adresse und den Standort von Alle in der Nähe befindlichen Personen, übergeben Sie den Radius zur Abfrage. Erhalten Sie die angegebene Anzahl von Personen georadiusbymember
Andere Mitglieder innerhalb eines bestimmten Radius des angegebenen Mitglieds anzeigen
127.0.0.1:6379> georadius china:city 110 30 1000 km 以 100,30 这个坐标为中心, 寻找半径为1000km的城市 1) "xian" 2) "hangzhou" 3) "manjing" 4) "taiyuan" 127.0.0.1:6379> georadius china:city 110 30 500 km 1) "xian" 127.0.0.1:6379> georadius china:city 110 30 500 km withdist 1) 1) "xian" 2) "483.8340" 127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord withdist count 2 1) 1) "xian" 2) "483.8340" 3) 1) "108.96000176668167114" 2) "34.25999964418929977" 2) 1) "manjing" 2) "864.9816" 3) 1) "118.75999957323074341" 2) "32.03999960287850968"Die Parameter sind die gleichen wie bei Georadiusgeohash (weniger verwendet)
Dieser Befehl gibt einen 11-stelligen Hash zurück string
127.0.0.1:6379> georadiusbymember china:city taiyuan 1000 km 1) "manjing" 2) "taiyuan" 3) "xian" 127.0.0.1:6379> georadiusbymember china:city taiyuan 1000 km withcoord withdist count 2 1) 1) "taiyuan" 2) "0.0000" 3) 1) "112.54999905824661255" 2) "37.86000073876942196" 2) 1) "xian" 2) "514.2264" 3) 1) "108.96000176668167114" 2) "34.25999964418929977"werden zweidimensionale Längen- und Breitengrade in eindimensionale Strings umgewandelt. Je näher die beiden Strings sind, desto geringer ist der Abstand
geo底层的实现原理实际上就是Zset, 我们可以通过Zset命令来操作geo
127.0.0.1:6379> type china:city zset
查看全部元素 删除指定的元素
127.0.0.1:6379> zrange china:city 0 -1 withscores 1) "xian" 2) "4040115445396757" 3) "hangzhou" 4) "4054133997236782" 5) "manjing" 6) "4066006694128997" 7) "taiyuan" 8) "4068216047500484" 9) "shenyang" 1) "4072519231994779" 2) "shengzhen" 3) "4154606886655324" 127.0.0.1:6379> zrem china:city manjing (integer) 1 127.0.0.1:6379> zrange china:city 0 -1 1) "xian" 2) "hangzhou" 3) "taiyuan" 4) "shenyang" 5) "shengzhen"
更多编程相关知识,请访问:编程视频!!
Das obige ist der detaillierte Inhalt vonVertieftes Verständnis spezieller Datentypen in Redis: Kardinalitätsstatistiken, Bitmaps, geografischer Standort. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!