redis多级存储及查询

描述

如何设计redis的数据结构,使用redis存储多级关系并快速查询
假设:市是最后一级单位(如果是区县也同理)
1).查询全国的数据?
2).查询四川省的数据?
3).查询成都市的数据?

方案

方案1:
将“context_prefix_国家_省_市”作为key,value保存我们要查询的数据,这样便于保存  

example:

key														value
gdp_中国_四川省_成都市									avg=97&sum=1800
gdp_中国_四川省_绵阳市									avg=30&sum=60
gdp_中国_广东省_广州市									avg=150&sum=3600
gdp_中国_河北省_保定市									avg=90&sum=2000

点评:但是查询的话只能模糊查询,效率很差,不推荐(key/value实现)

方案2:
1).将所有国家存到hash,hash中的国家名是key,value是这个国家对应的hash的key  
2).将这个国家的所有省存到hash,省名字是key,value是这个省所对应的hash的key  
3).将省下所有市存到hash,市的名字是key,value是这个省下所有市的key  
4).通过市区可以取到所要市的值  

example:

国家级hash表(hash):
				hash key		key					value
				gdp_国家:
								中国					gdp_中国
								英国					gdp_英国
								美国					gdp_美国


省级hash表(hash):
				hash key		key					value
				gdp_中国:
								四川省				gdp_中国_四川省
								贵州省				gdp_中国_贵州省
								云南省				gdp_中国_云南省
								广东省				gdp_中国_广东省


市级hash表(hash):
				hash key		key					value
				gdp_中国_四川省:
								成都市				gdp_中国_四川省_成都市
								绵阳市				gdp_中国_四川省_绵阳市
								德阳市				gdp_中国_四川省_德阳市


市区的key/value数据(键值对):
				key									value
				gdp_中国_四川省_成都市				avg=97&sum=1800
				gdp_中国_四川省_绵阳市				avg=30&sum=60
				gdp_中国_四川省_德阳市				avg=24&sum=54

点评:该方式要查询市区的话,需要4次访问redis,相对模糊查询效率会高一些,但是4次网络io开销也不小(hash+key/value实现)

改进:额外增加所有市(前提是市名没有重复的)的一个hash,市名字就是key,value就是那个市所存储值得key,这样如果要查询某个市的数据,只需要2次网络io即可,如果要查询省的话,我们遍历省下面所有市的数据即可

方案3
所有市级hash表(hash):
				hash key		key					value
				gdp_all_city:
								成都市				gdp_中国_四川省_成都市
								绵阳市				gdp_中国_四川省_绵阳市
								德阳市				gdp_中国_四川省_德阳市
								北京市				gdp_中国_北京_北京市
								上海市				gdp_中国_上海_上海市
								广州市				gdp_中国_广东省_广州市


市区的key/value数据(键值对):
				key									value
				gdp_中国_四川省_成都市				avg=97&sum=1800
				gdp_中国_四川省_绵阳市				avg=30&sum=60
				gdp_中国_四川省_德阳市				avg=24&sum=54
				gdp_中国_广东省_广州市				avg=120&sum=2304
posted @ 2018-08-07 15:36  shenjie2017  阅读(2468)  评论(0编辑  收藏  举报