我面临一个非常奇怪的问题:使用Redis时我会变得非常糟糕的写作速度(在理想世界中,写作速度应该接近RAM上的写作速度). 这是我的基准: package redisbenchmark; import redis.clients.jedis.Jedis; public class RedisBenchmark { private static final String REDIS_KEY = "anon_id"; private Jedis conn; private long writeTimeNano=0; private RandomString stringGenerator; private String[] fields; public RedisBenchmark(){ conn = new Jedis("localhost"); stringGenerator = n
以下是关于 jedis 的编程技术问答
redis管道有2个选项将命令发送到数据库" exec"和"同步".我想知道它们有什么区别. 我将使用jedis,java api进行redis,以获取示例. 示例 示例1 try (Jedis resource = redisManager.getResource()) { Pipeline pipeline = resource.pipelined(); pipeline.multi(); pipeline.del("test-1"); pipeline.hset("test-2", "a", "b"); pipeline.exec(); } 示例2 try (Jedis resource = redisManager.getResource()) { Pipeline pipeline = resource.pipelined(); pipeline.multi(); pipel
那么,redis将zrange(以及相关的排序命令)指定为有序的结果集(也许没有重复的列表?). 为什么jedis上的zrange(和相关的API)(官方和推荐的Redis客户端)返回集合???根据定义,哪个没有订购的概念? 这是对Redis操作语义的直接违反. 这是zrange jedis 2.0.0实现: public Set zrange(final byte[] key, final int start, final int end) { checkIsInMulti(); client.zrange(key, start, end); final List members = client.getBinaryMultiBulkReply(); return new LinkedHashSet(members); } 吉迪斯的贡
在一个简单的情况下,有3个服务器,有1个主人和2个奴隶,没有碎片. Java和Jedis是否有一个验证的解决方案,它没有单个故障点,并且会自动处理单个服务器下降的是Master或Slave(自动故障转移).例如促进大师并在失败后重置没有任何丢失的数据. 在我看来,这应该是一个解决的问题,但我在上面找不到任何代码,只是对可能的方法的高级描述. 谁实际上已经涵盖了生产? 解决方案 您可能想尝试 redis sentinel 实现这一目标: Redis Sentinel是一个旨在帮助管理Redis实例的系统. 它执行以下三个任务: 监视.前哨不断检查您的主人和从属实例是否按预期工作. 通知. Sentinel可以通过API通知系统管理员或其他计算机程序,其中一个问题出了问题 自动故障转移.如果主人无法按预期工作,Sentinel可以启动一个故障转移过程,从而将从属提升为Master,The Master 重新配置其他其他奴隶以使用新主人,并且 使用R
何时我们应该使用此方法.在JedisconnectionException,Jedisdataexception或任何Jedisexception上.据我所知,吉迪斯没有很好的API文档. try { Jedis jedis = JedisFactory.getInstance(); Pipeline pipe = jedis.pipelined(); Response> idWithScore = pipe.zrangeWithScores(cachekey, from, to); **// some statement which may cause some other exception** Response val = pipe.get(somekey); pipe.exec(); pipe.sync(); }catch (JedisConnectionException e)
我的Docker版本是1.13.1. 我正在尝试通过我的Docker容器连接到Redis服务器,但是我得到的连接拒绝了. 由:redis.clients.jedis.exceptions.jedisconnectionexception: java.net.connectException:连接拒绝 在redis.clients.jedis.connection.connect(Connection.java:207)[Jedis-2.9.0.jar:] 在redis.clients.jedis.binaryclient.connect(binaryclient.java:93) [JEDIS-2.9.0.JAR:] 在redis.clients.jedis.binaryjedis.connect(binaryjedis.java:1767) [JEDIS-2.9.0.JAR:] 在redis.clients.jedis.jeDistory.makeObject(jedifacto
我使用redis docker-compose(3个主和3个从属)创建了一个6个节点的群集,并将所有这些节点链接在一起. 群集信息 cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:5 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:23 cluster_stats_messages_pong_sent:31 cluster_stats_messages_meet_sent:1 cluster_stats_messages_sent:55 cluster_stats_messages_ping_received:26 cluster_sta
我正在围绕Redis,为我提供了一个中间的缓存存储,并在诸如交叉路口和联合等设置操作的情况下进行了大量计算. 我已经查看了Redis网站,发现Redis不是为多核CPU设计的.我的问题是,为什么这样? 另外,如果是,我们如何在多核CPU上使用REDIS 100%利用CPU资源. 解决方案 我已经查看了Redis网站,发现Redis不是为多核CPU设计的.我的问题是,为什么这样? 这是一个设计决定. redis用epoll/kqueue单线读取,并无限期地按I/O并发. 选择事件驱动的方法的原因是,线程之间的同步在软件(代码复杂性)和硬件级别(上下文切换)中都付出了代价.再加上Redis的瓶颈通常是网络或 *内存,而不是CPU.另一方面,单线程结构有其自身的好处(例如,原子能保证). 因此,事件循环似乎是 有效&可扩展性 像redis一样的系统. 也,如果是的,我们如何使用CPU资源100%利用 在多核CPU上重新进行. 重新进行多个
我有一个应用程序,该应用程序使用REDIS发布/订阅使用Java中的Jedis客户端之间的客户传输消息.当用户键入命令时,我希望能够在运行时订阅频道,但由于订阅是一个阻止操作,因为它在呼叫订阅的线程上听着,我不确定如何在以后的日期订阅其他频道在原始线程上. 示例: private PubSubListener psl = new PubSubListener(); public void onCommand(String[] args) { subscribe(args[0]); } public void subscribe(String channel) { Jedis jedis = jedisPool.getResource(); jedis.subscribe(psl, channel); } 这将起作用,除了派遣命令的线程将用于轮询redis,我将无法使用该线程订阅任何更多频道. 解决方案 我观察到同样的问题,即订阅后订阅
我正在使用jedis在REST服务中与Redis服务器连接. 当我调用Web服务时,我想进行操作,例如 jedis.hmget , > 例如: jedis.hmget("employee:data:" + emp_user_id, "employee_id").get(0); 我用于redis的配置是: Jedis jedis; JedisShardInfo shardInfo; @PostConstruct public void init() { try { shardInfo = new JedisShardInfo(Config.getRedisHost(), Config.getRedisPort()); shardInfo.setPassword(Config.getRedisPassword()); jedis = new Jedi
我正在使用JEDIS池来管理与Redis服务器的连接.我的示例代码如下: public Set getTopArticleList(int start, int end) { Set list = null; Jedis j = JedisFactory.getInstance().getJedisPool().getResource(); Pipeline pipe = j.pipelined(); try { // do stuff with redis pipe.sync(); } catch (JedisConnectionException jex) { JedisFactory.getInstance().getJedisPool().returnBrokenResource(j); } finally { JedisFacto
这听起来可能是一个非常简单的问题,但我无法解决这个问题. i有一个config.properties文件,其中包含两个关键值:一个IP地址和端口号.我读取此配置文件以以字符串格式提取键值.但是,当我尝试使用这些值时,我无法连接到从配置文件检索的IP地址. 原因是读取的值是字符串格式,我需要在使用它们之前将它们转换为适当的格式.我想要的是,在配置文件中存储的值" 192.168.1.40"转换为String host格式.我尝试使用InetAddress,但这给出了错误. 配置文件的内容是: IP=192.168.1.40 PORT=9124 使用这些值的代码如下: Properties prop = new Properties(); String propFileName = "...//testJedis//resources//config.properties"; prop.load(new FileInputStream(propFi
我有一个基于春季的Java Web应用程序,该应用程序托管在Heroku上.我正在尝试使用REDIS实现来利用弹簧缓存抽象.服务器启动时,我会发现一个错误说: Type 'redis/clients/jedis/JedisPoolConfig' (current frame, stack[3]) is not assignable to 'org/apache/commons/pool2/impl/GenericObjectPoolConfig' 这是我的配置: @Bean RedisConnectionFactory jedisConnectionFactory() throws Exception { URI redisUri = new URI(System.getenv("REDISCLOUD_URL")); JedisConnectionFactory redisConnectionFactory = new Je
我想在redis中的hashkey中设置一个特定的键/值对.但是,Redis在整个Hashkey中都有所有的KeyValue对丢失.例如,我只想从seqnu中删除键:666.使用JEDIS.SETEX是其他选择,但您无法在其中设置Hashkey. jedis.hset("seqNu","666",System.currentTimeMillis()+""); jedis.hset("seqNu","777",System.currentTimeMillis()+""); jedis.expire("seqNu", 20); // This expires the whole HashKey: seqNu after 20 seconds 解决方案 REDIS仅在其数据结构内(即Hash的字段或集合的成员)内到达"整"键,而不是单个元素.考虑将您的哈希人分配到多个字符串键(每个键本身)或使用排序集,如下所述: redis:在集合中设置键值对的超时
我试图在Quarkus本机模式下运行应用程序中使用JedisPool(在JVM模式下工作正常). 我已经禁用了池的JMX功能,在本机模式下,该功能是不可避免的,因此: JedisPoolConfig jedisConfiguration = new JedisPoolConfig(); jedisConfiguration.setJmxEnabled(false); jedisPool = new JedisPool(jedisConfiguration, jedisURI); 但是,我遇到了以下错误: 2020-04-29 17:35:37,724 INFO [test.StockQuote] (main) java.lang.IllegalArgumentException: Unable to create org.apache.commons.pool2.impl.EvictionPolicy instance of type org.apache
我是Redis的新手,并使用Spring Boot + Spring Data Redis示例开发代码.当我保存记录时,我看到键创建并从这些键4 are HASH,1 ZSET和all others are SET中. . 我没有在春季文档中看到,每个键的含义都被保存了. . 127.0.0.1:6379> KEYS * 1) "persons:c5cfd49d-6688-4b83-a9b7-be55dd1c36ad" 2) "persons:firstname:bran" 3) "persons:39e14dae-fa23-4935-948f-1922d668d1c2" 4) "persons:f0b6dd26-8922-4a36-bd2a-792a17dddff7" 5) "persons:address.city:Achalpur" 6) "persons:e493385a-64ae-42be-8398-51757153d273:idx" 7) "perso
我试图扫描存储在 jediscluster . String product = "MMATest"; String redisServer = "mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com:6379,mycachecluster.eaogs8.0002.usw2.cache.amazonaws.com:6379"; Set jedisClusterNode = new HashSet(); String[] serversArray = redisServer.split(";"); for (String aServersArray : serversArray) { jedisClusterNode.add(new HostAndPort(aServersArray.split(":")[0], Integer.v
我们是重新键.它是名为test_key的 zset 结构. 键是userId喜欢123,456,789.分数是时间戳,例如1474194838,1474194839.它的长度达到了五千万.我们想将其分开,就像test_key_1,test_key_2,test_key_3. 如何拆分它可以使泥土变得更容易? 我们是Java开发人员.最常用的redis商品是zadd,zrem,zrange,zrangeByscore,zrangeByscoreWithScores,zcard等等. 解决方案 如果您必须将数据拆分为多个REDIS实例,则需要一个代理才能将请求派遣到一个或多个REDIS实例,并从这些实例中合并结果.代理可以用作库或服务(例如RPC服务器). 调度请求 说您将数据分为3个部分,并存储在3个REDIS实例中.为了确保负载余额,代理可以使用MurmurHash函数为每个userId创建哈希键,并根据哈希键将请求分配给一个或多个redis实例.以zad
我正在开发Spring Boot + Spring Data Redis示例.在此示例中,我正在开发RedisMessageListenerContainer的代码,并在此处定义相应的bean. 现在运行应用程序时,我会收到以下错误.有人可以指导我有什么问题吗? *************************** APPLICATION FAILED TO START *************************** Description: The bean 'redisMessageListenerContainer', defined in class path resource [org/springframework/boot/autoconfigure/session/RedisSessionConfiguration$SpringBootRedisHttpSessionConfiguration.class], could not be regis
以前,我们正在使用AWS Elasticache禁用群集模式的REDIS. 我们使用Jedis的Java代码指向主要的单节点端点,该端点用于读取和写入. 我们现在启用了集群模式. 我们现在更改了代码,以指向新的redis群集的配置端点,但是现在每当收到请求时会丢弃错误,请参见下文: 不可用.继续使用队列requestMessage. org.springframework.data.redis.clusterredirectException:重定向:插槽2356至[ipaddress]:6379.;嵌套异常是redis.clients.jedis.exceptions.jedismeddataexception:移动2356 [ipaddress]:6379 我们的配置代码如下: @Bean(name = "redisTemplate") public RedisTemplate getRedisTem