Dobry den, > redisTemplate.getConnectionFactory().getConnection().openPipeline(); ... > redisTemplate.getConnectionFactory().getConnection().closePipeline();
Provadite openPipeline() a closePipeline() nad stejnym Connection? Z.T. -- Zdenek Tronicek FIT CTU in Prague Ivan Polak napsal(a): > dakujem za reakciu, vydal som sa smerom, ktory ste navrhli a zacal som > skusat, co berie connections z pool-u a nevracia ich, a dosiel som na > to, ze ked sa vykonava nasledovny kod: > > redisTemplate.getConnectionFactory().getConnection().openPipeline(); > redisTemplate.boundZSetOps(hourSet).incrementScore(key, 1.0); > redisTemplate.boundZSetOps(ARTICLE_VIEWS_4HOUR_SET).incrementScore(key, > 1.0); > redisTemplate.boundZSetOps(ARTICLE_VIEWS_SET).incrementScore(key, 1.0); > redisTemplate.getConnectionFactory().getConnection().closePipeline(); > > tak po 8-10 spusteniach aplikacia "zamrzne". > > vygooglil som nasledony problem: > http://forum.springsource.org/showthread.php?113738-spring-data-redis-transactions > > ktory je velmi podobny ako mam ja. > > hore vedeny kod som zmenil na: > > Object o = redisTemplate.execute(new RedisCallback<Object>() { > @Override > public Object doInRedis(RedisConnection con) > throws DataAccessException { > con.openPipeline(); > con.zIncrBy(hourSet.getBytes(), 1.0, > key.getBytes()); > con.zIncrBy(ARTICLE_VIEWS_4HOUR_SET.getBytes(), > 1.0, key.getBytes()); > con.zIncrBy(ARTICLE_VIEWS_SET.getBytes(), 1.0, > key.getBytes()); > con.closePipeline(); > return null; > } > }); > > a zatial to vyzera ze problem som vyriesil, este to potestujem, ci bol > skutocne toto problem. > > Ivan > > 2013/3/23 Petr Janata <[email protected]>: >> Pisu jen ze zkusenosti:K tomu GenericObjectPool, >> muzou v nem byt ruzne typy objektu, kdyz maji spolecny superclass(ve >> vasem >> pripade Connection?). Metoda borrow se da volat i s klicem, ktery urci >> typ >> vraceneho objektu. >> Kdyz jsou vsechny objekty z poolu vypujcene, dalsi volani borrow >> defaultne >> blokuje a ceka na vraceni objektu. >> Zkontrolujte, ze se connections obravdu vraceji do poolu pomoci spravne >> metody(returnObject?). Alternativne zmente strategii pri pool >> exhaustion. >> >> On Mar 23, 2013 10:42 AM, "Ivan Polak" <[email protected]> wrote: >>> >>> ahojte, >>> >>> vo webovej aplikacii mam problem s pripojenim na DB (PostgreSQL) a na >>> noSQL REDIS, pomocou connectoru JEDIS, pouzivam tomcat 7.0.29. >>> >>> aplikacia po par minutach pouzivania "zastane". predpokladam, ze je >>> problem v apache commons connection pool-e. >>> >>> pouzivam: >>> >>> - pripojenie na REDIS pomocou JEDIS connector (jedis-2.1.0.jar) >>> - pripojenie na PostgreSQL DB (JDBC driver: >>> postgresql-9.1-901.jdbc4.jar). >>> >>> REDIS server version: 2.4 (windows version) >>> JEDIS version: 2.1.0 >>> connection pool: apache commons pool version 1.6 >>> tomcat version: 7.0.29 >>> >>> po debugovani som zistil, ze sa pouziva pravdepodobne jeden connection >>> pool a v triede: >>> >>> org.apache.commons.pool.impl.GenericObjectPool, v funkcii >>> >>> public T borrowObject() throws Exception { >>> ... >>> if (latch.getPair() == null && !latch.mayCreate()) { >>> if(maxWait <= 0) { >>> latch.wait(); >>> >>> pretoze latch.getPair() = null, maxWait is -1 a latch.mayCreate() == >>> false, takze latch.wait() sa vykona, a aplikacia "zastane". >>> >>> je mozne vobec pouzivat jeden connection pool pre pripojenie na >>> PostgreSQL DB aj na pripojenie na REDIS ? nemam skusenosti s >>> pripojenim na viacere "zdroje" dat v jednej aplikacii. >>> >>> nastavenie connection pool-u je default. >>> >>> pre informaciu, pouzivanie JEDIS-u: >>> >>> 1. >>> RedisTemplate<String, String> redisTemplate = (RedisTemplate<String, >>> String>) BeanUtil.getBean("redisTemplate"); >>> return redisTemplate.boundZSetOps(set).incrementScore(key , value); >>> 2. >>> RedisTemplate<String, String> redisTemplate = (RedisTemplate<String, >>> String>) BeanUtil.getBean("redisTemplate"); >>> Set<Tuple> mostViewed = redisTemplate.execute(new >>> RedisCallback<Set<Tuple>>() { >>> @Override >>> public Set<Tuple> doInRedis(RedisConnection con) >>> throws DataAccessException { >>> Set<Tuple> zRangeByScoreWithScore = >>> con.zRangeByScoreWithScores(ARTICLE_VIEWS_SET.getB ytes(), 1, 10); >>> return zRangeByScoreWithScore; >>> } >>> }); >>> >>> --- >>> >>> jedisConnectionFactory definicia: >>> >>> <bean id="jedisConnectionFactory" >>> class="org.springframework.data.redis.connection.j >>> edis.JedisConnectionFactory"> >>> <property name="hostName" value="${redis.host}"/> >>> <property name="port" value="${redis.port}"/> >>> <property name="timeout" value="2000"/> >>> </bean> >>> >>> dakujem za akekolvek rady >>> >>> Ivan >
