zoukankan      html  css  js  c++  java
  • StringRedisTemplate和RedisTemplate的区别及使用方法

    本文转自:https://www.cnblogs.com/MyYJ/p/10778874.html

    在学习SpringCloud的过程中,总需要记录一下学习的过程,今天记录一下StringRedisTemplate和RedisTemplate的区别及使用方法,使用时只需使用maven依赖包spring-boot-starter-data-redis即可,然后在service中注入StringRedisTemplate或者RedisTemplate即可

    首先如下图所示StringRedisTemplate继承了RedisTemplate,所以两者对Redis的操作方法具有相同之处

    • 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。

    • 其实他们两者之间的区别主要在于他们使用的序列化类:

        RedisTemplate使用的是JdkSerializationRedisSerializer    存入数据会将数据先序列化成字节数组然后在存入Redis数据库。 

          StringRedisTemplate使用的是StringRedisSerializer

    • 使用时注意事项:
       当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。
       但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。
    • RedisTemplate使用时常见问题:

        redisTemplate 中存取数据都是字节数组。当redis中存入的数据是可读形式而非字节数组时,使用redisTemplate取值的时候会无法获取导出数据,获得的值为null。可以使用 StringRedisTemplate 试试。

    StringRedisTemplate对于Redis的操作方法:

    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

      

     接口实现代码如下:

      1 package com.cloud.spring.demo.service.impl;
      2 
      3 import com.cloud.spring.demo.service.RedisTestService;
      4 import org.slf4j.Logger;
      5 import org.slf4j.LoggerFactory;
      6 import org.springframework.beans.factory.annotation.Autowired;
      7 import org.springframework.data.redis.core.StringRedisTemplate;
      8 import org.springframework.stereotype.Service;
      9 
     10 import java.util.List;
     11 import java.util.Map;
     12 import java.util.Set;
     13 
     14 /**
     15  * @Package: com.cloud.spring.demo.service.impl
     16  * @ClassName: RedisTestServiceImpl
     17  * @Author: zhougaoyang
     18  * @Description: redis服务测试接口实现
     19  * @Date: 2019/4/27 10:16
     20  * @Version: 1.0
     21  */
     22 @Service
     23 public class RedisTestServiceImpl implements RedisTestService {
     24     private static final Logger log = LoggerFactory.getLogger(RedisTestService.class);
     25 
     26     @Autowired
     27     private StringRedisTemplate redisTemplate;
     28 
     29 
     30     /**
     31      * @Description 获取String类型的value
     32      * @param name
     33      * @return
     34      */
     35     @Override
     36     public String findName(String name) {
     37         if (name==null){
     38             log.error("===============key为null======================================================");
     39         }
     40         return redisTemplate.opsForValue().get(name);
     41     }
     42 
     43     /**
     44      * @Description 添加String类型的key-value
     45      * @param name
     46      * @param value
     47      * @return
     48      */
     49     @Override
     50     public String setNameValue(String name, String value) {
     51         log.info("==================添加String类型的key-value========================================");
     52         redisTemplate.opsForValue().set(name,value);
     53         return name;
     54     }
     55 
     56     /**
     57      * @Description 根据key删除redis的数据
     58      * @param name
     59      * @return
     60      */
     61     @Override
     62     public String delNameValue(String name) {
     63         redisTemplate.delete(name);
     64         return name;
     65     }
     66 
     67     /**
     68      * @Description 根据key获取list类型的value(范围)
     69      * @param key
     70      * @return
     71      */
     72     @Override
     73     public List<String> findList(String key,int start,int end) {
     74         log.info("=====================按照范围查询redis中List类型=======================================");
     75         return redisTemplate.opsForList().range(key,start,end);
     76     }
     77 
     78     /**
     79      * @Description 插入多条数据
     80      * @param key
     81      * @param value
     82      * @return
     83      */
     84     @Override
     85     public long setList(String key, List<String> value) {
     86         log.info("=========================redis List type insert ======================================");
     87         return redisTemplate.opsForList().rightPushAll(key, value);
     88     }
     89 
     90     /**
     91      * @Description 获取list最新记录(右侧)
     92      * @param key
     93      * @return
     94      */
     95     @Override
     96     public String findLatest(String key) {
     97         log.info("=============================rides List latest rigth==================================");
     98         return redisTemplate.opsForList().index(key,redisTemplate.opsForList().size(key)-1);
     99     }
    100 
    101     /**
    102      * @Description 查询hash
    103      * @param key
    104      * @return
    105      */
    106     @Override
    107     public Map<Object, Object> findHash(String key) {
    108         log.info("===================================redis hash =========================================");
    109         return redisTemplate.opsForHash().entries(key);
    110     }
    111 
    112     /**
    113      * @Description 查询hash中所有的key
    114      * @param key
    115      * @return
    116      */
    117     @Override
    118     public Set<Object> findHashKeys(String key) {
    119         log.info("====================================== All keys of hash ===============================");
    120         return redisTemplate.opsForHash().keys(key);
    121     }
    122 
    123     /**
    124      * @Description 查询hash中所有的value
    125      * @param key
    126      * @return
    127      */
    128     @Override
    129     public List<Object> findHashValues(String key) {
    130         log.info("===================================== All values of hash ==============================");
    131         return redisTemplate.opsForHash().values(key);
    132     }
    133 
    134     /**
    135      * @Desscription 插入hash数据
    136      * @param key
    137      * @param map
    138      * @return
    139      */
    140     @Override
    141     public long insertHash(String key, Map<String, Object> map) {
    142         log.info("====================================== insert hashes into redis ========================");
    143         redisTemplate.opsForHash().putAll(key,map);
    144         return map.size();
    145     }
    146 }
  • 相关阅读:
    Java中的泛型
    Java中List、Collections实现梭哈游戏
    Java中HashMap案例
    Java中ArrayDeque,栈与队列
    Java中List的使用
    学会使用JDK API
    Java中的数学运算BigDecimal
    在清华听演讲语录
    Java面向对象深度
    类变量、实参、形参、方法参数、代码块参数
  • 原文地址:https://www.cnblogs.com/xuqing0422/p/13461281.html
Copyright © 2011-2022 走看看