草庐IT

java.util.concurrent.ExecutionException : redis. clients.jedis.exceptions.JedisDataException:ERR 达到最大客户端数

我正在尝试在Web应用程序中使用jedis-client连接redis数据库,但有一天应用程序抛出如下异常:java.util.concurrent.ExecutionException:redis.clients.jedis.exceptions.JedisDataException:ERRmaxnumberofclientsreached我试图弄清楚是由于redis无法处理连接还是我没有关闭redis连接。//codesnippettoconnectredisJedisjedis=newJedis("localhost");jedis.connect();我没有关闭连接,因为我认为

redis - 您如何订阅哨兵并从他们那里接收出版物?

我正在尝试使用发布/订阅实现。在Jedis上获取有关master下线的信息,但我不确定如何订阅Sentinelchannel。我的发布者类:publicPublisher(JedispublisherJedis,Stringchannels,StringclusterName){this.publisherJedis=publisherJedis;this.channels=channels;this.clusterName=clusterName;}publicvoidstart(){log.info("publishingonchannel+odown");try{while(tr

java - jedis llen 结果不等于 redis llen

我遇到了一个关于Redis及其Java客户端Jedis的非常奇怪的问题。我在Redis中有两个名为workMQ和backupMQ的列表,当我在redis-cli中执行llenworkMQ时,它返回16。但是,当我使用Jedis在Java代码中执行jedis.llen("workMQ")时,它返回0。但是当新数据通过Java代码运行jedis.lpush("workMQ","data")时,RedisllenworkMQ变为1.为什么jedis.llen("workMQ")无法识别此列表中剩余的16数据项?在出现这个奇怪的问题之前,我用Lua脚本做了rpoplpush操作,如下。eval

lua - Lua 脚本上的 Jedis/Redis SocketTimeout 异常

我们正在使用lua脚本对数据库更新时的数据执行批量删除。Jedis使用管道执行lua脚本。localresult=redis.call('lrange',key,0,12470)fori,kinipairs(result)doredis.call('del',k)redis.call('ltrim',key,1,k)endtry(Jedisjedis=jedisPool.getResource()){Pipelinepipeline=jedis.pipelined();longlen=jedis.llen(table);Stringscript=String.format(DELETE

java - Redis 键被自动删除

我们使用redis作为缓存。在某些情况下,某些key会被删除,而我们找不到原因。我在这个通知上放置了CONFIGSETnotify-keyspace-eventsKEgxe的rediskeyspace/keyevent我正在放置日志。但是我既不能在我的核心日志中也不能在这个redis-logs中找到一些键。他们在RDBMS中有一些数据,所以我们确信这些键一定已经进入了Redis。我们非常迷茫,我们应该根据什么调试它。Redis信息显示它有大约100mb的使用量,这对我来说没问题。如何持久化数据和key。 最佳答案 2可能的原因:客户

transactions - 集群模式下spring data redis是否支持事务(multi,exec)?

我已经在单个REDIS实例中成功地使用multi和exec功能在Redis中实现(并测试)了事务操作。但是,在集群设置中运行的相同代码会出错并显示以下异常消息。我正在使用spring-data-redis-1.8.1.RELEASE和jedis-2.9.0。Exceptioninthread"main"org.springframework.dao.InvalidDataAccessApiUsageException:MUTLIiscurrentlynotsupportedinclustermode.atorg.springframework.data.redis.connection

java - jedis.incr(byte[] key) 的输入

我目前使用的是Jedis2.9.0版,根据RedisJedis文档,方法longjedis.incr(byte[]key)接受字节数组作为其键。问题是,我使用哈希值(MessageDigest.getInstance("MD5"))作为键,但我不确定此命令中允许的键类型/大小。我也不知道在这种情况下这是否是“最佳实践”。有谁知道字节数组可以有多大,并且仍然可以作为此方法中的参数传递? 最佳答案 Redis的键名最长可达512MB,并且是二进制安全的。由于MD5哈希是一个128位整数,它只需要16个字节作为key名称,并且完全在限制之

java - redis.clients.jedis.exceptions.JedisException : Could not get a resource from the pool

redis.properties#jedisPoolConfigredis.minIdle=100redis.maxIdle=500redis.maxTotal=50000redis.maxWaitMillis=10000redis.testOnBorrow=true#jedisPoolredis.host=192.168.13.169redis.port=6379redis.timeout=3000redis.port2=6380#redis-sentinelredis.sentinel=192.168.13.169:26379redis.master=mymasterspring-

java - RedisTemplate execute() 和 opsFpr*() 的不同使用

用Spring操作redis,RedisTemplate的execute()和opsFor*()的区别? 最佳答案 Referencedocument根据该文档,有两个组件:低级抽象和高级抽象。1.execute()方法是Low-LevelAbstractions,用于通过RedisConnection操作redis;2.opsFor*()方法是High-LevelAbstractions,为提供友好的模板类,underlay也使用RedisConnection和execute()。其实这两种方法是一样的。

java - 绝地武士得到陈旧的数据

我们有多次保存key更新值的场景。该值包含设置对象,其中数据在每次操作后更新。问题是get方法总是返回第一次获取的数据,而我们只在服务器重启时获取更新的数据。我们正在使用jedispool默认配置并尝试了多种方法来调试它,但我没有取得任何进展byte[]reply=jedis.get(keyBytes);jedis.setex(keyBytes,expiration,valueBytes);这可能是导致此错误的愚蠢原因,所以请帮助我进一步改进 最佳答案 看起来对各种调用使用相同的输出流导致了这个问题