1.一些概念
1-StringRedisTemplate继承RedisTemplate;
2-两者数据不共通,StringRedisTemplate只管StringRedisTemplate里面的数据,RedisTemplate只管RedisTemplate中的数据;
3-两者序列化类不同,RedisTemplate使用的是JdkSerializationRedisSerializer,存入数据会将数据先序列化成字节数组然后在存入Redis数据库;StringRedisTemplate使用的是StringRedisSerializer。
2.使用
1. opsForSet
@Autowired
private StringRedisTemplate redisTemplate;
//向变量中批量添加值。
redisTemplate.opsForSet().add(Constant.DEVICE_OPT_PREFIX, deviceId);
redisTemplate.expire(Constant.DEVICE_OPT_PREFIX, 5, TimeUnit.MINUTES);
//获取变量中的值
Set<String> deviceIds = redisTemplate.opsForSet().members(Constant.DEVICE_OPT_PREFIX);
2. opsForValue
@Autowired
private StringRedisTemplate redisTemplate;
Set<String> deviceIdOptKeys = redisTemplate.keys(Constant.DEVICE_OPT_PREFIX.concat("*"));
Set<String> failDeviceIds = new HashSet<>();
if (ObjectUtils.isNotEmpty(deviceIdOptKeys)){
failDeviceIds = deviceIdOptKeys.stream().map(x->x.substring(Constant.DEVICE_OPT_PREFIX.length())).collect(Collectors.toSet());
}
if (failDeviceIds.contains(deviceId)){
redisTemplate.opsForValue().append(Constant.DEVICE_OPT_PREFIX + deviceId,"#");
} else {
redisTemplate.opsForValue().set(Constant.DEVICE_OPT_PREFIX + deviceId,"#",30,TimeUnit.MINUTES);
}
redisTemplate.delete(Constant.DEVICE_OPT_PREFIX + deviceId);
// 设置键、值和过期时间
redisTemplate.opsForValue().set(Constant.DEVICE_OPT_PREFIX