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