`

Cannot use Jedis when in Multi. Please use JedisTransaction instead.

阅读更多

Cannot use Jedis when in Multi. Please use JedisTransaction instead.

 

当在程序中遇到这个异常时,有可能是返回的缓存对象序列化失败。

例子:

@CachePut(value = "emchat", key = "'Emchat:' + #emchatMsg.msgFrom+#emchatMsg.msgDate")
    public Emchat[] saveEmchatInRedis(EmchatMsg emchatMsg){
        return  EmchatUtils.convertEmchatMsgStr(emchatMsg);
    }

运行此方法时会报:Cannot use Jedis when in Multi. Please use JedisTransaction instead.

但是换成:

@CachePut(value = "emchat", key = "'Emchat:' + #emchatMsg.msgFrom+#emchatMsg.msgDate",condition="#result != null")
    public String saveEmchatInRedis(EmchatMsg emchatMsg){
        if(null!=emchatMsg){
            return emchatMsg.getMsgContent();
        }
        return null;
    }

就可以运行成功,说明缓存的对象没有进行处理成能缓存的对象(配置里没有支持数组处理)。

配置如下:

<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"
            c:template-ref="redisTemplate" p:defaultExpiration="14400"/>
   
    <bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <property name="usePool" value="true"/>
            <property name="hostName" value="${redis.host}"/>
            <property name="port" value="${redis.port}"/>
            <property name="database" value="${redis.database}"/>
    </bean>
   
    <bean id="jedisClient" class="redis.clients.jedis.Jedis" c:host="${redis.host}"></bean>
   
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
            p:connection-factory-ref="jedisConnFactory">
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
        <property name="stringSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
    </bean>
    <cache:annotation-driven proxy-target-class="false"/>

 

分享到:
评论

相关推荐

    jedis-2.9.0.jar

    jedis.auth("192.168akeiekekKKDJEikekEJkeu^&&%%$&#*($#&^$&^#$*((BNGGyjekeuh{}jejekekej:"); ping(jedis); hashBytesSave(jedis); hashBytesGet(jedis); // ListCommandsTest jedis.close();...

    jedis-3.3.0.jar

    java.lang.NoSuchMethodError: redis.clients.jedis.ScanResult.getStringCursor()Ljava/lang/String; at org.crazycake.shiro.WorkAloneRedisManager.keys(WorkAloneRedisManager.java:149) at org.crazycake....

    jedis-2.0 api.chm

    jedis-2.0 api.jedis-2.0 api.

    jedis-3.3.0.jar文件

    String value = jedis.get("key"); } finally { jedis.close(); jedisPool.close(); } ``` 总结来说,"jedis-3.3.0.jar"和"commons-pool2-2.9.0.jar"的结合使用,为Java开发者提供了高效、稳定的Redis连接和资源...

    jedis-2.8.0.jar 、jedis-2.1.0.jar

    jedis-2.8.0.jar 、jedis-2.1.0.jar 资源可靠 edis-2.8.0.jar 、jedis-2.1.0.jar 资源可靠 jedis-2.8.0.jar 、jedis-2.1.0.jar 资源可靠 jedis-2.8.0.jar 、jedis-2.1.0.jar 资源可靠

    jedis-3.0.0.jar、jedis-3.0.0-javadoc.jar、jedis-3.0.0-sources.jar

    Pipeline pipeline = jedis.pipelined(); for (int i = 0; i ; i++) { pipeline.set("key" + i, "value" + i); } pipeline.sync(); ``` 在开发过程中,jedis-3.0.0-javadoc.jar和jedis-3.0.0-sources.jar可以帮助...

    jedis-2.8.0.jar

    jedis-2.8.0.jar

    jedis-2.4.1.jar、redis.clients-3.0.1.jar、jedis-3.0.0.jar

    jedis-2.4.1.jar、redis.clients-3.0.1.jar、jedis-3.0.0.jar 全量包,可用!

    jedis5.1.0.jar

    jedis5.1.0.jar

    jedis-2.4.2版本.rar

    Jedis是Java开发人员用于操作Redis数据库的一个非常重要的开源客户端库。Redis是一个高性能的键值存储系统,常被用作数据库、缓存和消息代理。Jedis 2.4.2是该库的一个稳定版本,提供了对Redis服务器各种功能的全面...

    jedis-2.1.0.jar+commons-pool-1.6.jar

    import redis.clients.jedis.JedisPoolConfig; public class RedisExample { private static JedisPool pool; static { JedisPoolConfig config = new JedisPoolConfig(); // 设置最大连接数、超时时间等配置 ...

    redis3.2.1+jedis2.8.0+jedis.api.rar一站下载

    3. 事务处理:`multi`开始一个事务,然后添加一系列命令,最后通过`exec`执行所有命令。 4. 发布订阅:使用`publish`发送消息,`subscribe`或`psubscribe`订阅频道或模式。 5. 关闭连接:操作完成后,记得关闭Jedis...

    Java中利用jedis操作redis示例.zip

    jedis.multi(); jedis.set("key1", "value1"); jedis.set("key2", "value2"); List&lt;Object&gt; results = jedis.exec(); ``` 7. **发布订阅** Redis还提供了消息发布订阅功能,你可以创建一个`JedisPubSub`订阅...

    jedis-jedis-2.2.0.tar.gz

    - 执行Redis命令,例如`jedis.set("key", "value")`来设置键值对。 - 关闭资源,确保每次操作后释放连接,避免资源泄露。 4. Jedis的优化: - 配置合理的连接池参数,如最大空闲连接数、最小空闲连接数、最大...

    jedis-jedis-3.2.0.tar.gz

    jedis.multi(); jedis.set("key1", "value1"); jedis.set("key2", "value2"); List&lt;Object&gt; results = jedis.exec(); ``` 此外,Jedis还支持Redis的其他数据结构,如哈希(Hash)、集合(Set)和有序集合(Sorted ...

    Jedis API中文使用文档.-比较详细

    * 批量设置值:使用 `mset` 方法可以批量设置多个值,例如 `jedis.mset("name", "minxr", "jarorwar", "aaa");` 将设置多个值。 * 批量获取值:使用 `mget` 方法可以批量获取多个值,例如 `jedis.mget("name", ...

    jedis-jedis-1.3.0.tar.gz

    jedis.multi(); jedis.set("key1", "value1"); jedis.set("key2", "value2"); List&lt;Object&gt; results = jedis.exec(); ``` 5. 发布与订阅: ```java JedisPubSub subscriber = new JedisPubSub() { @Override ...

    Jedis所需要的jar包.zip

    标题 "Jedis所需要的jar包.zip" 提供了一个关键信息,那就是我们要关注的是Jedis的依赖库。Jedis是一个Java客户端,用于连接并操作Redis,一个高性能的键值数据存储系统。Redis广泛应用于缓存、消息队列、分布式计算...

    jedis-jedis-3.5.0.tar.gz

    jedis-jedis-3.5.0.tar

Global site tag (gtag.js) - Google Analytics