如我有20个国家的人口信息,每个国家暂且算1000人,总数据2W左右,在放缓存时:A:redis.put('一个总key',2w的人口数据,比如都放在一个map里)B:redis.put('一个人的key',一个人的信息)redis.put('一个人的key',一个人的信息)redis.put('一个人的key',一个人的信息)...redis.put('一个人的key',一个人的信息)(放2W个key-value)那么来个人后,我要查询redis,哪种比较好呢?
2 回答
UYOU
TA贡献1878条经验 获得超4个赞
B的方法虽然比较简单暴力。但是键不易管理。除非你redis服务器仅仅是只存这些信息。我推荐用散列,跟你A的想法有点类似//set(键,键的属性,值)//get(键,键的属性)redis.hset('Map','first_name','personinfo');redis.hset('Map','second_name','personinfo');redis.hset('Map','third_name','personinfo');......散列的好处是可以一直对键加上新的属性,我们暂且这么认为。这个问题场景,我们可以把一个用户当成是一个属性。属性的上限是2^32-1,不用担心数量问题。还有查找键的某个属性复杂度也是O(1),效率也不用去担心。redis.hgetall('Map')这个还可以取出所有用户的数据,更好管理。大概思路是如此,可能我们语言用不一样,存取数据的函数名会有点差异,你参考一下
红糖糍粑
TA贡献1815条经验 获得超6个赞
那么来个人后,我要查询redis,哪种比较好呢?怎么叫好呢?如果是不计任何附加问题,只考虑快的话,那么用B好如果是要考虑其他的问题,我也不会用A,这不是redis的长处,而且才2W的数据,就算很频繁也不会有什么问题。好吧,本来我想分开说说A和B的长处和不同的使用,但实在是想不出为啥会用A。
添加回答
举报
0/150
提交
取消