redis知识整理
2023-12-24 20:22:38 2 举报
AI智能生成
Redis是一个开源的,高性能的,基于键值对的NoSQL数据库。它支持的数据类型丰富,包括字符串、哈希、列表、集合和有序集合。Redis提供了主从复制、哨兵和集群等多种高可用方案,支持数据持久化和AOF(Append-Only File)日志记录。在分布式系统中,它常被用作缓存、消息队列等。通过将数据存储在内存中,Redis可以实现极高的读写性能,支持事务、Lua脚本和地理位置索引等功能。
作者其他创作
大纲/内容
redis到底是单线程还是多线程
结论:redis是单线程的,但是严格意义上来讲,他并不是全面的单线程
原因:通常讲的单线程是指对外提供的键值存储服务主要流程是单线程,网络IO和数据读写是由单个线程完成,但是Redis其他功能:(持久化,异步删除,集群数据同步)都是由额外的线程来执行的
好处:防止同步代码占用主线程,导致阻塞,从而影响后续的代码执行
redis单线程为什么还能这么快
命令执行是基于内存操作的,一条命令在内存中执行大概在几十纳秒
命令执行是单线程的,没有线程的上下文切换开销
使用IO多路复用机制提高redis的I/O使用率
有着高效的数据存储结构,全局的Hash表以及其他高效数据结构,比如:压缩表,链表、跳表
redis数据结构-zset的底层实现
压缩链表:本质上就是一个数组,只不过增加了列表长度,尾部偏移量,列表元素个数,以及列表的结尾的标识,有利于快速的寻找列表的首尾的节点,但是对于寻找正常元素,效率仍然没有很高效,还得一个遍历
跳表
WHAT
跳表在链表的基础上,增加了多级索引,通过多级索引位置的跳转,实现了快速查找元素
WHY
首先对比链表而言,一个普通的链表,如果要查找某个元素,只能从头部一个个往后遍历,那么跳表是一种有序的数据结构,可以作为平衡树的一种替代,其本质是一种利用稀疏索引加速链表查询的一组数据+索引的结构,它的基本思想就是底层数据用有序链表维护,方便数据插入;在底层数据节点之上构建多层不同的稀疏索引(比如从上往下不断变密集),加速节点的查询,快速定位,索引节点+数据节点就是跳表的核心
子主题
HOW
建立多级索引
范围查找非常快(查找更新删除的效率都是 o()longn),红黑树/平衡二叉树做不到
使用原则
有序集合保存的元素数量小于128个
有序集合保存的所有元素的长度小于64字节
其他场景使用压缩链表
0 条评论
下一页