Heim > Datenbank > Redis > Vertieftes Verständnis spezieller Datentypen in Redis: Kardinalitätsstatistiken, Bitmaps, geografischer Standort

Vertieftes Verständnis spezieller Datentypen in Redis: Kardinalitätsstatistiken, Bitmaps, geografischer Standort

青灯夜游
Freigeben: 2021-12-22 09:59:40
nach vorne
2489 Leute haben es durchsucht

Dieser Artikel führt Sie durch die drei speziellen Datentypen in Redis (Kardinalitätsstatistik, Bitmaps, geografischer Standort).

Vertieftes Verständnis spezieller Datentypen in Redis: Kardinalitätsstatistiken, 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]

HyperLogLogs (Kardinalitätsstatistik)

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
Nach dem Login kopieren

Bitmap (Bitspeicher)

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
Nach dem Login kopieren

Ü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
Nach dem Login kopieren

Statistischer Betrieb, zählen Sie die Anzahl der eingestempelten Tage!

127.0.0.1:6379> bitcount sign # 统计这周的打卡记录,就可以看到是否有全勤!
(integer) 3
Nach dem Login kopieren

geospatial (geografischer Standort)

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
Nach dem Login kopieren

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)!

  • Der gültige Längengrad liegt zwischen -180 Grad und 180 Grad.
  • Gültige Breitengrade liegen zwischen -85,05112878 Grad und 85,05112878 Grad.
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin
(error) ERR invalid longitude,latitude pair 39.900000,116.400000
Nach dem Login kopieren

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"
Nach dem Login kopieren

Erhalten Sie die aktuelle Positionierung, die ein Koordinatenwert sein muss!

geodist

Wenn nicht vorhanden, gibt leer zurück

Einheiten sind wie folgt

  • m
  • km
  • mi Meilen
  • ft Fuß
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"
Nach dem Login kopieren

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"
Nach dem Login kopieren
Die Parameter sind die gleichen wie bei Georadius

geohash (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"
Nach dem Login kopieren
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
Nach dem Login kopieren

查看全部元素 删除指定的元素

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"
Nach dem Login kopieren

更多编程相关知识,请访问:编程视频!!

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!

Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage