2 hirochen hirochen 于 2014.11.20 16:34 提问

redis中的list,hash,set,zset的内存占用或效率的大概次序是怎么样的?

用一个键来存储一堆值,如果list,hash,set,zset业务都可以实现,从内存效率上来看,大概的顺序是怎么样的?

3个回答

caozhy
caozhy   Ds   Rxr 2014.11.20 17:20

list是有序的,set是无序的,后者性能更高,前者适合实现堆栈、队列这些需要顺序的结构。这里说的序是指插入序,不是排序。zset是有序列表,这里的有序是排序,不是插入序。hash适合检索信息,也就是从hash中查找数据会很快。

believetruelove
believetruelove   2015.01.04 22:32

先说下这几种redis 数据结构底层实现对应的数据结构:
list 数目较小时可以理解为一种特殊数组(ziplist),数目大于配置的上限时底层实现会自动切换成链表
hash 数目较小时可以理解为一种特殊数组(ziplist),数目大于配置的上限时底层实现会自动切换成hash table
set 根据元素的类型 int 时经过封装的数组(intset),其他则为hash table
sort set 数目较小时可以理解为一种特殊数组(ziplist),数目大于配置上限时就会切换成跳表skip list

内存占用上来说一般可认为跳表会略大于 链表\数组\hash table 其他的数据结构之间差异不大,如果真要比较可能要查看源码计算。
时间效率上来说,要具体到业务常用的操作比较才有意义,比如 同样对list数据结构操作 rpop 时间复杂度O(1) 而 LRANGE时间复杂度为O(N)
每个命令的时间复杂度官网上都能查到。
想要了解redis底层实现,推荐个链接 redisbook.com,希望以上对你有帮助。

llihua
llihua 回答得太好了,必须赞一个
接近 2 年之前 回复
yttccx2009
yttccx2009   2014.11.20 16:45

set hash list zset
不需要顺序 就用set把。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!