首頁  >  文章  >  資料庫  >  如何實現通用的Redis增刪改查腳本

如何實現通用的Redis增刪改查腳本

王林
王林轉載
2023-05-27 08:28:351332瀏覽

1.思考有哪些重複程式碼?

  如果只是為了簡單的增刪改查,那麼只需要告訴我是哪個類別要進行序列化反序列化,告訴我key的前綴是什麼,不就行了嘛?至於說過期時間,咱們這次可以先不考慮,如果需要加上過期時間,也不是一件困難的事情,那麼我們稍作思考,使用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.思考這樣寫的弊端

  雖然這樣寫節省了代碼量,想要實現的便捷也能夠實現,但是總覺得哪裡有點不對勁,操作似乎還可以再騷一點。少年,如果你能有這樣的想法,那麼恭喜你,你對程式碼有更高的追求。我們現在寫了兩次類,寫常數來表名Redis中的前綴是什麼。我們在使用Spring的時候通常不是這樣來告訴底層框架這些東西的,我們通常是使用註解吧?故,Redis Repositories 就登場了。

5.各有利弊

  雖然這樣寫我們很開心,但是有一些開發人員希望redis中儲存的內容與db層的Model完全一致,且修改資料庫表結構後還會逆向產生覆蓋一波…那麼請你自己再開發一下,為Spring提交更加強大的程式碼吧!目前更建議單獨有redis層model的使用此方式,當然了,註解掃描該有的問題它都有,大家處理的時候保持耐心即可。

以上是如何實現通用的Redis增刪改查腳本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除