城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

redis生产环境如何有效查找哪些无过期时间的key

9月13日 不将就投稿
  在项目中,Redis不应该被当作传统数据库来使用;储存大量没有过期时间的数据。如果储存大量无过期时间,而且无效的key的话;再加上Redis本身的过期策略没有被正确设置,就会大量占用内存。这样就会导致再多的内存资源也不够用。最近在项目中,就遇到这样的情况。
  情况大致是这样,项目中采用Redis二级存储(自己造的一个概念)。大概的意思就是先使用UUID生成一个uuid作为这个uuid作为一个版本存到缓存key为ACLCACHEVERSIONKEY中,即SETACLCACHEVERSIONKEYuuid
  然后在不uuid作为另外一个key的一部分。即ACLUSERuuid,比如uuid的值为26a26b84578d40bfab15aeb188a56393,则key为ACLUSER26a26b84578d40bfab15aeb188a56393,缓存到key的数据为HMSETACLUSER26a26b84578d40bfab15aeb1id112345id245678
  因为ACLUSER26a26b84578d40bfab15aeb188a56393的是否过期是通过程序中生成新版本的uuid,存储新的用户权限数据后;在程序中删除。因为程序的不健壮,导致有大量过期的版本没有及时删除。经过长年的积累导致Redis存在大量这些无效版本的key。
  在测试环境中,可以使用keys命令,模糊查询到需要的key,但这个操作只适合在测试环境中使用,不适合在生产环境中使用,原因是Redis是单线程运行的,当Redis中的数据量很大时,由于此操作会遍历所有数据,并将结果一次性全部返回,执行时间会比较长,从而导致后续操作等待,直接影响系统的正常运行。解决的办法是使用scan命令:scancursor〔MATCHpattern〕〔COUNTcount〕cursor:表示游标,从0开始,此命令执行完后会返回一个新的cursor值。如果cursor!0,则表示还有key未返回,需要再调用scan,并使用此新的cursor值,来获取下一批如果cursor0,则表示遍历结束。pattern:表示模糊匹配的样式count:表示一批最多返回多少条记录,默认为10
  集群环境下使用jedis的代码实现importjava。util。HashSimportjava。util。Simportredis。clients。jedis。HostAndPimportredis。clients。jedis。JedisCimportredis。clients。jedis。JedisPoolCimportredis。clients。jedis。ScanPimportredis。clients。jedis。ScanRpublicclassRedisTester{publicstaticJedisClustergetJedisCluster(){JedisPoolConfigconfignewJedisPoolConfig();confignewJedisPoolConfig();config。setMaxTotal(60000);设置最大连接数config。setMaxIdle(1000);设置最大空闲数config。setMaxWaitMillis(3000);设置超时时间config。setTestOnBorrow(true);集群结点SetHostAndPortjedisClusterNodenewHashSetHostAndPort();jedisClusterNode。add(newHostAndPort(yun1。cacheyum。com,6379));jedisClusterNode。add(newHostAndPort(yun2。cacheyum。com,6379));jedisClusterNode。add(newHostAndPort(yun3。cacheyum。com,6379));jedisClusterNode。add(newHostAndPort(yun4。cacheyum。com,6379));jedisClusterNode。add(newHostAndPort(yun5。cacheyum。com,6379));jedisClusterNode。add(newHostAndPort(yun6。cacheyum。com,6379));JedisClusterjcnewJedisCluster(jedisClusterNode,1000,1000,1000,admin321,config);}publicstaticvoidscanCluster(){JedisClusterredisgetJedisCluster();redis。getClusterNodes()。values()。stream()。forEach(pool{Stringcur0;try(JedisjedisNodepool。getResource()){while(!done){ScanParamsscanParamsnewScanParams();scanParams。match(ACLUSER);scanParams。count(10);ScanResultStringrespjedisNode。scan(cur,scanParams);for(Stringresult:resp。getResult()){System。out。println(key:result);}curresp。getStringCursor();System。out。println(cursor:cur);if(cur。equals(0)){}}}});}publicstaticvoidmain(String〔〕args){scanCluster();}}
  单机情况下jedis代码实现importjava。util。HashSimportjava。util。Simportredis。clients。jedis。HostAndPimportredis。clients。jedis。Jimportredis。clients。jedis。JedisPoolCimportredis。clients。jedis。ScanPimportredis。clients。jedis。ScanRpublicclassRedisTester{publicstaticJedisgetAloneRedis(){JedisjedisnewJedis(127。0。0。1,6379);System。out。println(connectsuccessfully);jedis。auth(admin321);}publicvoidscanAlone(){JedisjedisgetAloneRedis();Stringcursor0;do{ScanParamsscanParamsnewScanParams();scanParams。match(ACLUSER);scanParams。count(10);ScanResultStringsrjedis。scan(cursor,scanParams);ListStringresultListsr。getResult();for(Stringresult:resultList){System。out。println(key:result);}cursorsr。getStringCursor();System。out。println(cursor:cursor);}while(!cursor。equals(0));}publicstaticvoidmain(String〔〕args){getAloneRedis();}}
  使用以下代码就可以找到那些版本的uuid是无效的。找到后,再调用del指令删除;或者为了更加保险,调用expire加个过期时间。让key在某个时间内失效也可以。
投诉 评论 转载

社保都已经5G联网了社保已经全国统筹啦那全国统筹是什么意思呢?其实就是社保全国联网了你在全国的每个地方交的社保都可以查到以后再也不需要跨省转移社保交社保再也不是一件麻……knx智能照明系统人因照明可降低有害短波蓝光比重缓解视觉疲劳安科瑞于洋人因照明在近年来是非常火的,因为这种照明主张以人为本,所以一直以来都备受大家的追捧!人因照明技术指的是应用照明技术、让灯光、气候和空间融为一体,从而让人在情绪、……数科日报丨阿里文娱接盘优酷全资控股大麦字节撤销人才发展中心01丨阿里文娱接盘优酷全资控股大麦天眼查App显示,近日,北京大麦文化传播有限公司发生工商变更,优酷信息技术(北京)有限公司退出其100股份,新增阿里巴巴文化娱乐有限公司……黑鲨5系列发布,用了三代骁龙芯,配置一览黑鲨出新了,看之前爆料还以为是两款机型,结果直接来了次三代骁龙同堂,推出黑鲨5、黑鲨5RS和黑鲨5Pro三款机型:黑鲨5搭载骁龙870处理器,采用三星FHD的AMOLED……redis生产环境如何有效查找哪些无过期时间的key在项目中,Redis不应该被当作传统数据库来使用;储存大量没有过期时间的数据。如果储存大量无过期时间,而且无效的key的话;再加上Redis本身的过期策略没有被正确设置,就会大……2021macbookpro使用一周16g内存,1t硬盘的配置,平时经常开12个androidstudio,13个idea,偶尔docker,mysql等等,本来想定制32g,512ssd的,一个要等,另外一个,……如何看待明星收入比中国科学家或院士都要高的问题?必须改变制度,对明星收入课以重税,对科学家不收税重奖,只有科技才能改变国家,才使国家富强,才使人们崇尚科学,沉醉娱乐误人误国。这就是中国至今只是娱乐大国而不是科技大国的主……产品的价值回归苹果手机的诞生和成功,让产品经理一下子仿佛具备了某种魔力,一时间,用户体验、商业模式、降维打击、互联网思维等等各种新术语瞬间在网上涌现,似乎人们一下找到了商业的真理,循着这条真……9月22日,4场新品扎堆发布9月15日(明天),iPhone13即将正式发布,厂商都赶在苹果秋季新品发布会的前一天宣布重要消息。一周后,也就是9月22日,即将有4场手机发布会。9月22日14:00r……吐槽华米手表去年买了个华米手表1s,价格399,用了一年,感觉挺好的,待机时间长,微信,电话来了都可以直接显示在手表上,也可以顺便看时间,时间一用长,就是颜值感觉不行,然后就考虑换一个新的……画质好开机无广告!8月份值得入手的智能电视,这三款闭眼买不难发现如今越来越多的设备都开始讲起了智能化,与传统的电视机相比,如今的智能电视不仅在功能上越发丰富,并且已经成为了家庭客厅中心的流量入口。不少手机厂商也开始推出相对应的智能电……把特斯拉踢出中国,会不会对中国新能源车发展有帮助?近段时间,因为特斯拉的刹车问题,又在新能源车圈内掀起了一股话题。部分车友不断抨击着特斯拉和其他的新能源汽车汽车,觉得目前并不完善,事故频发,不像燃油车一般的完善。甚至有一……
澳大利亚研究方脸比鸭蛋脸看起来更具攻击性,方脸年轻男性攻击性探访苹果最神秘的设计团队手把手教你调用微信扫一扫!三分钟包会js中平级数组和树形结构数据相互转换彻底抛弃幻想!华为正式开启官翻二手机业务100原厂鸿蒙OS系VC液冷散热红米K40S发布,红米K40惊现大米价改写发烧史从一穷二白到全球第一,京东方是怎么实现逆袭的?iPhoneSE3通过认证A15处理器支持5G三月发布抖音电商促进农货产销对接,受邀参加全国精准扶贫典型案例研讨会外媒续航实测iPhone13ProMax进步显著,安卓这款机60岁老人凌晨三点王者五杀?腾讯回应?思MindSpore蛋白质结构预测模型全球竞赛第一
联想扬天系列一体机哪款好热门型号推荐图文杨公挨星二十四山秘传日课真诀热传聚热点网 窗外青春期少男应该掌握哪些性知识6年级腊八这一天的作文营业执照上的法人代表是公司某员工,假如出了事谁承担责任?人之病札记11快乐在哪里热文导师不得违规拖延研究生毕业橱柜定做好不好我和妈妈的对话最欣赏的一句话

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁