Redis已经越来越多地应用到互联网技术中,而关于Redis的相关问题,也成为面试中必不可少的一部分,本文开始将会逐渐把我了解到的关于Redis的一些面试问题整理出来,供各位参考,如有不对之处,烦请指正。

简介

Redis共支持五种数据结构,分别是string(字符串)、hash(字典)、list(列表)、set(集合)、zset(有序集合)。

详解

string(字符串)

数据结构:Redis中string数据结构为动态字符数组,采用预分配冗余空间的方式来减少内存分配。

扩容机制:当字符串长度小于1MB时,扩容都是加倍现有空间。当字符串长度大于1MB时,每次扩容1MB,最大长度为512MB。

计数:当值为整数时,可以进行自增操作。范围为signed long 的最大值和最小值之间。

hash(字典)

数据结构:Redis中list相当于Java的HashMap。

渐进式rehash:在Redis中针对hash冲突采用的是渐进式rehash操作。渐进式rehash会同时保留新旧两个hash结构,查询时同时查询两个hash结构。在后续的定时任务及hash操作的过程中完成从旧hash结构,迁移到新hash结构的过程。

list(列表)

数据结构:Redis中list相当于Java的LinkedList,所以写操作时间复杂度为O(1),读操作时间复杂度为O(n)。

set(集合)

数据结构:Redis中set相当于Java的HashSet。

zset(有序集合)

数据结构:Redis中zset类似于一个带权值(score)的SortedSet。其内部通过跳跃列表(关于跳跃列表,将会在后期的文章中进行分享)实现。

总结

1.通用规则

hash、list、set、zset这四种数据结构为容器型数据结构,所有容器型数据结构遵守以下规则:

  1. create if not exists:当容器不存在时,需先创建一个容器,再进行操作;

  2. drop if not elements:当容器内无元素时,会立即删除容器,释放内存。

2.过期时间

过期时间以对象为单位,如整个hash结构。

当string被set方法修改后,过期时间将会失效。

Redis01——Redis究竟支持哪些数据结构的更多相关文章

  1. Redis所支持的数据结构

    1.启动Redis2.Redis所支持的数据结构 2.1.Redis常用操作 2.2.String类型及操作 2.3.Hash类型及操作 2.4.List类型及操作 2.5.Set类型及操作 2.6. ...

  2. SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.

    SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis. 特性 替代 Redis 数据库, Redis 的 100 倍容量 LevelDB 网络支持, 使用 C/C++ ...

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

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435 一.redis 数据结构使用场景 原 ...

  4. redis中5种数据结构的使用

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  5. Redis 的几种数据结构&五种数据类型对象

    先看几种数据结构 通过分析底层的数据结构,学习如何根据场景选型和设计 1,简单动态字符串 redis使用的字符串SDS有别于C语言中的字符串 a, 结构 free字段为已分配但未使用的空间 len为已 ...

  6. Redis中的基本数据结构

    Redis基础数据结构 基础数据结构 sds简单动态字符串 数据结构 typedef struct sdstr{ int len // 字符串分配的字节 int free // 未使用的字节数 cha ...

  7. Redis 概念以及底层数据结构

    Redis 简介 REmote DIctionary Server(Redis) 是一个由SalvatoreSanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C ...

  8. Redis中5种数据结构的使用场景

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

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

    这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下 一.redis ...

随机推荐

  1. E丢丢App重设计总结

    E丢丢学习App是华夏大地教育可以有限公司旗下的一款产品,专为提升学历者打造,它整合了线上+跟踪的 (E平台)功能,方便工作人员随时随地管理账号.跟进学员:同时还可以随时了解教育行业的新闻资讯.一对一 ...

  2. inventor卸载/完美解决安装失败/如何彻底卸载清除干净inventor各种残留注册表和文件的方法

    在卸载inventor重装inventor时发现安装失败,提示是已安装inventor或安装失败.这是因为上一次卸载inventor没有清理干净,系统会误认为已经安装inventor了.有的同学是新装 ...

  3. (转)假如没有OI By Vani

    假如没有OI                                                                                               ...

  4. SpringMVC学习笔记九:拦截器及拦截器的简单实用

    SpringMVC中的interceptor拦截器是非常重要的,它的主要作用就是拦截指定的用户请求,并进行相应的预处理和后处理. 拦截时间点在"处理器映射器根据用户提交的请求映射出所要执行的 ...

  5. MUI 提问框多个按钮的回调函数

    var btns = new Array("按钮1", "按钮2"); mui.confirm("这是信息", "这是标题&quo ...

  6. python 前端素材提供

    小图标素材:http://fontawesome.dashgame.com/

  7. Python实现线程交替打印字符串

    import threading con = threading.Condition() word = u"12345上山打老虎" def work(): global word ...

  8. Future 异步多线程

    进来接手一个任务,需要做异步多线程数据源调用,数据源的配置和使用请阅读相关文章: https://www.cnblogs.com/haoliyou/p/9604452.html 配置好数据源后,实质上 ...

  9. Binder机制简析(三)

    注册Service Service组件运行在Server进程中,首先要将Service注册到Service Manager中,再启动一个Binder线程池来等待和处理Client的通信请求. 注册过程 ...

  10. 张益肇:AI 医疗,微软有哪些布局?

    编者按:近几年来,医疗和人工智能碰撞出了相当多的火花,大量资金短期投入到医疗领域当中.然而在微软亚洲研究院副院长张益肇博士看来,人工智能医疗是一场持久战,大家一定要沉下心多调研.多思考.多学习. 人工 ...