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

问题描述

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

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

解决方案

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

解决方案二:

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

解决方案三:

先说下这几种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,希望以上对你有帮助。

时间: 2024-09-19 18:00:47

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

Redis开发运维实践开发设计规范之内存考虑

4.4 内存考虑 只要有可能的话,就尽量使用散列键而不是字符串键来储存键值对数据,因为散列键管理方便.能够避免键名冲突.并且还能够节约内存. 具体实例: 节约内存:Instagram的Redis实践 blog.nosqlfan.com/html/3379.html 如果将redis作为cache进行频繁读写和超时删除等,此时应该避免设置较大的k-v,因为这样会导致redis的 内存碎片增加,导致rss占用较大,最后被操作系统OOM killer干掉.一个很具体的issue例子请见:https:/

redis中hash类型介绍和命令详解

在redis中,hash数据类型存储的数据与mysql数据库中存储一条记录极为相似,是一个string类型的field和value的映射表,它特别适合用于存储对象,但字段值只能是字符串,不支持其他类型. Redis hash是一个string类型的field和value的映射表.它的添加.删除操作都是 O(1) (平均). hash特别适合用于存储对象.相较于将对象的每个字段存成单个 string类型.将一个对象存 储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象.省内存的原

PHP导出Redis数据到另一个Redis中的方法

 这篇文章主要介绍了使用PHP导出Redis数据到另一个Redis中的方法,需要的朋友可以参考下 从某个 Redis db 导出数据到另一个 Redis db 的PHP脚本:   代码如下:$from = '127.0.0.1:6200/6'; $to   = '127.0.0.1:6200/8';   $from_redis = redis_init($from); $to_redis   = redis_init($to);   $keys  = $from_redis->keys('*')

简介Redis中的showlog功能

  这篇文章主要介绍了简介Redis中的showlog功能,作者同时对比了DEL命令的性能,需要的朋友可以参考下 Redis 有一个实用的slowlog功能,正如你可以猜到的,可以让你检查运行缓慢的查询. Slowlog 将会记录运行时间超过Y微秒的最后X条查询. X 和 Y 可以在 redis.conf 或者在运行时通过 CONFIG 命令: 代码如下: CONFIG SET slowlog-log-slower-than 5000 CONFIG SET slowlog-max-len 25

Redis中5种数据结构的使用场景介绍

这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下. 一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢? String--字符串 Hash--字典

Redis中5种数据结构的使用场景介绍_Redis

一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢? String--字符串 Hash--字典 List--列表 Set--集合 Sorted Set--有序集合 下面我们就来简单说明一下它们各自的使用场景: 1. String--字符串 String 数据结构是简单的 key-

redis中5种数据类型介绍

redis和memcached两种缓存,个人觉得redis更好用,因为它不仅提供了丰富的数据类型,还能保证数据的持久性,下面就来简单的介绍一下redis中常用的几种数据类型. 1. 字符串类型(string) 这是redis中最基本的类型,也是最常用的类型,跟memcached一样,即一个key对应一个值这种.操作也很简单,常用操作命令有get.set.del等. 2. 链表类型(list) 链表类型有点类似于编程语言中的数组一样,可以用一个key存一组数据进去.其实list类型就是一个双向链表

asp.net中如何编写hash函数计算中文的hash值使之生成二进制数01

问题描述 asp.net中如何编写hash函数计算中文的hash值使之生成二进制数01 asp.net中如何编写hash函数计算中文的hash值使之生成二进制数01 解决方案 产生16进制数,每一位都可以查表得到特定的4位二进制数. 解决方案二: "使之生成二进制数01"是什么意思?一般来说有中文的固定编码和hash函数就可以生成hash了 解决方案三: 给你个样子吧 using System; using System.Security.Cryptography; namespace

redis中使用redis-dump导出、导入、还原数据实例

redis的备份和还原,借助了第三方的工具,redis-dump 1.安装redis-dump 复制代码代码如下: [root@localhost tank]# yum install ruby rubygems ruby-devel   //安装rubygems 以及相关包   [root@localhost tank]# gem sources -a http://ruby.taobao.org/   //源,加入淘宝,外面的源不能访问   http://ruby.taobao.org/ a