pipe.hset(uuid,“ name”,“ Archie”);
这是我如何使用hset的示例。还有大约10个其他属性(名称,年龄等)。
我正在尝试删除整个hset,例如删除uuid,因此它不再是键(键是正确的术语吗?)。
我尝试通过管道分别删除每个元素;
for (String s : profileData) {
pipe.hdel("profile@" + uuid.toString(), s);
}
但是首先,它具有时间复杂度O(n),因此效率更高;其次,由于密钥仍然存在,它实际上对我不起作用(认为这可能是我自己的编码错误)。>
我看到了要求使用hdelall函数的问题,而且我知道一个不存在。
我也尝试使用,
pipe.del(uuid);
但是这什么也没做-显然我使用不正确。我以为它只会删除整个hset,但不是,必须用来删除单个值?我不确定。
所以我的问题归结为: 使用Jedis ,如何有效地从Redis中删除整个hset。
谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
我不确定您的代码是什么样子,但是我进行了此快速测试,并且按预期对我有用。
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;
import java.time.Duration;
import java.util.Set;
public class TestRedisDelete {
public static void main(String[] args) {
TestRedisDelete redis = new TestRedisDelete();
Pipeline p = redis.jedisPool.getResource().pipelined();
p.hset("h1", "f", "v");
p.hset("h2", "f", "v");
p.hset("h3", "f", "v");
p.del("h1");
p.sync();
Set<String> keys = redis.jedisPool.getResource().keys("*");
System.out.println(keys);
}
final JedisPoolConfig poolConfig = buildPoolConfig();
JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379);
private JedisPoolConfig buildPoolConfig() {
final JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(10);
poolConfig.setMaxIdle(10);
poolConfig.setMinIdle(4);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setMinEvictableIdleTimeMillis(Duration.ofSeconds(60).toMillis());
poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofSeconds(30).toMillis());
poolConfig.setNumTestsPerEvictionRun(3);
poolConfig.setBlockWhenExhausted(true);
return poolConfig;
}
}
输出:[h2,h3]