ホームページ  >  記事  >  Java  >  Java で StringRedisTemplate と RedisTemplate を使用する方法は?

Java で StringRedisTemplate と RedisTemplate を使用する方法は?

PHPz
PHPz転載
2023-04-23 09:34:061686ブラウズ

これを使用する場合は、maven 依存関係パッケージ spring-boot-starter-data-redis を使用してから、StringRedisTemplate または RedisTemplate をサービスに挿入するだけです。図に示すように、StringRedisTemplate は RedisTemplate を継承しているため、Redis を操作する 2 つの方法は似ています。つまり、StringRedisTemplate は StringRedisTemplate 内のデータのみを管理でき、RedisTemplate は RedisTemplate 内のデータのみを管理できます。

実際、これらの違いは主に使用するシリアル化クラスにあります: Java で StringRedisTemplate と RedisTemplate を使用する方法は?

RedisTemplate は JdkSerializationRedisSerializer を使用します。データを保存するとき、データは最初にワードにシリアル化されます。セクション配列は Redis データベースに保存されます。

Java で StringRedisTemplate と RedisTemplate を使用する方法は?

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 中国語 Web サイトの他の関連記事を参照してください。

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