我正在使用Spring Data Redis和Jedis.我试图用密钥存储哈希vc:${list_id}.我能够成功插入redis.但是,当我使用redis-cli检查按键时,我看不到按键vc:501381.相反,我明白了\xac\xed\x00\x05t\x00\tvc:501381.
为什么会发生这种情况?如何更改?
我正在使用Jedis池来管理与Redis服务器的连接.我的示例代码如下:
public Set<String> getTopArticleList(int start, int end) {
Set<String> list = null;
Jedis j = JedisFactory.getInstance().getJedisPool().getResource();
Pipeline pipe = j.pipelined();
try {
// do stuff with redis
pipe.sync();
} catch (JedisConnectionException jex) {
JedisFactory.getInstance().getJedisPool().returnBrokenResource(j);
} finally {
JedisFactory.getInstance().getJedisPool().returnResource(j);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
用于创建和检索Jedis池的代码:
class JedisFactory {
private static JedisPool jedisPool;
public JedisFactory() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
jedisPool = new JedisPool(
poolConfig,
RedisDBConfig.HOST,
RedisDBConfig.PORT,
RedisDBConfig.TIMEOUT,
RedisDBConfig.PASSWORD
);
}
public JedisPool getJedisPool() {
return jedisPool;
}
public static JedisFactory getInstance() …Run Code Online (Sandbox Code Playgroud) List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
JedisShardInfo si = new JedisShardInfo("localhost", 6379);
si.setPassword("foobared");
shards.add(si);
si = new JedisShardInfo("localhost", 6380);
si.setPassword("foobared");
shards.add(si);
Run Code Online (Sandbox Code Playgroud)
然后,有两种使用方式ShardedJedis.直接连接或使用ShardedJedisPool.为了可靠运行,后者必须在多线程环境中使用.
2.a)直接连接:
ShardedJedis jedis = new ShardedJedis(shards);
jedis.set("a", "foo");
jedis.disconnect;
Run Code Online (Sandbox Code Playgroud)
2.b)汇集连接:
ShardedJedisPool pool = new ShardedJedisPool(new Config(), shards);
ShardedJedis jedis = pool.getResource();
jedis.set("a", "foo");
.... // do your work here
pool.returnResource(jedis);
.... // a few moments later
ShardedJedis jedis2 = pool.getResource();
jedis.set("z", "bar");
pool.returnResource(jedis);
pool.destroy();
Run Code Online (Sandbox Code Playgroud)
以上示例显示了如何使用ShardedJedis.
在我目前的设置中,我正在使用RedisTemplate和JedisConnectionFactory.
我的问题是 …
我正在环顾redis,为我提供一个中间缓存存储,其中包含很多围绕集合操作的计算,例如intersection和union.
我查看了redis网站,发现redis不是为多核CPU设计的.我的问题是,为什么会这样?
此外,如果是,我们如何在多核CPU上使用redis 100%利用CPU资源.
这将是我第一次将Spring连接到Redis.jedis连接工厂的文档:http://www.baeldung.com/spring-data-redis-tutorial
提供以下代码:
@Bean
JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConFactory
= new JedisConnectionFactory();
jedisConFactory.setHostName("localhost");
jedisConFactory.setPort(6379);
return jedisConFactory;
}
Run Code Online (Sandbox Code Playgroud)
看起来很棒,但我的IDE告诉我setHostName和setPort方法已被弃用(即使我使用的是教程中的版本).
我想知道是否有人使用非弃用API调用的简单"获取弹簧数据连接到redis"示例?
我正在使用redis与Akka,所以我不需要阻止调用.生菜具有内置的异步未来调用.但是Jedis是Redis的推荐客户.如果我以正确的方式使用它们,有人可以告诉我.如果是这样哪一个更好.
JEDIS 我使用静态Jedis连接池来获取con并使用Akka将来的回调来处理结果.我关心的是当我使用另一个线程(可调用)来获取线程最终将阻塞结果的结果时.虽然生菜可能有一些更有效的方法来做到这一点.
private final class OnSuccessExtension extends OnSuccess<String> {
private final ActorRef senderActorRef;
private final Object message;
@Override
public void onSuccess(String valueRedis) throws Throwable {
log.info(getContext().dispatcher().toString());
senderActorRef.tell((String) message, ActorRef.noSender());
}
public OnSuccessExtension(ActorRef senderActorRef,Object message) {
this.senderActorRef = senderActorRef;
this.message=message;
}
}
ActorRef senderActorRef = getSender(); //never close over a future
if (message instanceof String) {
Future<String> f =akka.dispatch.Futures.future(new Callable<String>() {
public String call() {
String result;
try(Jedis jedis=JedisWrapper.redisPool.getResource()) {
result = jedis.get("name");
}
return result;
}
}, ex);
f.onSuccess(new …Run Code Online (Sandbox Code Playgroud) 我正在运行多个工作线程(大约10个)来访问redis Q中的数据.
因为我正在使用Jedis Client的 infinte timeout .
Jedis jedis = pool.getResource();
jedis.getClient().setTimeoutInfinite();
Run Code Online (Sandbox Code Playgroud)
我仍然收到错误"无法从池中获取资源".堆栈跟踪如下所示.
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
at redis.clients.util.Pool.getResource(Pool.java:22)
at Workers.Worker1.met1(Worker1.java:124)
at Workers.Worker1.work(Worker1.java:108)
at org.gearman.impl.worker.WorkerConnectionController$3.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
at redis.clients.jedis.Connection.connect(Connection.java:124)
at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:54)
at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1657)
at redis.clients.jedis.JedisPool$JedisFactory.makeObject(JedisPool.java:63)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1188)
at redis.clients.util.Pool.getResource(Pool.java:20)
... 6 more
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) …Run Code Online (Sandbox Code Playgroud) 我正在使用Jedis作为连接Redis服务器的Java客户端.
问题1:似乎没有方法来获取/设置Object <?扩展Serializable>?所有值必须是String或byte []?
其他客户端,如"JRedis"和Spymemcache(用于memcached服务器)可以.
问题2:如果我使用ShardedJedis,它无法设置身份验证/密码?而Jedis类可以(使用auth(String password)).
我正在寻找一个使用redis哨兵的jedis的例子.我无法使用jedis设施进行哨兵,我找不到任何好的示例或文档.