Dobry den, asi to bola moja chyba, pretoze som aj pri openPipeline aj pri closePipiline, volal redisTemplate.getConnectionFactory().getConnection()
co vzdy vratilo asi novu connection. Ivan 2013/3/24 "Zdeněk Troníček" <[email protected]>: > 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 >> >
