二者的关系是StringRedisTemplate继承RedisTemplate。java
二者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。redis
RedisTemplate使用的是JdkSerializationRedisSerializer 存入数据会将数据先序列化成字节数组而后在存入Redis数据库。 spring
StringRedisTemplate使用的是StringRedisSerializer数据库
redisTemplate 中存取数据都是字节数组。当redis中存入的数据是可读形式而非字节数组时,使用redisTemplate取值的时候会没法获取导出数据,得到的值为null。能够使用 StringRedisTemplate 试试。数组
redisTemplate.opsForValue(); //操做字符串 redisTemplate.opsForHash(); //操做hash redisTemplate.opsForList(); //操做list redisTemplate.opsForSet(); //操做set redisTemplate.opsForZSet(); //操做有序set
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间 stringRedisTemplate.boundValueOps("test").increment(-1);//val作-1操做 stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val stringRedisTemplate.boundValueOps("test").increment(1);//val +1 stringRedisTemplate.getExpire("test")//根据key获取过时时间 stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过时时间并换算成指定单位 stringRedisTemplate.delete("test");//根据key删除缓存 stringRedisTemplate.hasKey("546545");//检查key是否存在,返回boolean值 stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合 stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过时时间 stringRedisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据 stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合
springboot中使用注解@Autowired 便可缓存
@Autowired public StringRedisTemplate stringRedisTemplate;
@RestController @RequestMapping("/user") public class UserResource { private static final Logger log = LoggerFactory.getLogger(UserResource.class); @Autowired private UserService userService; @Autowired public StringRedisTemplate stringRedisTemplate; @RequestMapping("/num") public String countNum() { String userNum = stringRedisTemplate.opsForValue().get("userNum"); if(StringUtils.isNull(userNum)){ stringRedisTemplate.opsForValue().set("userNum", userService.countNum().toString()); } return userNum; } }