将数组或值列表保存到 Redis 缓存
Save Array or List of values to Redis cache
我正在尝试使用 Redis 云并使用以下代码推送字符串值数组:
import com.lambdaworks.redis.RedisClient;
import com.lambdaworks.redis.RedisURI;
import com.lambdaworks.redis.api.StatefulRedisConnection;
import com.lambdaworks.redis.api.sync.RedisCommands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class WriteToRedis {
private static final Logger logger = LoggerFactory.getLogger(ExchangeCurrencyPairScenario.class);
public static void main(String[] args) throws JsonProcessingException {
RedisClient redisClient = new RedisClient(
RedisURI.create("redis://****@cloud.redislabs.com:15162"));
StatefulRedisConnection<String, String> connection = redisClient.connect();
System.out.println("Connected to Redis");
RedisCommands<String, String> syncCommands = connection.sync();
syncCommands.rpush("key" , new String[]{"Volvo", "BMW", "Ford", "Mazda"});
connection.close();
redisClient.shutdown();
}
但收到异常:
Exception in thread "main" com.lambdaworks.redis.RedisCommandExecutionException: WRONGTYPE Operation against a key holding the wrong kind of value
at com.lambdaworks.redis.LettuceFutures.await(LettuceFutures.java:127)
at com.lambdaworks.redis.LettuceFutures.awaitOrCancel(LettuceFutures.java:96)
at com.lambdaworks.redis.FutureSyncInvocationHandler.handleInvocation(FutureSyncInvocationHandler.java:61)
at com.lambdaworks.redis.internal.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:80)
at com.sun.proxy.$Proxy0.rpush(Unknown Source)
at com.reactive.api.redis.WriteToRedis.main(WriteToRedis.java:39)
我可以毫无问题地保存字符串值并连接到 Redis 云缓存。但似乎我没有正确配置与“键”关联的值的格式?如何使用 Java?
将值的数组(或列表)正确保存到 Redis 缓存
Redis 由 data types.
操作
在您的代码中使用 rpush
意味着您正在尝试使用 RPUSH command which is part of List 数据类型。
您正在尝试对名为 key
的键进行操作并出现以下错误:
WRONGTYPE Operation against a key holding the wrong kind of value
这意味着你的Redis instance/DB已经包含了key
键中的数据,并且现有数据的数据类型不是List。
如果你想知道一个键包含的数据的数据类型,你可以使用TYPE命令。例如。检查 key
键:
syncCommands.type("key");
您可以使用DEL 命令删除该数据。例如
syncCommands.del("key");
我正在尝试使用 Redis 云并使用以下代码推送字符串值数组:
import com.lambdaworks.redis.RedisClient;
import com.lambdaworks.redis.RedisURI;
import com.lambdaworks.redis.api.StatefulRedisConnection;
import com.lambdaworks.redis.api.sync.RedisCommands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class WriteToRedis {
private static final Logger logger = LoggerFactory.getLogger(ExchangeCurrencyPairScenario.class);
public static void main(String[] args) throws JsonProcessingException {
RedisClient redisClient = new RedisClient(
RedisURI.create("redis://****@cloud.redislabs.com:15162"));
StatefulRedisConnection<String, String> connection = redisClient.connect();
System.out.println("Connected to Redis");
RedisCommands<String, String> syncCommands = connection.sync();
syncCommands.rpush("key" , new String[]{"Volvo", "BMW", "Ford", "Mazda"});
connection.close();
redisClient.shutdown();
}
但收到异常:
Exception in thread "main" com.lambdaworks.redis.RedisCommandExecutionException: WRONGTYPE Operation against a key holding the wrong kind of value
at com.lambdaworks.redis.LettuceFutures.await(LettuceFutures.java:127)
at com.lambdaworks.redis.LettuceFutures.awaitOrCancel(LettuceFutures.java:96)
at com.lambdaworks.redis.FutureSyncInvocationHandler.handleInvocation(FutureSyncInvocationHandler.java:61)
at com.lambdaworks.redis.internal.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:80)
at com.sun.proxy.$Proxy0.rpush(Unknown Source)
at com.reactive.api.redis.WriteToRedis.main(WriteToRedis.java:39)
我可以毫无问题地保存字符串值并连接到 Redis 云缓存。但似乎我没有正确配置与“键”关联的值的格式?如何使用 Java?
将值的数组(或列表)正确保存到 Redis 缓存Redis 由 data types.
操作在您的代码中使用 rpush
意味着您正在尝试使用 RPUSH command which is part of List 数据类型。
您正在尝试对名为 key
的键进行操作并出现以下错误:
WRONGTYPE Operation against a key holding the wrong kind of value
这意味着你的Redis instance/DB已经包含了key
键中的数据,并且现有数据的数据类型不是List。
如果你想知道一个键包含的数据的数据类型,你可以使用TYPE命令。例如。检查 key
键:
syncCommands.type("key");
您可以使用DEL 命令删除该数据。例如
syncCommands.del("key");