由于对redis并不是太熟悉,今天遇到一个问题,不是太清楚应该怎么样处理更合适,另外也有一些疑问,期望牛牛们,可以帮忙一下,感谢了。
就是如果redis中一个list很大,即list里面存的数据很多。现在在Java代码中处理该list,那么Java中每次pop或者push的时候,都会需要一个新的链接吗?如果用类似LRANGE,那怎么样删掉已经取出来的数据呢?
或者如果对于redis中一个list很大的情况,要怎么样处理比较合适呢?
我真的不知道在哪里输入积分。真的不知道,我也不想发蛋贴的。我真的不知道呀。
就是如果redis中一个list很大,即list里面存的数据很多。现在在Java代码中处理该list,那么Java中每次pop或者push的时候,都会需要一个新的链接吗?如果用类似LRANGE,那怎么样删掉已经取出来的数据呢?
或者如果对于redis中一个list很大的情况,要怎么样处理比较合适呢?
我真的不知道在哪里输入积分。真的不知道,我也不想发蛋贴的。我真的不知道呀。
解决方案 »
- 验证用户名是否存在。Ajax+Action怎么写了?
- checkbox判断是否选中并赋值
- 需要做一个小项目,搭建一个什么样的框架比较好?页面设计怎么做?
- Weblogic的收费问题
- 在线求救----SSH类型转换之批量封装Set集合类型的属性的问题
- 请教高手关于xquery的疑惑
- lucene查询不到结果
- xsl问题
- Unable to initialize threads: cannot find class java/lang/Thread怎么解决?
- 如何用ejb的entity bean实现组合查询????高难度问题!!!
- 使用Java实现钉钉企业应用消息推送
- jpa 如何自定义查询 一对多映射
嗯,谢谢你的回复了。是今天面试的时候问到的呢。
当时我说的场景是,list里面存放一些失败操作的用户id,然后会有定时作业去处理这个list
面试官说, list如果很大,每次pop的时候不会占用连接吗?然后我就懵了,我也不知道呀。所以没有具体的业务场景,意思就是list里面的数据非常大。如果用连接池,每次pop的时候,是不是去连接池里面取连接呢,如果是的话,那还是每次pop操作都需要连接一次数据库,是这样的吗?
我的疑问是,每次pop操作的时候,会不会连接一次redis。
他的意思应该就是list数据量很大的情况下,数据库连接问题。
另一个问题就是,如果用类似lrange命令获取list的元素。因为pop每次就获取一个元素,并且在获取后在list中就删除了该元素。但是用lrange可以一次性获取很多,比如获取5个,但是lrange命令只是获取,并没有将获取的元素移出list队列。那要怎么样清空list呢。
除了用到数据库连接池。还有其他的优化方式或者处理方式吗?
这能怎么优化?
一是业务上的优化,不让频繁操作这个list
二是做限流