>  기사  >  Java  >  Java에서 StringRedisTemplate 및 RedisTemplate을 사용하는 방법은 무엇입니까?

Java에서 StringRedisTemplate 및 RedisTemplate을 사용하는 방법은 무엇입니까?

PHPz
PHPz앞으로
2023-04-23 09:34:061636검색

사용할 때는 maven 종속성 패키지 spring-boot-starter-data-redis를 사용한 다음 StringRedisTemplate 또는 RedisTemplate을 서비스에 삽입하면 됩니다.

Java에서 StringRedisTemplate 및 RedisTemplate을 사용하는 방법은 무엇입니까?

먼저 아래 그림과 같이 StringRedisTemplate은 RedisTemplate을 상속하므로 둘은 호환됩니다 Redis의 작업 방법은 비슷합니다

Java에서 StringRedisTemplate 및 RedisTemplate을 사용하는 방법은 무엇입니까?

둘 사이의 데이터는 공통적이지 않습니다. 즉, StringRedisTemplate은 StringRedisTemplate에서만 데이터를 관리할 수 있고 RedisTemplate은 RedisTemplate에서만 데이터를 관리할 수 있습니다.

사실 이들 간의 차이점은 주로 사용하는 직렬화 클래스에 있습니다.

  • RedisTemplate은 JdkSerializationRedisSerializer를 사용합니다. 데이터를 저장할 때 데이터는 먼저 바이트 배열로 직렬화된 다음 Redis 데이터베이스에 저장됩니다.

  • StringRedisTemplate은 StringRedisSerializer를 사용합니다

사용 시 주의 사항:

Redis 데이터베이스가 원래 문자열 데이터를 저장하거나 액세스하려는 데이터가 문자열 유형 데이터인 경우 StringRedisTemplate을 사용하면 됩니다.

그러나 데이터가 복잡한 개체 유형이고 가져올 때 데이터 변환을 원하지 않고 Redis에서 직접 개체를 가져올 수 있는 경우 RedisTemplate을 사용하는 것이 더 나은 선택입니다.

RedisTemplate 사용 시 자주 묻는 질문:

redisTemplate에서 접근하는 데이터는 모두 바이트 배열입니다. Redis에 저장된 데이터가 바이트 배열이 아닌 읽을 수 있는 형식인 경우 redisTemplate을 사용하여 값을 가져올 때 내보낸 데이터를 가져올 수 없으며 가져온 값은 null입니다. StringRedisTemplate을 사용해 볼 수 있습니다.

StringRedisTemplate의 Redis 운영 방식:

StringRedisTemplate.opsForValue().* //操作String字符串类型
StringRedisTemplate.delete(key/collection) //根据key/keys删除
StringRedisTemplate.opsForList().*  //操作List类型
StringRedisTemplate.opsForHash().*  //操作Hash类型
StringRedisTemplate.opsForSet().*  //操作set类型
StringRedisTemplate.opsForZSet().*  //操作有序set

인터페이스 구현 코드는 다음과 같습니다.

package com.cloud.spring.demo.service.impl;

import com.cloud.spring.demo.service.RedisTestService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Package: com.cloud.spring.demo.service.impl
 * @ClassName: RedisTestServiceImpl
 * @Author: zhougaoyang
 * @Description: redis服务测试接口实现
 * @Date: 2019/4/27 10:16
 * @Version: 1.0
 */
@Service
public class RedisTestServiceImpl implements RedisTestService {
    private static final Logger log = LoggerFactory.getLogger(RedisTestService.class);

    @Autowired
    private StringRedisTemplate redisTemplate;


    /**
     * @Description 获取String类型的value
     * @param name
     * @return
     */
    @Override
    public String findName(String name) {
        if (name==null){
            log.error("===============key为null======================================================");
        }
        return redisTemplate.opsForValue().get(name);
    }

    /**
     * @Description 添加String类型的key-value
     * @param name
     * @param value
     * @return
     */
    @Override
    public String setNameValue(String name, String value) {
        log.info("==================添加String类型的key-value========================================");
        redisTemplate.opsForValue().set(name,value);
        return name;
    }

    /**
     * @Description 根据key删除redis的数据
     * @param name
     * @return
     */
    @Override
    public String delNameValue(String name) {
        redisTemplate.delete(name);
        return name;
    }

    /**
     * @Description 根据key获取list类型的value(范围)
     * @param key
     * @return
     */
    @Override
    public List<String> findList(String key,int start,int end) {
        log.info("=====================按照范围查询redis中List类型=======================================");
        return redisTemplate.opsForList().range(key,start,end);
    }

    /**
     * @Description 插入多条数据
     * @param key
     * @param value
     * @return
     */
    @Override
    public long setList(String key, List<String> value) {
        log.info("=========================redis List type insert ======================================");
        return redisTemplate.opsForList().rightPushAll(key, value);
    }

    /**
     * @Description 获取list最新记录(右侧)
     * @param key
     * @return
     */
    @Override
    public String findLatest(String key) {
        log.info("=============================rides List latest rigth==================================");
        return redisTemplate.opsForList().index(key,redisTemplate.opsForList().size(key)-1);
    }

    /**
     * @Description 查询hash
     * @param key
     * @return
     */
    @Override
    public Map<Object, Object> findHash(String key) {
        log.info("===================================redis hash =========================================");
        return redisTemplate.opsForHash().entries(key);
    }

    /**
     * @Description 查询hash中所有的key
     * @param key
     * @return
     */
    @Override
    public Set<Object> findHashKeys(String key) {
        log.info("====================================== All keys of hash ===============================");
        return redisTemplate.opsForHash().keys(key);
    }

    /**
     * @Description 查询hash中所有的value
     * @param key
     * @return
     */
    @Override
    public List<Object> findHashValues(String key) {
        log.info("===================================== All values of hash ==============================");
        return redisTemplate.opsForHash().values(key);
    }

    /**
     * @Desscription 插入hash数据
     * @param key
     * @param map
     * @return
     */
    @Override
    public long insertHash(String key, Map<String, Object> map) {
        log.info("====================================== insert hashes into redis ========================");
        redisTemplate.opsForHash().putAll(key,map);
        return map.size();
    }
}

위 내용은 Java에서 StringRedisTemplate 및 RedisTemplate을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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