ensemble
Redis Set est une collection non ordonnée de chaînes de type.
La collection est réalisée via une table de hachage, de sorte que la complexité de l'ajout, de la suppression et de la recherche sont toutes O (1).
- Nouvelles exigences de stockage: stocker de grandes quantités de données et fournir une plus grande efficacité dans les requêtes
- Structure de stockage requise: capable d'enregistrer de grandes quantités de données, mécanisme de stockage interne efficace, facile à interroger
- Définir le type: il est exactement le même que la structure de stockage de hachage. Il stocke uniquement la clé et ne stocke pas la valeur (nil), et la valeur ne peut pas être répétée.
![image-20200412144145159](https://raw.githubusercontent.com/kawendiyu/img_bed/master/img/20200417175613.png)
![image-20200412144209832](https://raw.githubusercontent.com/kawendiyu/img_bed/master/img/20200417175614.png)
Commandes de base
Commande | Fonction |
---|---|
sadd key member1 [membre2 ......] | Ajouter des données |
touche smembers | Obtenez toutes les données |
clé membre srem1 [membre2] | Supprimer les données |
clé scard | Obtenez les données agrégées |
membre clé sismember | Déterminer si la collection contient les données spécifiées |
> sadd students zhangsan lisi wangwu
(integer) 3
> smembers students
1) "zhangsan"
2) "wangwu"
3) "lisi"
> srem students zhangsan
(integer) 1
> scard students
(integer) 2
> sismember students zhangsan
(integer) 0
Commande étendue 1
Commande | Fonction |
---|---|
clé srandmember [count] | Obtenez au hasard la quantité de données spécifiée dans la collection |
touche spop [count] | Obtenez au hasard des données dans la collection et déplacez les données hors de la collection |
srandmember students
"lisi"
> srandmember students 2
1) "wangwu"
2) "lisi"
> spop students
"wangwu"
Commande étendue 2
Commande | Fonction |
---|---|
clé d'agglomération1 [clé2] | Trouvez l'intersection de deux ensembles |
sunion key1 [clé2] | Trouvez l'union de deux ensembles |
sdiff key1 [key2] | Trouvez la différence entre deux ensembles, avant-arrière |
destination du magasin principal clé1 [clé2] | Trouver l'intersection de deux ensembles et les stocker dans l'ensemble spécifié |
sunionstore destination key1 [clé2] | Trouver l'union de deux collections et les stocker dans la collection spécifiée |
sdiffstore destination key1 [clé2] | Trouver la différence entre deux ensembles et la stocker dans l'ensemble spécifié |
membre de destination source smove | Déplacer les données spécifiées de la collection d'origine vers la collection cible |
> sunion students teacher
1) "zhangsan"
2) "lisi"
3) "yuwen"
4) "shuxue"
Scénario d'application
Scénario d'entreprise 1
Chaque utilisateur définira trois passe-temps lors de la première utilisation de Toutiao, mais afin d'augmenter plus tard l'activité et les points d'intérêt de l'utilisateur, les utilisateurs doivent progressivement s'intéresser à d'autres catégories d'informations et augmenter la fidélisation de la clientèle.
Analyse commerciale
- Le système analyse les informations les plus récentes ou les plus chaudes de chaque catégorie et les organise en collections définies
- Sélectionnez au hasard certaines des informations
- Coopérer avec l'attention de l'utilisateur sur les informations chaudes dans la classification des informations et organiser en un ensemble complet d'informations affichées
Solution
- Obtenez au hasard la quantité de données spécifiée dans la collection
- Obtenez au hasard des données dans la collection et déplacez les données hors de la collection
Scénario d'entreprise 2
Afin de favoriser la communication entre les utilisateurs et d'assurer l'augmentation du taux d'unité commerciale, chaque utilisateur doit avoir un grand nombre d'amis. En fait, les nouveaux arrivants sur le lieu de travail n'ont pas
plus d'amis sur le lieu de travail.
Afin d'augmenter la popularité des utilisateurs et d'augmenter la rétention des utilisateurs, Sina Weibo a besoin que les utilisateurs de Weibo prêtent attention à plus de personnes pour obtenir plus d'informations ou de
sujets d'actualité. Comment augmenter le nombre total d'utilisateurs prêtant attention aux autres?
Solution
- Trouvez l'intersection, l'union et la différence de deux ensembles
- Trouver l'intersection, l'union et la différence de deux ensembles et les stocker dans l'ensemble spécifié
- Déplacer les données spécifiées de la collection d'origine vers la collection cible
Scénario d'entreprise 3
La société du groupe compte un total de 12 000 employés, plus de 700 rôles dans le système OA interne, plus de 3000 opérations commerciales, plus de 23 000 types de données, chaque
employé a un ou plusieurs rôles, comment vérifier rapidement l'autorité des opérations commerciales
L'entreprise fait la promotion de son nouveau site Web et compte les PV (visite), UV (visiteur indépendant) et IP (IP indépendante) du site Web.
Solution
- Utilisez la fonction de déduplication des données de la collection de jeux pour enregistrer diverses données d'accès
- Créez des données de chaîne et utilisez incr pour compter les visites quotidiennes (PV)
- Définir un modèle pour enregistrer le nombre de cookies différents (UV)
- Établir un modèle défini pour enregistrer le nombre d'adresses IP différentes (IP)
Scénario d'entreprise 4
Les
sites Web d'information sur les listes d'informations poursuivent un trafic élevé, mais en raison de la valeur de leurs informations, ils sont souvent facilement utilisés par les criminels. Grâce à la technologie des robots, ils peuvent
obtenir rapidement des informations. Les informations provenant de sites Web particuliers de l'industrie peuvent être converties en secrets commerciaux après avoir été analysées par les robots. A vendre. Par exemple, des
billets de train tiers, des billets d'avion, un logiciel d'achat de billets d'hôtel, des commentaires sur les avis de commerce électronique, des avis.
Dans le même temps, le faux trafic apporté par le robot donnera également à l'opérateur l'illusion et prendra la mauvaise décision, et empêchera efficacement le site Web d'être exploré à plusieurs reprises par le robot comme
le problème de base que chaque site doit prendre en compte. Après avoir distingué les utilisateurs de robots sur la base du niveau technique, ces utilisateurs doivent être efficacement protégés, ce qui est
l'application typique de la liste noire.
ps: Ce n'est pas que les robots doivent faire un travail destructeur. Certains petits sites Web ont besoin de robots pour leur apporter du trafic.
Liste blanche
Pour un accès plus sécurisé aux applications, la liste noire seule ne peut pas résoudre le problème de sécurité. Pour le moment, il est nécessaire de définir un groupe d'utilisateurs accessible et de
s'appuyer sur la liste blanche pour une vérification d'accès plus exigeante.
Solution
- Définissez des règles d'identification et de découverte des utilisateurs en fonction de la stratégie d'entreprise
- Mettre à jour périodiquement la liste noire des utilisateurs qui respecte les règles et l'ajouter à la collection de jeux
- Une fois les informations sur le comportement de l'utilisateur atteintes, elles sont comparées à la liste noire pour confirmer le comportement
- Filtrage de la liste noire des adresses IP: sources d'informations appliquées pour ouvrir les droits d'accès des visiteurs
- Informations sur les périphériques de filtrage de la liste noire: source d'informations utilisée pour restreindre l'accès aux périphériques
- Utilisateurs de filtrage des listes noires: appliqués aux sources d'informations en fonction des droits d'accès
définir l'application
-
Redis est utilisé pour la récupération aléatoire d'informations sur les recommandations, telles que la recommandation de liste de chansons à chaud, la recommandation de nouvelles chaudes, l'itinéraire de voyage à chaud, la recommandation d'application APP, la recommandation Big V, etc.
-
redis est utilisé pour la recherche associée d'informations similaires, la recherche associée au deuxième degré et la recherche approfondie.
Afficher l'attention commune (une fois),
afficher les amis communs (une fois)
de l'utilisateur A et obtenir la liste d'informations sur les amis de l'ami B (une fois)
de l'utilisateur A , Obtenez la liste de liste d'achats (deuxième degré) de l'utilisateur ami B
de l'utilisateur A, obtenez la liste de recharge du jeu de l'utilisateur ami B (deuxième degré) -
Redis s'applique à la déduplication rapide du même type de données
-
redis s'applique au contrôle de service basé sur les paramètres de liste noire et de liste blanche
Questions nécessitant une attention
- Le type de jeu n'autorise pas les données en double. Si les données ajoutées existent déjà dans le jeu, une seule copie sera conservée
- l'ensemble est identique à la structure de stockage du hachage, mais l'espace pour stocker la valeur dans le hachage ne peut pas être activé
sorted_set
Redis zset, comme set, est également une collection d'éléments de type chaîne et n'autorise pas les membres en double.
La différence est que chaque élément est associé à un score de type double. Redis utilise la partition pour trier les membres de l'ensemble de petit à grand. Les membres de zset sont uniques, mais le score peut être répété.
- Nouvelles exigences de stockage: le tri des données est propice à l'affichage efficace des données, et il est nécessaire de fournir un moyen de trier selon ses propres caractéristiques
- Structure de stockage requise: un nouveau modèle de stockage qui peut enregistrer des données triables
- type sorted_set: ajouter des champs triables en fonction de la structure de stockage définie
![image-20200412171628483](https://raw.githubusercontent.com/kawendiyu/img_bed/master/img/20200417175615.png)
Commandes de base
Commande | Fonction |
---|---|
zadd key score1 membre1 [score2 membre2 ...] | Ajouter des données |
zrange key start stop [WITHSCORES] | Trier par ordre croissant pour obtenir toutes les données dans l'intervalle de classement spécifié |
zrevrange key start stop [WITHSCORES] | Trier par ordre décroissant pour obtenir toutes les données dans l'intervalle de classement spécifié |
membre clé zrem [membre ...] | Supprimer les données spécifiées |
clé zrangebyscore min max [WITHSCORES] [LIMIT] | Trier par ordre croissant pour obtenir des données dans l'intervalle de score spécifié |
clé zrevrangebyscore max min [WITHSCORES] | Trier par ordre décroissant ... |
zremrangebyrank key start stop | Supprimer toutes les données de la plage de classement spécifiée de l'ensemble ordonné |
clé zremrangebyscore min max | Supprimer toutes les données de l'intervalle de score spécifié de l'ensemble ordonné |
clé zcard | Obtenez la quantité totale de données de collecte |
clé zcount min max | Obtenez la quantité totale de données dans l'intervalle de score spécifié de la collection |
zinterstore destination numkeys key [clé ...] | Fusionner l'intersection de deux ensembles ordonnés en un nouvel ensemble ordonné |
zunionstore destination numkeys key [clé ...] | Fusionner l'union de deux ensembles ordonnés en un nouvel ensemble ordonné |
> zadd zs 10 fir 8 sec 4 thi
(integer) 3
> zrange zs 0 2
1) "thi"
2) "sec"
3) "fir"
> zrevrange zs 0 -1 withscores
1) "fir"
2) "10"
3) "sec"
4) "8"
5) "thi"
6) "7"
//> zrem zs thi
//(integer) 1
> zrangebyscore zs 7 10 withscores
1) "sec"
2) "8"
3) "fir"
4) "10"
Commandes étendues
Commande | Fonction |
---|---|
membre clé zrank | Récupère l'index (rang) correspondant aux données, par ordre croissant |
membre clé zrevrank | Récupère l'index (rang) correspondant aux données, par ordre décroissant |
membre clé zscore | Obtenez le score des données spécifiées |
membre d'incrémentation de clé zincrby | Augmenter pour spécifié (peut être négatif, peut être décimal) |
> zrank zs thi
(integer) 0
> zrevrank zs sec
(integer) 1
> zscore zs fir
"10"
> zincrby zs 5 fir
"15"
> zincrby zs -4.5 fir
"10.5"
Scénario d'application
Scénario d'entreprise 1
Votez pour les dix meilleurs jeunes du Guangdong, votez dans divers spectacles de variétés et élections de la mer.
Divers sites Web de ressources TOP10 (films, chansons, documents, commerce électronique, jeux, etc.)
Statistiques d'activité de la salle de chat Statistiques d'
intimité entre amis
Analyse commerciale
- Établir une base de classement pour toutes les ressources participant au classement
Solution
- Obtenez l'index (rang) correspondant aux données
- acquisition et modification de valeur de score
Scénario d'entreprise 2
Les sites Web de service de base + service à valeur ajoutée mettront en place un essai pour les membres afin de permettre aux utilisateurs de profiter pleinement des avantages des membres. Par exemple, regardez un essai de film VIP, une
expérience VIP de jeu , une expérience VIP de téléchargement de disque cloud, une expérience VIP de visualisation de données. Lorsque l'expérience VIP expire, si ces informations sont gérées efficacement. Même pour
les utilisateurs VIP formels , il existe des méthodes de gestion correspondantes.
Le site Web ouvrira régulièrement le vote et la discussion, et sera mené dans un temps limité, et sera annulé après la date limite. Comment gérer efficacement ces informations expirées.
Solution
-
Pour le traitement des tâches basé sur la limitation de la chronologie, enregistrez le temps de traitement comme valeur de score et utilisez la fonction de tri pour distinguer l'ordre de traitement
-
Enregistrez la prochaine fois à traiter, traitez la tâche correspondante à son échéance, supprimez l'enregistrement dans redis et enregistrez la prochaine fois à traiter
-
Lorsqu'une nouvelle tâche est ajoutée, déterminez et mettez à jour l'heure de la prochaine tâche à traiter
-
为提升sorted_set的性能,通常将任务根据特征存储成若干个sorted_set。例如1小时内, 1天内,周内,
月内,季内,年度等,操作时逐级提升,将即将操作的若干个任务纳入到1小时内处理的队列中 -
获取当前系统时间
time
业务场景3
任务/消息权重设定应用
当任务或者消息待处理,形成了任务队列或消息队列时,对于高优先级的任务要保障对其优先处理,如
何实现任务权重管理。
解决方案
- 对于带有权重的任务,优先处理权重高的任务,采用score记录权重即可
多条件任务权重设定
如果权重条件过多时,需要对排序score值进行处理,保障score值能够兼容2条件或者多条件,例如外贸
订单优先于国内订单,总裁订单优先于员工订单,经理订单优先于员工订单 - 因score长度受限,需要对数据进行截断处理,尤其是时间设置为小时或分钟级即可(折算后)
- 先设定订单类别,后设定订单发起角色类别,整体score长度必须是统一的,不足位补0。第一排序规则首
位不得是0 - 例如外贸101,国内102,经理004,员工008。
- 员工下的外贸单score值为101008(优先)
- 经理下的国内单score值为102004
zset的应用
- redis 应用于计数器组合排序功能对应的排名
- redis 应用于定时任务执行顺序管理或任务过期管理
- redis 应用于即时任务/消息队列执行管理
- redis 应用于限时按次结算的服务控制
注意事项
- score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992
- score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时
候要慎重 - Le stockage sous-jacent de sorted_set est basé sur la structure définie, de sorte que les données ne peuvent pas être répétées. Si les mêmes données sont ajoutées à plusieurs reprises, la valeur du score sera
écrasée à plusieurs reprises, en conservant le dernier résultat modifié