首頁 >Java >java教程 >Java中如何使用StringRedisTemplate和RedisTemplate?

Java中如何使用StringRedisTemplate和RedisTemplate?

PHPz
PHPz轉載
2023-04-23 09:34:061711瀏覽

使用時只需使用maven依賴套件spring-boot-starter-data-redis即可,然後在service中註入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刪除