我正在尝试删除redis密钥但由于某种原因它不是删除但也没有抛出异常。这是我要删除的代码:
import com.example.service.CustomerService;
import com.example.model.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.math.BigInteger;
import java.util.*;
@Service
public class RedisCustomerService implements CustomerService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private String uniqueIdKey = "customerId";
private BigInteger uniqueId() {
long uniqueId = this.redisTemplate.opsForValue().increment(uniqueIdKey, 1);
return BigInteger.valueOf(uniqueId);
}
private String lastNameKey(BigInteger id) {
return "customer:ln:" + id;
}
private String firstNameKey(BigInteger id) {
return "customer:fn:" + id;
}
@Override
public void deleteCustomer(BigInteger id) {
redisTemplate.opsForValue().getOperations().delete(String.valueOf(id));
}
}
答案 0 :(得分:24)
ValueOperations没有删除方法。所以以下内容不起作用:
redisTemplate.opsForValue().delete(key);
尝试
redisTemplate.delete(key);
答案 1 :(得分:1)
使用ValueOperations
进行删除的另一种方法是设置一个将立即失效的空值。 Redis会自行处理搬迁。
例如,您可以设置一个像这样的值:
valueOperations.set("key", "value");
要删除时,您可以执行以下操作:
valueOperations.set("key", "", 1, TimeUnit.MILLISECONDS);
两个操作中的键必须相同
答案 2 :(得分:0)
试试这个:
public void deleteCustomer(BigInteger id) {
redisTemplate.execute(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection redisConnection) throws DataAccessException {
redisConnection.del(redisTemplate.getStringSerializer().serialize(String.valueOf(id)));
return null;
}
});
}
答案 3 :(得分:0)
在春季启动2之前,如果在构建resttemplate时未指定序列化程序,则在redis上,您会看到如下所示的键:
“ xac \ xed \ x00 \ x05t \ x008mx.company.support.catalog.dao.keys”
但是当尝试使用key
删除密钥时,密钥不会被擦除
一种简单的方法是以字节为单位获取密钥,然后继续删除它。
班上的例子:
redisTemplate.delete(key)
答案 4 :(得分:-1)
没有使用getOperation:
@Override
public void deleteCustomer(BigInteger id) {
redisTemplate.opsForValue().delete(String.valueOf(id));
}