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

做徽标哪个网站素材多百度一下就知道官网

做徽标哪个网站素材多,百度一下就知道官网,在哪个网站上可以学做衣服,公司网站费用怎么做分录redis常用数据结构及底层 string字符串、list链表、set无序集合、zset有序集合、hash哈希 1.string 底层结构是SDS简单动态字符串 struct sdshdr {int len; // 已用长度(字符串实际长度)int free; // 剩余可用空间char buf[]; // 数组&#…

redis常用数据结构及底层

  • string字符串、list链表、set无序集合、zset有序集合、hash哈希

1.string

  • 底层结构是SDS简单动态字符串
struct sdshdr {int len;     // 已用长度(字符串实际长度)int free;    // 剩余可用空间char buf[];  // 数组,存储实际字符数据
};
  • 相较于c字符串,它通过lenfree字段实现O(1)长度查询,自动扩容,支持二进制存储

2.list

  • 是一个有序可重复链表结构,会根据数据量和长度,自动选择不同数据结构,提升性能
  • 底层实现主要三种:
    • ziplist压缩列表:redis3.2之前,元素数量<512,元素大小<64用压缩列表
    • linkedlist双链表:redis3.2之前大数据量使用。
    • quicklist快速列表:redis3.2之后的默认存储,所有情况都用quicklist,他是由多个ziplist组成的双向链表

3.set

  • 无序,元素唯一的集合类型,会根据数据量和内容,自动选择不同数据结构,提升性能
  • 底层两种实现:
    • intset整数集合:适用于,都是整数数量<=512。内存连续升序排列,插入删除慢
    • hashtable哈希表:适用于,多数据类型,数量多。标准hash,内存开销较大(存储指针、哈希表结构)操作效率高

redis会根据数据自动切换,添加非整数/数量超512自动转hashtable,但是不会重新转回来

4.zset

  • 元素唯一,通过每个元素关联的score自动排序的结构,支持范围查找,范围排名等操作
  • 底层两种实现:
    • skiplist跳表:跳表提供有序遍历和范围操作
    • hashtable哈希表:哈希表提供快速查找

为什么用跳表而不是红黑树?
实现简单插入删除性能好(时间复杂度平均 O(log n)),更容易实现范围操作

  • 跳表原理:通过分多个索引层加速查询底层完整的有序链表,上层是索引层,每上一层减少一半,所以log₂n
第3层:1 --------------------------> 9
第2层:1 ------> 5 ------> 7 ------> 9
第1层:1 -> 3 -> 5 -> 6 -> 7 -> 8 -> 9

5.hash

  • 一个键值对集合,常用于存对象(用户配置)等,会根据字段数量和内容自动选择不同的实现方式
  • 底层两种实现:
    • ziplist压缩列表:对象用压缩列表,(字段数<512,长度<64)连续内存,占用少,节省空间,查询速度稍慢,字段超过阈值时,会自动转换为hashtable
    • hashtable哈希表:对象用hash表,读写效率更高

为什么小数据用 ziplist?
内存利用率高(无指针开销)

Redis 的哈希表如何扩容?
采用 渐进式扩容:扩容时同时保留新旧两个哈希表,分批次迁移数据

关于hash渐进式扩容,可以看我的这篇https://blog.csdn.net/m0_74282926/article/details/147522876

总结

数据类型底层结构说明
Stringint / embstr / raw(SDS)根据长度和内容选择优化方式:int 表示整数,embstr 表示小字符串,raw 是通用 SDS
Listziplist(旧) / quicklistRedis 3.2+ 默认用 quicklist(多个 ziplist + 双向链表)
Setintset / hashtable小量整数用 intset,其他情况用 hashtable
ZSetskiplist + hashtable哈希表查找,跳表排序;两个结构同时维护
Hashziplist / hashtable字段少且短用 ziplist,否则用 hashtable

为什么redis单线程反而更快?

  1. 一个误区:并不是多线程一定比单线程快:
  • 在mysql中我们对于耗时较长的磁盘io操作往往采用多线程并发执行,因为多线程产生的线程切换开销往往于磁盘读写开销,所以并发等待可以提高效率;
  • 而redis是内存存储,本身单线程速度就很快,如果用多线程,
    涉及cpu上下文切换,锁竞争,这些耗时可能会超过内存中取数据的时间,从而降低性能。
  1. redis的性能瓶颈往往是网络或者内存,而非cpu,内存访问的速度高于切换线程的开销

  2. Redis 6.0 起引入了I/O 多线程模型,用于并行处理高并发下,客户端的网络读写数据(网络 I/O),但命令执行仍是单线程,以保证数据一致性

网络线程并发提速,核心逻辑线程保证安全。

  1. redis的数据协议设计很高效,比如HashTable,理想情况下只需要O(1)的时间复杂度就可以找到数据。

例如 Hash 的 ziplist + hashtable 组合,在数据量小时用 ziplist(节省内存),时转 HashTable(O(1) 查询)。

http://www.dtcms.com/wzjs/263960.html

相关文章:

  • 设备技术支持东莞网站建设上海专业的网络推广
  • 海南网站建站怎样自己制作网站
  • 网站开发技术负责那些发稿推广
  • 网站建设在哪块做佛山seo培训
  • 传奇辅助网站怎么做百度搜索网址大全
  • 哈尔滨阿城网站建设seo关键词如何布局
  • 网站开发的基本过程网络推广公司有哪些
  • 网站制作代理平台郑州网站seo外包公司
  • 论坛网站建设流程专业黑帽seo
  • 响应式网站建设合同百度下载安装 官方
  • 中国500强企业排名一览表泉州百度seo公司
  • 公司高管培训课程唐山seo优化
  • 视觉差网站制作2022网站seo
  • 中卫网站推广优化刷百度关键词排名
  • 做俄语网站建设大一html网页制作作业
  • 集团网站建设定制网站建设百度大盘指数
  • 医院门户网站建设短视频推广平台有哪些
  • 制作小企业网站国内时事新闻
  • 做网站推广排名怎么在百度打广告
  • 宁波企业如何建网站无排名优化
  • 专注网站建设微信开发西安seo排名公司
  • 上海建设局网站深圳网站优化平台
  • 域名通过了才可以做网站吗赣州seo外包怎么收费
  • 河南网站备案系统短信长春网站优化团队
  • 大型网站建设建设公司seowhy教研室
  • 宁德蕉城城乡建设网站宁波seo推荐优化
  • 嘉兴网站建设推广免费百度下载
  • 寻找基础微网站开发站长工具 站长之家
  • 做二手手机交易网站公众号怎么推广
  • 网站设计网站建设公司旺道seo优化软件