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

专门做课件的网站南京十大软件公司排名

专门做课件的网站,南京十大软件公司排名,免费注册公司邮箱,涟水做网站文章目录 一、List 类型介绍二、List 类型相关命令2.1 LPUSH 和 RPUSH、LPUSHX 和 RPUSHX2.2 LPOP 和 RPOP、BLPOP 和 BRPOP2.3 LRANGE、LINDEX、LINSERT、LLEN2.4 列表相关命令总结 三、List 类型内部编码3.1 压缩列表#xff08;ziplist#xff09;3.2 链表#xff08;lin… 文章目录 一、List 类型介绍二、List 类型相关命令2.1 LPUSH 和 RPUSH、LPUSHX 和 RPUSHX2.2 LPOP 和 RPOP、BLPOP 和 BRPOP2.3 LRANGE、LINDEX、LINSERT、LLEN2.4 列表相关命令总结 三、List 类型内部编码3.1 压缩列表ziplist3.2 链表linkedlist 四、List 类型的应用场景4.1 消息队列4.2 微博列表 一、List 类型介绍 list 列表类型是用来存储多个有序的字符串列表中的每个字符串称为元素element一个列表最多可以存储 2^32 - 1 个元素。在 Redis 中可以对列表两端插人push和弹出pop还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是⼀种比较灵活的数据结构它可以充当栈和队列的角色在实际开发上有很多应用场景。 列表两端插入和弹出操作 列表的获取、删除等操作 列表类型的特点 列表中的元素是有序的这意味着可以通过索引下标获取某个元素或者某个范围的元素列表区分获取和删除的区别例上图 中的 lrem 1 b 是从列表中把从左数遇到的前 1 个 b 元素删除这个操作会导致列表的长度从 5 变成 4但是执行 lindex 4 只会获取元素但列表长度不会变化。列表中的元素是允许重复的例如下图中的列表中是包含了两个 a 元素的。 二、List 类型相关命令 2.1 LPUSH 和 RPUSH、LPUSHX 和 RPUSHX LPUSH 和 RPUSH LPUSH 命令的作用是将一个或多个元素从左侧头插插入到 list 中而 RPUSH 命令的作用则是将一个或多个元素从右侧尾插插入到 list 中。 语法 LPUSH key element [element ...]RPUSH key element [element ...]LPUSHX 和 RPUSHX LPUSHX 命令的作用是当 key 存在时将⼀个或者多个元素从左侧放⼊头插到 list 中不存在则直接返回而 RPUSHX 命令的作用是是当 key 存在时将⼀个或者多个元素从右侧放⼊头插到 list 中不存在则直接返回。 语法 LPUSHX key element [element ...]RPUSHX key element [element ...]2.2 LPOP 和 RPOP、BLPOP 和 BRPOP LPOP 和 RPOP LPOP 命令的作用是从左侧删除一个元素头删并返回删除的值而 RPOP 则是从右侧删除尾删然后返回删除的值。 语法 LPOP keyRPOP keyBLPOP 和 BRPOP BLPOP 和 BRPOP 命令的作用和LPOP 、 RPOP 一样只是需要指定一个超时时间如果没有元素可以删除的时候会进行阻塞如果在设定的超时时间内向 Redis 中插入元素则会立即执行否则超时则之间退出。 语法 BLPOP key [key ...] timeoutBRPOP key [key ...] timeout另外BLPOP 和 BRPOP 可以同时指定多个 key 进行删除。 2.3 LRANGE、LINDEX、LINSERT、LLEN LRANGE LRANGE命令的作用是获取从 start 到 stop 区间的所有元素区间左闭右闭并且指定的位置可以是负数表示倒数第几个。 语法 LRANGE key start stopLINDEX LINDEX 命令的作用是获取从左边开始第 index 位置的元素。 语法 LINDEX key indexLINSERT LINSERT 命令的作用是在特定的位置插入元素。 语法 LINSERT key BEFORE|AFTER pivot element说明 BEFORE 表示插入到 pivot 元素之前AFTER 表示插入到 pivot 元素之后。 LLEN LLEN 命令的作用是 获取 list 长度。 语法 LLEN key2.4 列表相关命令总结 以下是关于 Redis List 相关命令的总结包括命令、作用以及时间复杂度 命令作用时间复杂度LPUSH从列表左侧插入一个或多个元素O(N) N 为插入元素数量RPUSH从列表右侧插入一个或多个元素O(N) N 为插入元素数量LPUSHX如果列表存在从左侧插入一个或多个元素否则不执行操作O(1)RPUSHX如果列表存在从右侧插入一个或多个元素否则不执行操作O(1)LPOP从列表左侧删除并返回一个元素O(1)RPOP从列表右侧删除并返回一个元素O(1)BLPOP从左侧删除并返回元素如果列表为空则阻塞带有超时参数O(1) 或阻塞等待BRPOP从右侧删除并返回元素如果列表为空则阻塞带有超时参数O(1) 或阻塞等待LRANGE获取指定范围内的元素列表O(Slice Size)LINDEX获取指定位置的元素O(N) N 为索引位置LINSERT在指定元素前或后插入新元素O(N) N 为列表长度LLEN获取列表的长度O(1) 注意时间复杂度中的 “N” 表示操作的复杂度与列表的长度或插入元素的数量成线性关系而不是固定的常数时间。在实际使用中需要根据数据规模和性能要求选择适当的命令。 三、List 类型内部编码 Redis 中的 List 数据类型在内部可以使用不同的编码方式来存储数据具体的编码方式取决于列表的大小和元素的大小。下面将介绍两种常见的 List 内部编码方式 3.1 压缩列表ziplist 压缩列表ziplist是 Redis 中一种紧凑的、内存优化的列表编码方式适用于存储较小的列表或者列表中的元素都是较小的整数或字符串。压缩列表以连续的内存块的形式存储数据每个节点可以包含一个或多个元素这使得压缩列表在内存使用效率上有一定优势。 特点 压缩列表可以保存多个元素在一个节点中因此在元素较小的情况下它可以节省内存。压缩列表支持快速的元素访问因为可以通过索引直接访问元素。压缩列表适用于列表较小且元素较小的情况。 3.2 链表linkedlist 链表linkedlist是 Redis 中另一种列表的内部编码方式它更适合存储大型列表或者元素大小不一致的列表。链表中的每个节点包含一个元素以及指向前一个节点和后一个节点的指针这种结构使得链表在插入和删除元素时具有较高的效率。 特点 链表适用于列表较大或元素较大的情况因为它不需要连续的内存块可以更好地处理大型数据。链表对于插入和删除元素的操作更加高效因为只需要调整节点的指针而不需要移动大量数据。链表相对于压缩列表占用更多的内存因为需要额外的指针来维护节点之间的链接。 总之Redis 根据列表的大小和元素的大小自动选择使用压缩列表或链表来进行编码以平衡内存使用和操作效率。在选择数据结构和命令时需要考虑数据的规模和操作的性能需求。 示例 1当元素个数较少且没有大元素时内部编码为 ziplist 127.0.0.1:6379 rpush listkey e1 e2 e3 OK 127.0.0.1:6379 object encoding listkey ziplist2当元素个数超过 512 时内部编码为 linkedlist 127.0.0.1:6379 rpush listkey e1 e2 e3 ... 省略 e512 e513 OK 127.0.0.1:6379 object encoding listkey linkedlist3当某个元素的长度超过 64 字节时内部编码为 linkedlist 127.0.0.1:6379 rpush listkey one string is bigger than 64 bytes ... 省略 ... OK 127.0.0.1:6379 object encoding listkey linkedlist四、List 类型的应用场景 4.1 消息队列 Redis 可以使用 lpush brpop 命令组合实现经典的阻塞式生产者-消费者模型队列生产者客户端使用 lpush 从列表左侧插入元素多个消费者客户端使用 brpop命令阻塞式地从队列中 “争抢” 队首元素。通过多个客户端来保证消费的负载均衡和高可用性。 Redis 阻塞消息队列模型 分频道的消息队列 Redis 可以同样使用 lpush brpop 命令但通过不同的键模拟频道的概念不同的消费者可以通过 brpop 不同的键值实现订阅不同频道的理念。 4.2 微博列表 每个用户都有属于自己的微博列表 现需要分页展示文章列表。此时可以考虑使用列表类型因为列表不但是有序的同时支持按照索引范围获取元素。 1每篇微博使用哈希结构存储例如微博中 3 个属性title、timestamp、content hmset mblog:1 title xx timestamp 1476536196 content xxxxx ... hmset mblog:n title xx timestamp 1476536196 content xxxxx2向用户 的微博列表中添加微博使用 user:uid:mblogs 作为微博的键 lpush user:1:mblogs mblog:1 mblog:3 ... lpush user:k:mblogs mblog:93分页获取用户的微博列表例如获取用户1 的前 10 篇微博 keylist lrange user:1:mblogs 0 9 for key in keylist {hgetall key }此外此方案在实际中可能存在两个问题 1 n 问题。即如果每次分页获取的微博个数较多需要执行多次 hgetall 操作此时可以考虑使用 pipeline流水线模式批量提交命令或者微博不采用哈希类型而是使用序列化的字符串类型使用 mget 获取。分页获取文章时lrange 在列表两端表现较好获取列表中间的元素表现较差此时可以考虑将列表做拆分。
http://www.pierceye.com/news/958870/

相关文章:

  • 门户网站建站目标泰安招聘信息最新招聘2022
  • 电商网站建设效果app技术
  • 关于文化的网站模板做免费小说网站怎样赚钱
  • 做外贸的人常用的网站黄骅贴吧二手房
  • 网站建设科目提供网站建设教学视频
  • iis搭建网站教程win10淘宝客网站建设的策略
  • 怎么做一个网站 免费90平方设计
  • 网站建设的目的与意义是什么东营网站建设教程
  • 盐城seo网站优化珠海微信网站
  • 杭州市住房和城乡建设部网站网站建设项目计划书如何写
  • 免费找客户网站wordpress knowhow 下载
  • 大连企业招聘网站网站功能描述书须包含哪些内容
  • 教用vs2013做网站的书王烨医生
  • 滨州网站建设费用哪家购物网站建设好
  • 网站开发客户流程 6个阶段wordpress添加多个下载地址
  • 莱芜网络公司网站深圳网站建设raygf
  • pythom+网站开发规范wordpress用户权利
  • 国外营销型网站建设c网站开发
  • 深圳建设厅网站网站建设平台开发
  • 网站开发咨询seo点击优化
  • 靖安县城乡规划建设局网站做的美食视频网站
  • 福永网站推广徽标设计制作
  • 做网站发布网网站需求建设书
  • 咖啡店网站建设模版四川建设网四川住建厅
  • 官方网站建设怎么样郑州搜索引擎优化
  • 三只松鼠网站谁做的大学网页设计作业
  • 关于建设网站的请示做哪种类型的网站赚钱呢
  • 西安网站seo优化做cpa广告建什么网站好
  • 南京手机网站开发网站建设需要哪些岗位
  • 青白江区网站开发招聘宿迁网站设计