ホームページ  >  記事  >  データベース  >  ユニバーサル Redis の追加、削除、変更、クエリ スクリプトを実装する方法

ユニバーサル Redis の追加、削除、変更、クエリ スクリプトを実装する方法

王林
王林転載
2023-05-27 08:28:351335ブラウズ

1. どのような重複コードがあるか考えてみてください。

単純な追加、削除、変更、クエリの場合は、どのクラスをシリアル化および逆シリアル化する必要があるのか​​、キーのプレフィックスが何なのかを教えていただくだけで済みますね。それで十分ですか?有効期限については、今回は無視して問題ありません。有効期限を追加する必要がある場合は、それほど難しいことではありません。その後、しばらく考えて、Java のジェネリックスを使用して、次の基本クラスを取得します。

##2. 基本サービス クラス

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. クエリ サービス クラスのカスタマイズ

# ユーザーにクエリを実行すると仮定すると、次のように記述するだけです:

@Service
public class UserRedisServiceImpl extends BasicDataRedisService<User> {

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

    public UserRedisServiceImpl() {
        super(PREFIX, User.class);
    }
}
4. このように書くことのデメリットを考える

このように書くとコード量が減り、望む利便性が実現できるのですが、常に何かがおかしいと感じ、動作がおかしいように感じます。もう少し刺激的になってください。もしあなたがそのようなアイデアを思いつくことができたら、おめでとうございます。あなたはさらにコードを追求していることになります。これまでにクラスを 2 回作成し、Redis のプレフィックスが何であるかを示す定数を作成しました。 Spring を使用するときは、通常、基礎となるフレームワークにこれらのことを伝えず、アノテーションを使用します。したがって、

Redis リポジトリがステージに登場します。

5. それぞれには長所と短所があります

私たちはこれを書くことができてとてもうれしいですが、一部の開発者は、redis に保存されているコンテンツが DB 層のモデルと完全に一致していることを望んでいます。データベースのテーブル構造を変更した後も、それは同じままです。逆生成カバレッジの波が来るでしょう...その後、ご自身で開発して、Spring 用のより強力なコードを提出してください。現時点では、別の Redis レイヤー モデルがある場合は、この方法を使用することをお勧めします。もちろん、この方法には、アノテーション スキャンで発生するすべての問題があります。対処するときは辛抱強く待ってください。

以上がユニバーサル Redis の追加、削除、変更、クエリ スクリプトを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。