当前位置: 首页 > news >正文

饲料网站建设 中企动力绿化公司网站建设

饲料网站建设 中企动力,绿化公司网站建设,泉州做网站qzxiaolv,质量品质好的装修公司【Redis】| 总结/Edison Zhou0写在开头作为Key/Value键值数据库#xff0c;Redis的应用非常广泛。在之前多年的工作生涯中#xff0c;我也只是关注了零散的技术点#xff0c;没有对Redis建立起一套整体观#xff0c;但只有建立了系统整体观#xff0c;才能更好地定位问题和… 【Redis】| 总结/Edison Zhou0写在开头作为Key/Value键值数据库Redis的应用非常广泛。在之前多年的工作生涯中我也只是关注了零散的技术点没有对Redis建立起一套整体观但只有建立了系统整体观才能更好地定位问题和解决问题更重要的是应付面试。刚好极客时间推出了一门《Redis核心技术与实战》课程于是我就入手了这是我的学习总结化繁为简只留重点分享与你。1KV数据库的基本架构为了建立系统观最好的方法就是对其总体架构和关键模块有一个全局认知因此这门课在最开始便给出了一个简单的KV数据库的基本架构它包括了1访问框架2索引模块3操作模块4存储模块SimpleKV - 来自极客时间为了支持更加丰富的业务场景其实 Redis 对这些组件或者功能进行了扩展或者说是进行了精细优化从而满足了功能和性能等方面的要求。下图展示了从SimpleKV到Redis的变化SimpleKV to Redis - 来自极客时间上图中展示了几点变化一是Redis主要使用网络框架来进行访问使得Redis可以作为一个独立的基础网络服务二是Redis数据模型中的value类型更加丰富可以提供更多的接口三是Redis扩展了持久化模块提供日志AOF和快照RDB。四是Redis提供了集群的支持使得HA和可扩展成为可能。2Redis的数据结构Redis之所以“快”一方面因为它是内存数据库所有操作都在内存上完成内存的访问速度本来就快。另一方面则是因为高效的数据结构使得操作键值效率较高。总体来说Redis使用了一个用来保存每个Key/Value的全局哈希表结构其中Value类型又包括了支持集合类型的双向链表、压缩列表、跳表等五大底层结构。K/V的组织结构全局哈希表Redis使用了一个全局维度的哈希表来保存所有的Key/Value每个哈希表本质上都是一个数组这个数组的每个元素称为一个哈希桶。哈希桶中的元素保存的并不是Value本身而是指向Value的指针如下图所示由数据结构的知识可以知道哈希表的时间复杂度为O(1)因此它非常适合快速查找的场景。哈希冲突及其解决当往哈希表中写入的数据变的很多时哈希冲突问题就会出现。所谓哈希冲突就是两个Key的哈希值正好落到了同一个哈希桶中哈希桶的个数毕竟通常少于Key的个数。因此和我们在数据结构课程学到的一致Redis也采用了链式哈希来解决哈希冲突。所谓链式哈希就是同一个哈希桶中的多个元素用一个链表来保存它们之间依次用指针连接如下图所示但是如果哈希表里写入的数据越来越多哈希冲突链也会进而变得很长从而导致这个链条上得元素查找耗时长效率降低。因此Redis还会对哈希表做rehash操作。所谓rehash就是增加现有的哈希桶的数量让逐渐增多的entry元素能够在更多的桶之间分散保存减少单个桶中的元素数量从而减少单个桶中的冲突。在具体操作中Redis会开辟一个新的哈希表比如大小为之前的两倍然后把之前哈希表的数据重新映射到新的哈希表最后释放之前的哈希表。画外音是不是跟.NET中的集合类型动态扩容的思想类似But在拷贝之前哈希表数据到新哈希表时涉及到数据量过大有可能会造成Redis的线程阻塞从而无法服务其他的请求。因此Redis采用了渐进式哈希的解决方案。简单来说所谓渐进式哈希就是不一次性把老哈希表中的数据迁移完而是在每次处理一个请求时从老哈希表中的第一个索引位置开始顺带着将这个索引位置上的所有entries拷贝到新哈希表中等下一个请求时再顺带拷贝下一个索引位置的entries。如此便将一次性的大量拷贝的开销分摊到多次处理请求的过程中避免了耗时的操作 和 服务的中断。渐进式哈希的示例流程如下图所示此外渐进式rehash执行时除了根据键值对的操作来进行数据迁移Redis本身还会有一个定时任务在执行rehash如果没有键值对操作时这个定时任务会周期性地例如每100ms一次搬移一些数据到新的哈希表中这样可以缩短整个rehash的过程。‍底层数据结构概览Redis的Key/Value是通过哈希表进行组织的对于String类型找到哈希桶就可以直接CRUD了因此O(1)就是String类型的操作复杂度了。但是对于集合类型来说还需要进一步操作。在此之前我们先了解一下都有哪些底层数据结构。我们所熟知的String、List、Hash、Sorted Set 和 Set其实只是Redis中数据的保存形式而一般所说的数据结构其实是它们的底层实现。如下图所示Redis的底层数据结构一共有6种其和常见数据类型的对应关系已经清晰地体现在了下面这张图片里给个赞。Redis数据类型与底层数据结构 - 来自极客时间除了String类型的底层实现只有一种即简单动态字符串。其余数据类型List、Hash、Sorted Set和Set都有两种底层实现他们又被称为集合类型即一个键对应了一个集合的数据。底层数据结构复杂度通过上面的描述我们可以知道哈希表的复杂度是O(1)而数组 和 双向链表 也很常见其复杂度基本是O(N)。学习过数据结构课程的都知道O(N)的操作效率并不高因此Redis引入了压缩列表 和 跳表。虽然压缩列表和跳表并不为我们所熟知但它俩却是对整数数组和双向链表所做的优化。首先来看压缩列表压缩列表也类似于一个数组但和数组不同的是压缩列表在表头有三个字段分别表示列表长度、列表尾的偏移量 和 列表中entry的个数。压缩列表在表尾还有一个字段表示列表结束如下图所示由上图可知在压缩列表中定位第一个和最后一个元素只需要通过表头三个字段即可直接定位无须遍历一次因此查找首元素和尾元素的复杂度为O(1)。而需要查找其他元素时就只能遍历查找了此情景的复杂度退化为O(N)。然后来看跳表。跳表是在链表的基础之上增加了多级索引通过索引位置的几个跳转实现数据的快速定位。一个具体的查找案例如下图所示从上图可以看到这个查找过程其实是在多级索引上跳来跳去最后定位到具体的要查找的元素。我们常听到没有什么不是一顿火锅解决不了的事情如果不行那就两顿。对于跳表来说没有什么不是增加索引解决不了的查询如果不够快那就再加一级索引。当数据量非常大时跳表的查找复杂度就是O(logN)学过数据结构的都知道它比O(N)效率要高。因此我们也可以知道Sorted Set类型在数据元素较少时采用压缩列表而一旦超过阈值就会转为跳表结构来保证查询效率不受影响。End总结本文总结了Redis的基础架构 和 底层数据结构这部分内容通常也是后端开发面试中的常见内容希望对你有所帮助。参考资料极客时间蒋德钧《Redis核心技术与实战》年终总结Edison的2020年终总结数字化转型我在传统企业做数字化转型C#刷题C#刷剑指Offer算法题系列文章目录.NET面试.NET开发面试知识体系.NET大会2020年中国.NET开发者大会PDF资料‍‍‍
http://wiki.neutronadmin.com/news/24996/

相关文章:

  • 建设银行网站特点分析php网站开发员工资
  • 网站界面结构企业网站建设与推广方案实例
  • 建网站软件哪个好南宁网站如何制作
  • 怎么做学校官方网站永久免费国外vps无需信用卡
  • 国内最先做弹幕的网站济宁正德网站建设
  • 视频网站建设框架wordpress 不发送邮件
  • 百度怎么做网站网页设计教程
  • 特色专业建设验收网站18款禁用黄app入口直接看
  • 医疗网站建设及优化方案购买已备案网站做非法
  • 自己做的网站如何在百度被搜索到网页设计代码大全表单
  • 基于html的网站设计网站设计所用的软件
  • 哪里可以做购物网站织梦dedecms导航网站源码
  • 美橙建站怎么样外贸网络推广高手何在
  • 网页设计资料下载网站海外短视频软件
  • 北京市网上服务平台登录在线优化工具
  • 做爰全过程免费的视频凤凰网站在线微信小程序
  • 网站名称要求吸引企业做网站的文章内容
  • 做贺卡 网站做网站的客户在哪找
  • 做app还是做网站合适6静态网站设计怎么做
  • 宁夏住房和城乡建设厅门户网站附近图文广告公司电话
  • 做网站的常识网站建设制作教程
  • 商城网站需要注意事项赣州门户网站建设
  • 网站设计是干什么的网站备案的账号找不到
  • 中砼建设有限公司网站建设银行如何招聘网站
  • 创建网站怎么弄制作介绍的网站模板
  • 网站标头图片切换民治网站建设公司
  • 网站推广的软文深圳建设交易宝安
  • 江西那家做网站公司好小程序开发平台要多少钱
  • 免费 网站模板网站如何添加统计代码
  • 铜仁市网站建设服装加工平台