求问一个redis处理list的问题

李晚晚 2018-11-14 06:56:50
由于对redis并不是太熟悉,今天遇到一个问题,不是太清楚应该怎么样处理更合适,另外也有一些疑问,期望牛牛们,可以帮忙一下,感谢了。
就是如果redis中一个list很大,即list里面存的数据很多。现在在Java代码中处理该list,那么Java中每次pop或者push的时候,都会需要一个新的链接吗?如果用类似LRANGE,那怎么样删掉已经取出来的数据呢?
或者如果对于redis中一个list很大的情况,要怎么样处理比较合适呢?
我真的不知道在哪里输入积分。真的不知道,我也不想发蛋贴的。我真的不知道呀。
...全文
243 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
李晚晚 2018-11-16
  • 打赏
  • 举报
回复
引用 6 楼 FangYANYI 的回复:
引用 3 楼 执笔记忆的空白 的回复:
我不明白这个场景下想问的是什么。 问连接池?还是redis本身处理数据,又或是list如何处理大量数据?
面试官的意思可能是你的list可能会很大,处理可能需要非常频繁访问redis对应就可能会占用更多的链接,留给其他的就会少了。在业务量大的时候可能会导致连接池被耗尽。
嗯嗯,就是这个意思。 除了用到数据库连接池。还有其他的优化方式或者处理方式吗?
李晚晚 2018-11-16
  • 打赏
  • 举报
回复
引用 7 楼 masteryourself 的回复:
如果用jedis的话,是会重新打开一个连接的,除非你自己写了个连接池或者说一直开一个连接,如果是用springdata-redis则不用考虑这个问题,因为redisTemplate是用连接池管理的。你说的其他方面没怎么看懂,不知道想问啥
嗯嗯,谢谢你了。 他的意思应该就是list数据量很大的情况下,数据库连接问题。 另一个问题就是,如果用类似lrange命令获取list的元素。因为pop每次就获取一个元素,并且在获取后在list中就删除了该元素。但是用lrange可以一次性获取很多,比如获取5个,但是lrange命令只是获取,并没有将获取的元素移出list队列。那要怎么样清空list呢。
masteryourself 2018-11-16
  • 打赏
  • 举报
回复
如果用jedis的话,是会重新打开一个连接的,除非你自己写了个连接池或者说一直开一个连接,如果是用springdata-redis则不用考虑这个问题,因为redisTemplate是用连接池管理的。你说的其他方面没怎么看懂,不知道想问啥
FangYANYI 2018-11-16
  • 打赏
  • 举报
回复
引用 3 楼 执笔记忆的空白 的回复:
我不明白这个场景下想问的是什么。 问连接池?还是redis本身处理数据,又或是list如何处理大量数据?
面试官的意思可能是你的list可能会很大,处理可能需要非常频繁访问redis对应就可能会占用更多的链接,留给其他的就会少了。在业务量大的时候可能会导致连接池被耗尽。
小流氓dy 2018-11-16
  • 打赏
  • 举报
回复
是不是业务场景你没说清楚,是不是面试官想让你设计一个合理的redis的key,比如说按天拆分成很多个list,那样一个连接处理的数据就很少了,根本不需要考虑什么连接的问题了,业务场景不明确,随便说的
maradona1984 2018-11-16
  • 打赏
  • 举报
回复
引用 9 楼 suixinsuoyu12519 的回复:
引用 6 楼 FangYANYI 的回复:
[quote=引用 3 楼 执笔记忆的空白 的回复:]我不明白这个场景下想问的是什么。 问连接池?还是redis本身处理数据,又或是list如何处理大量数据?
面试官的意思可能是你的list可能会很大,处理可能需要非常频繁访问redis对应就可能会占用更多的链接,留给其他的就会少了。在业务量大的时候可能会导致连接池被耗尽。

嗯嗯,就是这个意思。
除了用到数据库连接池。还有其他的优化方式或者处理方式吗?[/quote]
这能怎么优化?
一是业务上的优化,不让频繁操作这个list
二是做限流
李晚晚 2018-11-15
  • 打赏
  • 举报
回复
引用 4 楼 shijing266 的回复:
要不要加入我的Java群? 里面很多热心人帮你解答和分析哦。 群号:157797573
谢谢你了,我稍后假如群吧。
  • 打赏
  • 举报
回复
要不要加入我的Java群? 里面很多热心人帮你解答和分析哦。 群号:157797573
  • 打赏
  • 举报
回复
我不明白这个场景下想问的是什么。 问连接池?还是redis本身处理数据,又或是list如何处理大量数据?
李晚晚 2018-11-14
  • 打赏
  • 举报
回复
引用 1 楼 u012318873 的回复:
不太清楚具体场景, 处理list的场景频繁吗? 能否对list进行拆分。 不会存在每次操作这个list 需要新的链接,redis连接池可以设置, 其中的开销可以忽略不记。 而且你说的list很大 大概是多大, 写redis的时候可以压缩一下再存, 总之可操作的手段很多,需要根据实际情况来定
嗯,谢谢你的回复了。是今天面试的时候问到的呢。 当时我说的场景是,list里面存放一些失败操作的用户id,然后会有定时作业去处理这个list 面试官说, list如果很大,每次pop的时候不会占用连接吗?然后我就懵了,我也不知道呀。所以没有具体的业务场景,意思就是list里面的数据非常大。如果用连接池,每次pop的时候,是不是去连接池里面取连接呢,如果是的话,那还是每次pop操作都需要连接一次数据库,是这样的吗? 我的疑问是,每次pop操作的时候,会不会连接一次redis。
_jant 2018-11-14
  • 打赏
  • 举报
回复
不太清楚具体场景, 处理list的场景频繁吗? 能否对list进行拆分。 不会存在每次操作这个list 需要新的链接,redis连接池可以设置, 其中的开销可以忽略不记。 而且你说的list很大 大概是多大, 写redis的时候可以压缩一下再存, 总之可操作的手段很多,需要根据实际情况来定

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧