Maison  >  Article  >  base de données  >  Comment implémenter un script universel d'ajout, de suppression, de modification et de requête Redis

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

王林
王林avant
2023-05-27 08:28:351332parcourir

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);
    }

}

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);
    }
}

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!

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