草庐IT

redis - 没有 MULTI 的 ERR EXEC - spring redis + jedis

我在使用spring-data-redis进行事务操作时遇到异常RedisTemplatecartCache;publicvoidcreate(finalCartlinecartline){ObjecttxResults=cartCache.execute(newSessionCallback(){publicListexecute(RedisOperationsoperations)throwsDataAccessException{StringcartId=cartline.getMemberId();StringcartlineId=cartline.getCartlineId(

multithreading - 在 Redis 中更新和检索 key

我正在使用Redis键值对来存储数据。针对特定键的数据可以在任何时间点更改,因此在每次检索请求之后,我异步更新针对请求的键存储的数据,以便可以为下一个请求提供更新后的数据。我已经做了很多测试,但我仍然想知道这种方法是否会产生一些负面后果?PS:数据是从多台服务器整合而来的。在此先感谢您的任何帮助/建议。 最佳答案 如果你已经知道要存储的值,你可以使用GETSET(或者transaction如果它不是简单的字符串类型)。如果新值是对值的一些操作,即f(value),您应该在LUA中进行操作脚本。否则其他客户端可能会在您更新之前读取旧值

java - Jedis 过滤 hmset 中的值

我在redis中有一些具有这个键结构的值key:1:abc->votes->0->name->Johnkey:1:xyz->votes->0->name->Marykey:1:def->votes->1->name->Larrykey:2:ijk->votes->0->name->apple这就是我的键空间的样子。我正在使用hmset将内容存储在redis中。“key:1”是一个占位符,用于标识特定空间中的不同用户,“key:1”之后的部分是“key:1”中每条记录的唯一区分符。我想写一些代码来过滤掉来自redis的数据,以获得所有投票数设置为0的记录。所以jedis代码的输出应该是这

mysql - 如何确保内存消耗不随 redis 数据库的大小而缩放

我目前正在使用Jedis从Redis数据库服务器获取数据。我需要将这些数据推送到MySQL。redis服务器中有数百万条记录。使用以下语句,我可以将数据复制到一个集合中:Stringpattern="users*";//AllkeysstartingwithusersSetusers=jedis.keys(pattern)//Readallthekeysintoset现在我的users集有所有记录。但是在redis数据库中可能有数百万条记录与我的模式匹配。这最终会耗尽我所有的内存。我怎样才能做类似下面的事情for(Allthekeysthatmatchmypattern){Setset

java - Jedis(Java Redis) 如何连接两个或多个订阅者?

我有两个订阅者,他们应该连接到不同的channel。但是,如果我尝试为他们订阅channel,则什么也不会发生。我认为这是一些多线程问题,但不知道如何解决这个问题。有没有关于如何与多个订阅者一起工作的示例? 最佳答案 如果不处于竞争状态,https://github.com/xetorthio/jedis/pull/998可以帮到你,预定下个版本发布。顺便说一句,如果您不需要动态订阅,或者您的channel具有相同的模式,则无需为每个channel创建订阅者。您可以使用Jedis.subscribe()和Jedis.psubscri

压力测试下的Redis hooking(发布-订阅)——负载下的性能

基于suggestedsolusion并关注example,我正在尝试在收到另一个key已过期的通知后立即删除一个key。问题是,在设置600K新key并将其中一半的过期时间设置为2秒的重负载压力测试下,我得到以下异常:Exceptioninthread"main"redis.clients.jedis.exceptions.JedisConnectionException:Unknownreply:t问题是编写这样的监听器的最佳实践是什么?(线程池?如果是在什么上下文中实现它?)绝地武士版本:2.7.2Redis版本:2.8.19到目前为止我的代码:订阅者类:publicclassS

redis - Redis订阅 channel 到底是什么?

因此,当我创建一个新的Jedis订阅实例并让我的Jedis实例订阅它时,我必须指定channel。它到底是什么?我假设它是一个字符串,它将成为其他一些系统的url[我有一个API平台,它应该收到重做状态更改的通知]。Jedis和Redis订阅页面都没有具体说明我对channel感到好奇的字符串类型。谢谢! 最佳答案 字符串可以是任何字符串,不一定只是URL。它用作Redischannel的名称-发布者和订阅者都用来“连接”到正确channel的唯一标识符-因此只要每个人都知道该名称,他们就可以使用该channel。

java - Spring 绝地武士。 SCAN 和 KEYS 键不匹配

我在redis中放了一个key-value,其中key是UUID转成byte数组,用于空间优化。"3DEBB752-654A-4206-89BA-D3517237312E"->[-119,-70,-45,81,114,55,49,46,61,-21,-73,82,101,74,66,6].我正在使用SpringJedis从Redis服务器获取数据,当我尝试通过KEYS函数获取key时jedisConnection.keys("*".getBytes());我明白了[-119,-70,-45,81,114,55,49,46,61,-21,-73,82,101,74,66,6]但是,当我尝

java - Redis 抛出关于 "Read time out"的异常

我是redis的新手,我为此启动了服务器tutorial.它起作用了。然后我用java写代码连接redis,就ok了,像这样:Jedisjedis=newJedis("localhost");System.out.println("Connectiontoserversucessfully");//storedatainredislistjedis.lpush("tutorial-list","Redis");jedis.lpush("tutorial-list","Mongodb");jedis.lpush("tutorial-list","Mysql");但是,当我使用多线程推送r

java - 为什么不能在tomcat上使用jedis池释放jedis资源

使用Tomcat运行网络应用程序。我使用jedis连接到我们的redis服务器。我使用的每个方法都是在finallayblock中调用jedis.close()但看起来没有将jedis资源返回到池中。使用netstat-atnlp|grep6379连接数在不断增长。直到jedis客户端抛出“JedisConnectionException:无法从池中获取资源”。我调试代码。jdeis.close()确实运行了。我的代码有什么问题吗?帮帮我,这已经让我们的服务器宕机很多次了。这是我的jedispomconfredis.clientsjedis2.7.3tomcat是apache-tomc