Tag: jedis

将连接池与Jedis一起使用

我在rest服务中使用Jedis连接redis服务器。 当我调用Web服务时,我想做jedis.hmget , jedis.exits和hgetALL之类的操作 。 jedis.hmget(“employee:data:” + emp_user_id, “employee_id”).get(0); 我用于redis的配置是: Jedis jedis; JedisShardInfo shardInfo; @PostConstruct public void init() { try { shardInfo = new JedisShardInfo(Config.getRedisHost(), Config.getRedisPort()); shardInfo.setPassword(Config.getRedisPassword()); jedis = new Jedis(shardInfo); jedis.select(2); //jedis.se } catch (Exception e) { logger.error(“Exception in init ——- > ” + e); } } 我知道jedis不是线程安全的。当我一次使用1000个线程来调用服务时,我得到exception作为意外的流结束。 我开始知道jedis pool是线程安全但无法找到它的具体解决方案。 谢谢。 任何帮助,将不胜感激。

JedisPoolConfig不能分配给GenericObjectPoolConfig

我在Heroku上有一个基于Spring的java Web应用程序。 我试图使用Redis实现来利用Spring Caching抽象。 当服务器启动时,我收到一条错误消息: Type ‘redis/clients/jedis/JedisPoolConfig’ (current frame, stack[3]) is not assignable to ‘org/apache/commons/pool2/impl/GenericObjectPoolConfig’ 这是我的配置: @Bean RedisConnectionFactory jedisConnectionFactory() throws Exception { URI redisUri = new URI(System.getenv(“REDISCLOUD_URL”)); JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(); redisConnectionFactory.setHostName(redisUri.getHost()); redisConnectionFactory.setPort(redisUri.getPort()); redisConnectionFactory.setPassword(redisUri.getUserInfo().split(“:”,2)[1]); redisConnectionFactory.setUsePool(true); return redisConnectionFactory; } @Bean RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate(); try { redisTemplate.setConnectionFactory(jedisConnectionFactory()); } catch (Exception e) […]

Redis / Jedis – 按模式删除?

通常,我得到密钥集然后使用外观删除每个键/值对。 是否可以通过模式删除所有键? 即: Del sample_pattern:*

Redis / Jedis没有单点故障和自动故障转移

在一个简单的情况下,有3个服务器,1个主服务器和2个从服务器,没有分片。 是否有经过validation的解决方案,java和Jedis没有单点故障,并且会自动处理单个服务器,即主服务器或从服务器(自动故障转移)。 例如,在没有任何数据丢失的情况下促进主人和重置。 在我看来,它应该是一个已解决的问题,但我找不到任何代码,只是对可能的方法进行高级描述。 实际上是谁覆盖并在生产中工作?

Jedis和生菜异步能力

我正在使用redis与Akka,所以我不需要阻止调用。 生菜具有内置的异步未来调用。 但是Jedis是Redis的推荐客户。 如果我以正确的方式使用它们,有人可以告诉我。 如果是这样哪一个更好。 JEDIS我使用静态Jedis连接池来获取con并使用Akka将来的回调来处理结果。 我关心的是当我使用另一个线程(可调用)来获得线程最终将阻塞结果的结果时。 虽然生菜可能有一些更有效的方法来做到这一点。 private final class OnSuccessExtension extends OnSuccess { 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 […]

使用RedisTemplate从Redis获取Set值

我可以使用Jedis从Redis检索值: public static void main(String[] args) { Jedis jedis = new Jedis(HOST, PORT); jedis.connect(); Set set = jedis.smembers(KEY); for (String s : set) { System.out.println(s); } jedis.disconnect(); jedis.close(); } 但是当我尝试使用Spring的RedisTemplate ,我没有得到任何数据。 我的数据作为Set存储在Redis中。 // inject the actual template @Autowired private RedisTemplate template; // inject the template as SetOperations @Resource(name=”redisTemplate”) private SetOperations setOps; public String logHome() { […]

redis似乎服务器已关闭连接

我想使用redis sub / pub,但是当我订阅一个频道,2分钟后,控制台输出exception:似乎服务器已关闭连接。 redis版本:redis-3.0.3 jedis版本:2.3.0 os:OS X Yosemite 10.10.5 Subscribe.class JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(10); jedisPoolConfig.setMaxWait(4000); jedisPoolConfig.setTestOnBorrow(true); JedisPool jedisPool = new JedisPool(jedisPoolConfig, “127.0.0.1”, 6379); final Jedis jedis = jedisPool.getResource(); System.out.println(jedis.configGet(“timeout”)); System.out.println(jedis.configGet(“tcp-keepalive”)); final JedisPubSub jedisPubSub = new JedisPubSub() { @Override public void onMessage(String channel, String message) { System.out.println(“onMessage”); } @Override public void onPMessage(String pattern, […]

配置Jedis超时

我在完成.hgetall时遇到了问题,这是我尝试过的: Jedis jedis = new Jedis(REDIS_MASTER_NODE); jedis.connect(); jedis.configSet(“timeout”, “30”); Map alreadyStored = jedis.hgetAll(redisTargetHash); 这就是我得到的: Exception in thread “main” redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out at redis.clients.jedis.Protocol.process(Protocol.java:79) at redis.clients.jedis.Protocol.read(Protocol.java:131) at redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:199) at redis.clients.jedis.Jedis.hgetAll(Jedis.java:851) 好, Jedis jedis = new Jedis(REDIS_MASTER_NODE, 6379, 1800); 做到了。

你可以在Redis中使hashKey的键值对失效吗?

我想在redis中使用hashKey中的特定键/值对设置到期。 但redis会使整个hashKey失效,并且所有keyValue对都会丢失。 例如,我只想从seqNu中删除Key:666。 使用jedis.setex是另一种选择,但你不能在其中设置hashKey。 jedis.hset(“seqNu”,”666″,System.currentTimeMillis()+””); jedis.hset(“seqNu”,”777″,System.currentTimeMillis()+””); jedis.expire(“seqNu”, 20); // This expires the whole HashKey: seqNu after 20 seconds

Redis Key使用Jedis过期通知

当我的密钥在redis数据存储中到期时,我正在尝试使用redis实现到期密钥通知。 redis网站提供了一些如何http://redis.io/topics/notifications的描述,但是我无法找到如何使用像Jedis这样的redis java客户端来做这个的例子? 任何可能的插图代码都非常有用,因为我是redis的新手。