>데이터 베이스 >Redis >범용 Redis 추가, 삭제, 수정 및 쿼리 스크립트를 구현하는 방법

범용 Redis 추가, 삭제, 수정 및 쿼리 스크립트를 구현하는 방법

王林
王林앞으로
2023-05-27 08:28:351387검색

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. 이렇게 작성할 때의 단점에 대해 생각해 보세요

  그래도 이렇게 작성하면 코드가 절약되고 볼륨이 있으면 원하는 편리성을 얻을 수 있지만 항상 뭔가 잘못된 것 같은 느낌이 들고 조작이 좀 더 흥미진진해지는 것 같습니다. 이런, 당신이 그런 아이디어를 가질 수 있다면 축하합니다. 당신은 더 높은 수준의 코드를 추구하고 있습니다. 이제 클래스를 두 번 작성했으며 Redis의 접두사가 무엇인지 보여주기 위해 상수를 작성했습니다. Spring을 사용할 때 우리는 일반적으로 기본 프레임워크에 이러한 사항을 알리지 않습니다. 그리하여

무대에 오른다. Redis Repositories

5. 각각 장단점이 있습니다

이 글을 작성하게 되어 매우 기쁘지만 일부 개발자는 Redis에 저장된 콘텐츠가 데이터베이스 테이블 구조를 수정한 후 db 계층의 모델과 완전히 일치하기를 바랍니다. , 역세대 커버리지의 물결이 일어날 것입니다... 그렇다면 직접 개발하여 Spring용으로 더욱 강력한 코드를 제출해 주세요! 현재 별도의 Redis 레이어 모델이 있는 경우 이 방법을 사용하는 것이 좋습니다. 물론 주석 스캔에서 직면해야 하는 모든 문제가 있으므로 처리할 때 인내심을 가지십시오.

위 내용은 범용 Redis 추가, 삭제, 수정 및 쿼리 스크립트를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제