java - redis如何存储?
高洛峰
高洛峰 2017-04-17 13:35:08
[Java讨论组]

如我有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,哪种比较好呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
PHPz

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')这个还可以取出所有用户的数据,更好管理。

大概思路是如此,可能我们语言用不一样,存取数据的函数名会有点差异,你参考一下

PHP中文网

那么来个人后,我要查询redis,哪种比较好呢?

怎么叫好呢?
如果是不计任何附加问题,只考虑快的话,那么用B好
如果是要考虑其他的问题,我也不会用A,这不是redis的长处,而且才2W的数据,就算很频繁也不会有什么问题。

好吧,本来我想分开说说A和B的长处和不同的使用,但实在是想不出为啥会用A。

迷茫

你有解决用散列后,查询的问题呢?尤其是多条件的查询!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号