| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> redis的list、set、hash -> 正文阅读 |
|
[数据结构与算法]redis的list、set、hash |
list::数据结构为quicklist,首先列表中数据比较少时会使用一块连续的内存存储,这个结构是ziplist,也即是压缩链表,他将所有的元素紧挨着一起存储,分配的是一块的内存,当数据量比较多时才改成quiclist, 即双向链表,将很多个ziplist双向链接。 虽然lists有这样的优势,但同样有其弊端,那就是,链表型lists的元素定位会比较慢,而数组型lists的元素定位就会快得多。
set: 字典,哈希结构
redis hash :键值对集合,是一个string类型的field和value的映射表,hash特别适用于存储对象
有序列表zset: 1,hash 2,跳跃表
Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的Key的信息,这里就有两种方式: 一、keys * 、keys codehole* 分别是查询全部的key以及查询前缀为codehole的key。特点太暴力,性能不好,搜索的是整个redis; 缺点: 1、没有 offset、limit 参数,一次性吐出所有满足条件的 key,万一实例中有几百 w 个 key 满足条件,当你看到满屏的字符串刷的没有尽头时,你就知道难受了。 2、keys 算法是遍历算法,复杂度是 O(n),如果实例中有千万级以上的 key,这个指令就会导致 Redis 服务卡顿,所有读写 Redis 的其它的指令都会被延后甚至会超时报错,因为 Redis 是单线程程序,顺序执行所有指令,其它指令必须等到当前的 keys 指令执行完了才可以继续。 二、由于keys命令存在以上的缺点,所以redis引入以下scan命令,scan命令的特点: 1、复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程; 2、提供 limit 参数,可以控制每次返回结果的最大条数,limit 只是一个 hint,返回的结果可多可少; 3、同 keys 一样,它也提供模式匹配功能; 4、服务器不需要为游标保存状态,游标的唯一状态就是 scan 返回给客户端的游标整数; 5、返回的结果可能会有重复,需要客户端去重复,这点非常重要; 6、遍历的过程中如果有数据修改,改动后的数据能不能遍历到是不确定的; 7、单次返回的结果是空的并不意味着遍历结束,而要看返回的游标值是否为零三、 scan命令具体用法: 1、scan提供3个参数:第一个是 cursor 整数值,第二个是 key 的正则模式,第三个是遍历的 limit hint, 例如:scan 0 match key99* count 1000 解释: 扫描是一个光标基于迭代器。这意味着在每次调用命令时,服务器都会返回一个更新的游标,用户需要在下次调用中将其用作游标参数。 当游标设置为 0 时,迭代开始,当服务器返回的游标为 0 时,迭代终止。
请务必注意,MATCH 筛选器是在从集合中检索元素后,即在将数据返回给客户端之前应用的。这意味着,如果模式与集合中的元素匹配非常少,则在大多数迭代中可能不会返回任何元素。示例如下所示:
如您所见,大多数调用返回了零个元素,但最后一个调用使用 COUNT 为 1000,以强制命令对该迭代执行更多扫描。 3、redis的扩容: 旧的数据移动到新的新组下,redis采用渐进式 rehash,同时保留旧数组和新数组
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:40:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |