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
>>
>

Odpovedet emailem