Maison  >  Questions et réponses  >  le corps du texte

java - redis 缓存方案--有没有可用的?

现在的方案是,sql 作为key 查询结果序列化后 存入value 。表如果有数据修改添加删除,flushDB()。
但是整个项目只要有数据变更缓存就没了。
谁还有其他方案?
想知道的就是数据增删改对redis都有操作后再对数据库操作,redis里查询的永远是最新的,当某些原因redis里查不到时查数据库然后保存到reids里。
这种方案有谁实现了吗?

黄舟黄舟2765 Il y a quelques jours471

répondre à tous(6)je répondrai

  • 高洛峰

    高洛峰2017-04-18 09:15:22

    Pourquoi devez-vous utiliser SQL comme clé... et chaque fois que vous videz la base de données, vous pouvez changer d'avis. S'il y a une table avec des produits et que la clé primaire est id, vous pouvez créer un cache avec le. détail clé : identifiant du produit, et mettez ceci L'enregistrement de ligne est utilisé comme valeur et le type de données est un hachage ou une chaîne. Parfois, lorsque votre entreprise a besoin de vérifier certaines informations sur un produit en fonction de la clé primaire, vous accédez d'abord à Redis pour voir s'il existe un cache de détails : clé primaire. Parfois, vous récupérez simplement le cache directement s'il n'y a pas d'accès. le cache, vous vérifiez la base de données et enregistrez les résultats de la requête. De plus, lorsque l'enregistrement change, vous pouvez directement supprimer le cache ou mettre à jour le cache.
    Ceci n'est qu'un exemple très simple. Les types de données Redis sont très riches et peuvent être utilisés très facilement s'ils sont utilisés correctement. De plus, dans l'exemple ci-dessus, vous pouvez définir une période de validité pour chaque cache, par exemple une semaine, cela dépend de votre entreprise. De manière générale, les utilisateurs consultent rarement l'ancien contenu, donc une fois qu'il expire et que personne ne le parcourt, il ne sera pas reconstruit. Cela garantit que votre redis dispose toujours de données chaudes. Ce n’est pas seulement un tas de vieilles données. J’en ai marre de taper sur mon téléphone, s’il vous plaît, aimez-le si c’est utile

    .

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 09:15:22

    Le sens de la mise en cache est de stocker des données courantes, telles que le stockage des données fréquemment utilisées par la base de données dans Redis, afin que vous n'ayez pas à interroger la base de données à chaque fois.

    Le problème rencontré par l'affiche est de savoir comment garder les données dans le cache cohérentes avec les données de la base de données.
    Comme le 表如果有数据修改添加删除,flushDB() mentionné ci-dessus, ce n'est pas conseillé.

    Le fonctionnement des données mises en cache est en fait simplifié en lecture et écriture

    Lorsque votre application interroge Redis, si elle est introuvable, vous devez vérifier la base de données à ce moment-là et stocker les données trouvées dans Redis.
    Lorsque les données de la base de données sont modifiées, le 数据增删改对redis都有操作后再对数据库操作 mentionné ci-dessus n'est en fait pas conseillé. L'application doit d'abord modifier la base de données, puis mettre à jour Redis après succès. Que dois-je faire si je mets d'abord à jour Redis, mais que la mise à jour de la base de données échoue ? Redis ne stocke-t-il pas les données sales ?

    De plus, les données dans le cache peuvent définir un délai d'expiration (délai d'expiration). Après le délai d'expiration, vérifiez à nouveau la base de données et mettez à jour les données (même si les données n'ont pas changé du tout avant le délai d'expiration). , réduisez au moins la charge sur la base de données.

    En regardant l'objectif du thème, il existe un moyen d'utiliser Redis comme sauvegarde des données de base de données. Ce ne serait pas l'intérêt d'utiliser le cache Redis (vous devriez peut-être envisager une sauvegarde maître-esclave de la base de données).

    Quant à la solution que vous avez évoquée, en regardant la description du sujet, elle ne nécessite pas de solution (je pense que la configuration haute disponibilité est appelée une solution si l'on considère la cohérence des données, etc.).
    C'est en fait la logique du code, cela dépend de la façon dont le code est écrit.

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:15:22

    Spring a un plug-in Redis. Il est plus pratique d'utiliser les plug-ins ehcache et Spring pour les petits projets.

    répondre
    0
  • 迷茫

    迷茫2017-04-18 09:15:22

    Lorsque vous implémentez un système de mise en cache, vous devez considérer ces trois questions (la troisième question est facultative)

    1. Chargement en cache

    2. Invalidation du cache

    3. Mises à jour en cache (facultatif)

    Question 1 :

    Ce que vous devez faire pour charger le cache est très simple. Pour toute requête, interrogez d'abord le cache. S'il n'y a aucun résultat dans le cache, vérifiez la base de données.

    Question 2 :

    Pour invalider le cache, il suffit de penser à supprimer le cache lorsqu'une modification (mise à jour, suppression) est apportée à la base de données

    .
    Question 3 :

    Lorsque les données sont mises à jour, le cache ne sera pas invalidé et supprimé, mais le cache sera mis à jour. Cette opération facultative peut vous aider à obtenir que le cache soit toujours le plus récent.

    Concernant la question 3, il y a un autre problème. Ne mettez pas à jour le cache avant que la base de données n'ait été mise à jour avec succès. À ce moment, si votre cache n'est pas restauré, des données sales apparaîtront.

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:15:22

    mybatis-redis a une solution, vous pouvez vous référer à https://github.com/mybatis/redis-cache

    répondre
    0
  • 怪我咯

    怪我咯2017-04-18 09:15:22

    a implémenté @Cacheable et est utilisé dans les méthodes de couche service ou dao pour intercepter et accéder directement à redis pour obtenir des données.

    répondre
    0
  • Annulerrépondre