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 }