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
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 !
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]
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 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
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) !
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。 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
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!