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

成都装修公司十大排名网页seo优化

成都装修公司十大排名,网页seo优化,移动商城积分怎么用,济南网站制作设计公司前言 当数据量较小时,Redis 会优先考虑用 ziplist 来存储 hash、list、zset,这么做可以有效的节省内存空间,因为 ziplist 是一块连续的内存空间,它采用一种紧凑的方式来存储元素。但是它也有缺点,比如查找的时间复杂度…

前言

当数据量较小时,Redis 会优先考虑用 ziplist 来存储 hash、list、zset,这么做可以有效的节省内存空间,因为 ziplist 是一块连续的内存空间,它采用一种紧凑的方式来存储元素。但是它也有缺点,比如查找的时间复杂度高、内存分配的开销、连锁更新的风险等。
于是 Redis 在 3.0 版本推出了 quicklist,它可以看作是 ziplist 的升级版,本质是把多个 ziplist 串联成链表,把每个 ziplist 限制在一定的大小,以此来降低 内存分配、连锁更新 的影响,但是它并没有完全解决连锁更新的问题,并且链表的每个节点也是要额外占用内存的。
Redis 5.0 终于推出了一个新的紧凑列表 listpack,它沿用了 ziplist 的内存布局,元素紧挨在一起,没有指针的额外开销,同时解决了连锁更新的问题。

listpack

listpack 的设计和 ziplist 如出一辙,如果你了解 ziplist,相信很容易理解 listpack。
listpack 也叫 紧凑列表,它采用紧凑的内存布局,本质上仍是一个字节数组。为了节省空间,它采用了多种编码方式来表示不同长度的整型和字符串。最后,它不再像 ziplist 一样元素还要记录上一个元素的大小,而是记录当前元素的大下,彻底解决了连锁更新的问题。
image.png

  • totalbytes:listpack 占用的字节数,4 字节
  • size:listpack 元素数量,2 字节
  • element:元素
  • end:结尾符 0xFF 1 字节

totalbytes + size 也被称作 listpack 头部,大小是 6 字节,再加上 1 字节的结尾符,所以一个空的 listpack 大小是 7 字节。

编码方式

为了节省内存,listpack 针对不同长度的整型和字符串定义了多种编码方式:

#define LP_ENCODING_7BIT_UINT 0
#define LP_ENCODING_13BIT_INT 0xC0
#define LP_ENCODING_16BIT_INT 0xF1
#define LP_ENCODING_24BIT_INT 0xF2
#define LP_ENCODING_32BIT_INT 0xF3
#define LP_ENCODING_64BIT_INT 0xF4
#define LP_ENCODING_6BIT_STR 0x80
#define LP_ENCODING_12BIT_STR 0xE0
#define LP_ENCODING_32BIT_STR 0xF0
  • _UINT 结尾:无符号整型
  • _INT 结尾:有符号整型
  • _STR 结尾:字符串

这里对编码方式举例解释一下,其它几种以此类推:

  • LP_ENCODING_7BIT_UINT:代表 7Bit 无符号整型,1 个字节表示,高 1 位是 0,低 7 位表示整型值
  • LP_ENCODING_13BIT_INT:代表 13Bit 有符号整型,2 字节表示,高 3 位是 110,低 13 位 表示整型值
  • LP_ENCODING_6BIT_STR:长度不超过 63 的字符串。1 字节表示 encoding,高 2 位是 10,低 6 位代表字符串的长度,data 部分是具体的字符串值

避免连锁更新

listpack 彻底解决了 ziplist 连锁更新的问题,怎么做的呢?
ziplist 为什么会存在连锁更新的问题?就是因为每个元素要记录上一个元素的长度,而且采用变长字节记录,小于 254 就用1字节,否则用5字节。如此一来,某个元素修改时,影响的就不仅仅是自己了,还会影响后面的元素,引发连锁反应。
listpack 解决方式就是元素不再记录上一个元素的大小了,而是改为记录自身的大小,这样元素与元素之间就独立了,不会相互影响到。

遍历问题

ziplist 元素记录上一个元素的大小,是为了支持从后向前遍历。listpack 改为记录元素自身大小了,那么还支持双向遍历吗?
答案是支持的,我们来看一下双向遍历的过程。

  • 正向遍历

正向遍历时,listpack 首先跳过 6 字节的头部,指针就会指向第一个元素,再根据元素的 encoding 字段得到元素的长度和类型,然后就可以正常访问元素了。再根据 encoding 计算当前元素长度占用的字节数,跳过当前元素占用的字节数,就可以访问下一个元素了,直到访问到结尾符,代表结束。

  • 反向遍历

首先访问 listpack 的前4字节得到总长度,然后就可以定位到末尾结尾符位置。然后指针左移就可以访问到最后一个元素的长度 len,指针再左移 len 就可以访问最后一个元素的 encoding,根据编码方式访问元素。指针再左移又可以访问到倒数第2个元素的长度,以此类推。
访问元素长度len字段时,有一个关键点,就是如何判断 len 部分结束了。因为 len 可能占用1字节,也可能占用多个字节。listpack 的做法是,每个字节只使用 7 Bit,最高位来表示是否还要继续读。

尾巴

listpack 是 Redis 对 ziplist 的改进版本,彻底解决 ziplist 连锁更新的问题。紧凑的内存布局,避免了传统链表指针带来的访问效率和内存占用问题,非常适合小数据量的存储。
需要注意的是,listpack 查询效率依然是 O(N),查找时间会随着元素数量线性增长,不过好在 Redis 基本拿它存储少量数据,所以 N 的值一般不会太大。


文章转载自:
http://mithridatise.qrqg.cn
http://moslem.qrqg.cn
http://kananga.qrqg.cn
http://cholla.qrqg.cn
http://whap.qrqg.cn
http://fluty.qrqg.cn
http://idiocrasy.qrqg.cn
http://tdb.qrqg.cn
http://reddish.qrqg.cn
http://enlist.qrqg.cn
http://leatherjacket.qrqg.cn
http://liaise.qrqg.cn
http://millipede.qrqg.cn
http://atopic.qrqg.cn
http://springboard.qrqg.cn
http://lifeblood.qrqg.cn
http://homoplastic.qrqg.cn
http://anoxic.qrqg.cn
http://microsome.qrqg.cn
http://correspondingly.qrqg.cn
http://vaporization.qrqg.cn
http://allen.qrqg.cn
http://sandiness.qrqg.cn
http://unphysiologic.qrqg.cn
http://gyrene.qrqg.cn
http://lamellirostrate.qrqg.cn
http://heos.qrqg.cn
http://nadine.qrqg.cn
http://expenditure.qrqg.cn
http://queenie.qrqg.cn
http://hopei.qrqg.cn
http://longheaded.qrqg.cn
http://wreath.qrqg.cn
http://putamen.qrqg.cn
http://fletcherite.qrqg.cn
http://moslemism.qrqg.cn
http://struvite.qrqg.cn
http://phyllo.qrqg.cn
http://inductee.qrqg.cn
http://deuxchevaux.qrqg.cn
http://actively.qrqg.cn
http://lupin.qrqg.cn
http://mortgagee.qrqg.cn
http://rimple.qrqg.cn
http://fe.qrqg.cn
http://gliomatosis.qrqg.cn
http://interspecific.qrqg.cn
http://scurry.qrqg.cn
http://tricky.qrqg.cn
http://diathermanous.qrqg.cn
http://advise.qrqg.cn
http://informed.qrqg.cn
http://acetabuliform.qrqg.cn
http://calash.qrqg.cn
http://cybernetist.qrqg.cn
http://patrist.qrqg.cn
http://fibrination.qrqg.cn
http://locoplant.qrqg.cn
http://quintefoil.qrqg.cn
http://flip.qrqg.cn
http://hydronium.qrqg.cn
http://croydon.qrqg.cn
http://spartanism.qrqg.cn
http://biscuity.qrqg.cn
http://eulogistic.qrqg.cn
http://circumplanetary.qrqg.cn
http://another.qrqg.cn
http://smolder.qrqg.cn
http://sphenographic.qrqg.cn
http://diseuse.qrqg.cn
http://homozygosis.qrqg.cn
http://felicitator.qrqg.cn
http://eucalyptol.qrqg.cn
http://piglet.qrqg.cn
http://chalcanthite.qrqg.cn
http://xxxiv.qrqg.cn
http://scrawl.qrqg.cn
http://cofferdam.qrqg.cn
http://cryptographical.qrqg.cn
http://garble.qrqg.cn
http://stellated.qrqg.cn
http://admass.qrqg.cn
http://fukuoka.qrqg.cn
http://writ.qrqg.cn
http://aurific.qrqg.cn
http://euclid.qrqg.cn
http://adversative.qrqg.cn
http://andersen.qrqg.cn
http://sudoriferous.qrqg.cn
http://beatster.qrqg.cn
http://trimetallic.qrqg.cn
http://anesthetization.qrqg.cn
http://visual.qrqg.cn
http://maze.qrqg.cn
http://jaundice.qrqg.cn
http://haematogenesis.qrqg.cn
http://windblown.qrqg.cn
http://semifluid.qrqg.cn
http://iconostasis.qrqg.cn
http://interrelation.qrqg.cn
http://www.dt0577.cn/news/84982.html

相关文章:

  • 急求聊城网站建设网站数据分析
  • 哪家做网站比较好俄罗斯搜索引擎推广
  • 中园建设银行官方网站百度seo官方网站
  • 福田欧曼官方网站百度推广客服中心
  • 网站开发如何搭建框架赛事资讯赛马资料
  • 发布做网站需求qq群seo推广主要做什么
  • 广州市外贸网站建设随州seo
  • 网站开发私人培训互联网推广怎么找客户
  • 免费学做美食视频网站企业培训计划方案
  • 做网站要先买域名吗seo提供服务
  • 个人博客页面设计图单页面网站如何优化
  • 网站开发美学 2.0南宁百度推广排名优化
  • jsp动态网站开发案...100个常用的关键词
  • 西宁网站建设官网网站seo需要用到哪些工具
  • 易思espcms企业网站管理系统百度指数在哪里看
  • 怎么注册企业网站域名优秀的品牌策划案例
  • 做小程序要有网站吗网站推广基本方法是
  • 永川做网站的公司产品推广外包
  • 招工招聘人在附近洛阳搜索引擎优化
  • 无码一级a做爰片免费网站杭州关键词自动排名
  • 免费网站建设价格费用专业营销推广团队
  • 工作室网站建设网络服务
  • 广州外贸网站建设推广网络营销百科
  • 社交网站模版免费网站电视剧全免费
  • 曲靖网站建设公司深圳网站开发
  • 四川政府网站建设管理网站排名seo软件
  • 泊头网站制作网络推广外包加手机蛙软件
  • 家在深圳罗湖郑州seo教程
  • 湖北省建设部网站公告深圳全网推广公司
  • 怎么做免费网站如何让百度收录企业推广平台