StringRedisTemplate和RedisTemplate的區別及使用方法

在學習SpringCloud的過程當中,總須要記錄一下學習的過程,今天記錄一下StringRedisTemplate和RedisTemplate的區別及使用方法,使用時只需使用maven依賴包spring-boot-starter-data-redis便可,而後在service中注入StringRedisTemplate或者RedisTemplate便可java

 

首先以下圖所示StringRedisTemplate繼承了RedisTemplate,因此二者對Redis的操做方法具備相同之處redis

 

  • 二者的數據是不共通的;也就是說StringRedisTemplate只能管理StringRedisTemplate裏面的數據,RedisTemplate只能管理RedisTemplate中的數據。spring

  • 其實他們二者之間的區別主要在於他們使用的序列化類:

    RedisTemplate使用的是JdkSerializationRedisSerializer    存入數據會將數據先序列化成字節數組而後在存入Redis數據庫。 數據庫

      StringRedisTemplate使用的是StringRedisSerializer數組

  • 使用時注意事項:
   當你的redis數據庫裏面原本存的是字符串數據或者你要存取的數據就是字符串類型數據的時候,那麼你就使用StringRedisTemplate便可。
   可是若是你的數據是複雜的對象類型,而取出的時候又不想作任何的數據轉換,直接從Redis裏面取出一個對象,那麼使用RedisTemplate是更好的選擇。
  • RedisTemplate使用時常見問題:

    redisTemplate 中存取數據都是字節數組。當redis中存入的數據是可讀形式而非字節數組時,使用redisTemplate取值的時候會沒法獲取導出數據,得到的值爲null。可使用 StringRedisTemplate 試試。maven

StringRedisTemplate對於Redis的操做方法:ide

1 StringRedisTemplate.opsForValue().* //操做String字符串類型
2 StringRedisTemplate.delete(key/collection) //根據key/keys刪除
3
StringRedisTemplate.opsForList().* //操做List類型
4 StringRedisTemplate.opsForHash().* //操做Hash類型
5 StringRedisTemplate.opsForSet().*  //操做set類型
6 StringRedisTemplate.opsForZSet().*  //操做有序set

  

 接口實現代碼以下:spring-boot

  

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();
    }
}
相關文章
相關標籤/搜索