Maison  >  Article  >  base de données  >  Compréhension approfondie des types de données spéciaux dans Redis : statistiques de cardinalité, bitmaps, localisation géographique

Compréhension approfondie des types de données spéciaux dans Redis : statistiques de cardinalité, bitmaps, localisation géographique

青灯夜游
青灯夜游avant
2021-12-22 09:59:402446parcourir

Cet article vous présentera les trois types de données spéciaux dans Redis (statistiques de cardinalité, bitmaps et localisation géographique). J'espère qu'il vous sera utile !

Compréhension approfondie des types de données spéciaux dans Redis : statistiques de cardinalité, bitmaps, localisation géographique

En plus des 5 types de données de base, Redis propose également trois types de données spéciaux, à savoir HyperLogLogs (statistiques de cardinalité), Bitmaps (bitmaps) et geospatial (localisation géographique). [Recommandations associées : Tutoriel vidéo Redis]

HyperLogLogs (statistiques de cardinalité)

Redis version 2.8.9 a mis à jour la structure de données Hyperloglog !

  • Qu'est-ce qu'un numéro de base ?

Par exemple, A = {1, 2, 3, 4, 5}, B = {3, 5, 6, 7, 9} puis la base (éléments non répétitifs) = 1, 2 ; , 4, 6, 7, 9 ; (La tolérance aux pannes est autorisée, c'est-à-dire qu'une certaine erreur peut être acceptée)

  • Quel problème les statistiques de cardinalité HyperLogLogs sont-elles utilisées pour résoudre ?

Cette structure peut être très économe en mémoire pour compter divers décomptes, comme le nombre d'IP enregistrées, le nombre d'IP visitées quotidiennement, l'UV en temps réel de la page, le nombre d'utilisateurs en ligne, le nombre d'amis communs, etc.

  • Quels sont ses avantages ?

Par exemple, un grand site Web possède 1 million d'IP chaque jour. En calculant grossièrement qu'une IP consomme 15 octets, alors 1 million d'IP équivaut à 15 Mo. Chaque clé d'HyperLogLog dans Redis occupe 12 Ko de contenu et le stockage théorique est approximativement proche de 2 ^ 64 valeurs. Quel que soit le contenu stocké, il s'agit d'un algorithme basé sur l'estimation de la cardinalité, qui ne peut qu'estimer la cardinalité avec plus de précision. Utilisez une petite quantité de mémoire fixe pour stocker et identifier des éléments uniques dans une collection. De plus, la base de cette estimation n'est pas nécessairement exacte. Il s'agit d'une approximation avec une erreur standard de 0,81 % (pour les scénarios commerciaux pouvant accepter une certaine tolérance d'erreur, comme les statistiques de numéros IP, UV, etc., cela peut être ignoré). ).

  • Les commandes associées utilisent

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 (stockage de bits)

Bitmap est une structure de données bitmap, qui fonctionne sur des bits binaires pour l'enregistrement et n'a que deux états : 0 et 1.

  • Quel problème sert-il à résoudre ?

Par exemple : compter les informations des utilisateurs, actifs, inactifs ! Connectez-vous, pas connecté ! Enregistrez-vous, ne vous enregistrez pas ! Les bitmaps peuvent être utilisés dans les deux états !

Quelle quantité de mémoire est nécessaire pour stocker le statut d'enregistrement d'un an ? 365 jours = 365 bits 1 octet = 8 bits 46 octets environ !

  • Commandes associées à utiliser

Utilisez le bitmap pour enregistrer l'enregistrement du lundi au dimanche ! Lundi : 1 Mardi : 0 Mercredi : 0 Jeudi : 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

Vérifiez s'il y a un enregistrement un certain jour !

127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 5
(integer) 0

Opération statistique, comptez le nombre de jours pointés !

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

geospatial (localisation géographique)

Redis' Geo a été lancé dans la version Redis 3.2. Cette fonction permet de calculer des informations de localisation géographique : la distance entre deux lieux, et le nombre de personnes dans un rayon !

geoadd

Ajouter une localisation géographique

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

Règles

deux niveaux ne peuvent pas être ajoutés directement, nous téléchargeons généralement les données de la ville (vous pouvez interroger GEO sur ce site : http://www. jsons.cn/lngcode) !

  • La longitude valide est de -180 degrés à 180 degrés.
  • Les latitudes valides vont de -85,05112878 degrés à 85,05112878 degrés.
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin
(error) ERR invalid longitude,latitude pair 39.900000,116.400000

geopos

Obtenir la longitude et la latitude du membre spécifié

127.0.0.1:6379> geopos china:city taiyuan manjing
1) 1) "112.54999905824661255"
   1) "37.86000073876942196"
2) 1) "118.75999957323074341"
   1) "32.03999960287850968"

Obtenir le positionnement actuel, qui doit être une valeur de coordonnée !

géodiste

Si ce n'est pas le cas existe, retourne vide

Les unités sont les suivantes

  • m
  • km
  • mi miles
  • ft pieds
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"

géoradius

Personnes à proximité ==> Obtenez l'adresse, l'emplacement de toutes les personnes à proximité, transmettez Radius pour interroger

obtenir le nombre spécifié de personnes

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"

clé de paramètre longitude latitude rayon unité [longitude et latitude des résultats affichés] [distance des résultats affichés] [nombre de résultats affichés]

GeoradiusByMember

Display les autres membres dans un certain rayon du membre spécifié

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"

Les paramètres sont les mêmes que Georadius

geohash (moins utilisés)

Ce commandement renvoie un 11 caractères chaîne de hachage

127.0.0.1:6379> geohash china:city taiyuan shenyang
1) "ww8p3hhqmp0"
2) "wxrvb9qyxk0"

la longitude et la latitude bidimensionnelles seront converties en chaînes unidimensionnelles. Si les deux chaînes sont plus proches, plus la distance est proche

couche inférieure

.

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"

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer