Maison  >  Article  >  Java  >  Comment utiliser StringRedisTemplate et RedisTemplate en Java ?

Comment utiliser StringRedisTemplate et RedisTemplate en Java ?

PHPz
PHPzavant
2023-04-23 09:34:061637parcourir

Lors de son utilisation, utilisez simplement le package de dépendances maven spring-boot-starter-data-redis, puis injectez StringRedisTemplate ou RedisTemplate dans le service

Comment utiliser StringRedisTemplate et RedisTemplate en Java ?

Tout d'abord, comme le montre la figure ci-dessous, StringRedisTemplate hérite de RedisTemplate, donc le deux sont compatibles Les méthodes de fonctionnement de Redis sont similaires

Comment utiliser StringRedisTemplate et RedisTemplate en Java ?

Les données entre les deux ne sont pas communes, c'est-à-dire que StringRedisTemplate ne peut gérer les données que dans StringRedisTemplate et RedisTemplate ne peut gérer les données que dans RedisTemplate.

En fait, la différence entre eux réside principalement dans la classe de sérialisation qu'ils utilisent :

  • RedisTemplate utilise JdkSerializationRedisSerializer Lors du stockage des données, les données seront d'abord sérialisées dans un tableau d'octets, puis stockées dans la base de données Redis.

  • StringRedisTemplate utilise StringRedisSerializer

Remarques lors de l'utilisation :

Lorsque votre base de données Redis stocke à l'origine des données de chaîne ou que les données auxquelles vous souhaitez accéder sont des données de type chaîne, utilisez simplement StringRedisTemplate.

Mais si vos données sont un type d'objet complexe et que vous ne souhaitez effectuer aucune conversion de données lors de leur suppression et que vous pouvez extraire un objet directement de Redis, alors utiliser RedisTemplate est un meilleur choix.

Questions fréquemment posées lors de l'utilisation de RedisTemplate :

Les données accessibles dans redisTemplate sont toutes des tableaux d'octets. Lorsque les données stockées dans redis sont sous une forme lisible au lieu d'un tableau d'octets, lors de l'utilisation de redisTemplate pour obtenir la valeur, les données exportées ne peuvent pas être obtenues et la valeur obtenue est nulle. Vous pouvez essayer d'utiliser StringRedisTemplate.

Méthode de fonctionnement de StringRedisTemplate pour Redis :

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

Le code d'implémentation de l'interface est le suivant :

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();
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer