Maison > base de données > Redis > le corps du texte

Comment implémenter un script universel d'ajout, de suppression, de modification et de requête Redis

王林
Libérer: 2023-05-27 08:28:35
avant
1378 Les gens l'ont consulté

1. Pensez aux codes en double ?

  S'il s'agit simplement d'un simple ajout, suppression, modification et requête, alors il vous suffit de me dire quelle classe doit être sérialisée et désérialisée, et de me dire quel est le préfixe de la clé, n'est-ce pas suffisant ? Quant au délai d'expiration, nous pouvons l'ignorer cette fois. Si nous devons ajouter le délai d'expiration, ce n'est pas difficile. Ensuite, nous y réfléchissons un moment et utilisons des génériques en Java pour obtenir la classe de base suivante :

.

2. Classe de service de base

public class BasicDataRedisService<T> {

    /**
     * Redis key prefix String
     * Redis中的key前缀
     */
    private String prefixString;

    private Class<T> targetClass;

    @Autowired
    private StringRedisTemplate redisTemplate;

    public BasicDataRedisService(String prefixString, Class targetClass) {
        this.prefixString = prefixString;
        this.targetClass = targetClass;
    }

    // -------------------------以下为内部使用---------------------------------

    protected String generateKey(String id) {
        return prefixString + "id:" + id;
    }

    protected T getByKey(String key) {
        T result = ValueRedisUtil.getRedisObject(redisTemplate, key, targetClass);
        return result;
    }

    protected boolean setByKey(String key, Object object) {
        return ValueRedisUtil.setRedisObject(redisTemplate, key, object);
    }

    protected boolean deleteByKey(String key) {
        return ValueRedisUtil.delRedis(redisTemplate, key);
    }

    // -------------------------以下对外提供---------------------------------


    /**
     * 根据id获取
     *
     * @param id
     * @return
     */
    public T getById(String id) {
        String key = generateKey(id);
        return getByKey(key);
    }

    /**
     * 根据id刷新
     *
     * @param data
     * @param id
     * @return
     */
    public boolean setByModel(Object data, String id) {
        String key = generateKey(id);
        return setByKey(key, data);
    }

    /**
     * 根据id删除
     *
     * @param id
     * @return
     */
    public boolean deleteById(String id) {
        String key = generateKey(id);
        return deleteByKey(key);
    }

}
Copier après la connexion

3. Personnaliser une classe de service de requête

  Supposons que nous voulions interroger les utilisateurs, il nous suffit alors d'écrire comme ceci :

@Service
public class UserRedisServiceImpl extends BasicDataRedisService<User> {

    private static String PREFIX = "henbao:user:";

    public UserRedisServiceImpl() {
        super(PREFIX, User.class);
    }
}
Copier après la connexion

4. Pensez aux inconvénients d'écrire comme ça

  Bien que écrire de cette façon enregistre le code Avec le volume, la commodité que vous souhaitez peut être obtenue, mais j'ai toujours l'impression que quelque chose ne va pas et l'opération semble être un peu plus excitante. Garçon, si vous pouvez avoir une telle idée, alors félicitations, vous avez une recherche plus poussée du code. Nous avons maintenant écrit la classe deux fois et écrit des constantes pour montrer quel est le préfixe dans Redis. Lorsque nous utilisons Spring, nous n'indiquons généralement pas ces choses au framework sous-jacent. Nous utilisons généralement des annotations, n'est-ce pas ? C'est pourquoi Redis Repositories entre en scène.

5. Chacun a ses avantages et ses inconvénients

Bien que nous soyons très heureux d'écrire ceci, certains développeurs espèrent que le contenu stocké dans Redis est complètement cohérent avec le modèle dans la couche base de données, et après avoir modifié la structure de la table de la base de données, une vague de génération inverse sera générée... Alors s'il vous plaît, développez-le vous-même et soumettez un code plus puissant pour Spring ! À l'heure actuelle, il est recommandé d'utiliser cette méthode si vous disposez d'un modèle de couche Redis distinct. Bien sûr, elle présente tous les problèmes qui devraient survenir lors de l'analyse des annotations.

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal