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

Comment utiliser StringRedisTemplate et RedisTemplate en Java ?

PHPz
Libérer: 2023-04-23 09:34:06
avant
1772 Les gens l'ont consulté

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
Copier après la connexion

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();
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal