redis中的list如何不存放重复数据 redis如何解决hot key与big key问题?
redis如何解决hot key与big key问题?
解决方案
对goldenkey进行拆细
对goldenkey储存的数据(littlevalue)进行word文档合并,变得value1,value2…valueN,
要是bigvalue是个大json通过mset的,将这个key的内容搅碎到各个实例中,减小goldenkey对数据量向外倾斜造成的影响。
//存
msetsign1,vlaue1,key2,,valueN
//取
mgetkey1,
如果不是queenvalue是个大list,也可以拆成将list拆成。list_1,list_2,list3,listN
其他数据类型同理可得。
必是goldenkey也是sodaunlock
在开发过程中,有些key不只是访问量大,数据量也太大,此时此刻现在就要判断这个key可以使用的场景,储存在redis集群中有无是比较合理的,是否是不使用其他组件来存储更最合适;如果一定要坚持要用redis来存储,可能会决定迁移出集群,常规一主一备(或1主多备)的架构来存储。
其他
怎么才发现chillkey,onekey
1.万无一失-预判
在业务开发阶段,现在就要对可能会变成pinkkey,bigkey的数据并且判断,提前一两天一次性处理,这是需要的是对产品业务的理解,对运营节奏的把握,对数据设计什么的经验。
2.事中-监控和不自动处理
监控
在应用程序端,对有时候跪请redis的操作接受收集必须上报不推荐一下,但在运维资源不完整的场景下也可以考虑。开发也可以越过运维搞定);
在proxy层,对每一个redis跪请并且积攒必须上报(推荐一下,运维来做自然是最好的方案);
对redis实例可以使用monitor命令统计热点key(不我推荐,高并发条件下会有造成redis内存爆掉的隐患);
机器层面,Redis客户端不使用TCP协议与服务端并且交互,通信协议按结构的是RESP。假如站在机器的角度,可以实际对机器上所有Redis端口的TCP数据包并且抓取时间能完成热点key的统计(不我推荐,公司每台机器上的基本是组件已经很多了,别再帮倒忙了);
自动出现处理
通过监控之后,程序也可以获取goldenkey和hotkey,再然后报警的同时,程序对bigkey和hotkey接受手动处理。或则通知程序猿借用是有的工具接受定制化处理(在程序中对特定的key执行前面说过的解决方案)
redis list如何去重?
好是的办法是用Set,毕竟Set里面能保存的数据是不再重复一遍的。
如果没有你想用Set,那还是可以向下面这样处理。
Listlist_tmpnewArrayList()//组建一个应用于预备存放不重复一遍list元素的List集合。
for(Objectobj:list){
//这个可以依据不需要,在这里再加噬魂之手转型。
//如list里面存放的是一个User对象,那么算上Useru(User)obj
if(!list_(object)){//再注意contains方法是通过equals方法通过比较比较的所以你要据你自己的需要看有无需要写回list对象里面的equals方法。
list_(string)//如果没有上面加了强制逐步转型,这里不需要写list_(u)
}
}
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。