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

郑州网站建设选微锐x域名持有者个人可以做公司网站

郑州网站建设选微锐x,域名持有者个人可以做公司网站,响应式科技公司网站模板,外贸网站推广技巧list相当于链表、数据表 1.list类型基本介绍 列表中的元素是有序的有序的含义,要根据上下文区分~~有的时候,谈到有序,指的是升序,降序”有的时候,谈到的有序,指的是, 顺序很关键~~如果把元素位置颠倒,顺序调换.此时得到的新的 List 和之前的 Li…list相当于链表、数据表 1.list类型基本介绍 列表中的元素是有序的有序的含义,要根据上下文区分~~有的时候,谈到有序,指的是升序,降序”有的时候,谈到的有序,指的是, 顺序很关键~~如果把元素位置颠倒,顺序调换.此时得到的新的 List 和之前的 List 是不等价的!!同样一个词,怎么理解,务必要结合上下文,结合具体场景~~栈/堆.(数据结构的,操作系统的,M 的)同步(同步和互斥的同步,还是同步和异步的同步) 1.区分获取和删除的区别 lindex 能获取到元素的值 lrem 也能返回被删除元素的值. 2.列表中的元素是允许重复的 像 hash 这样的类型, field 是不能重复的 因为当前的 List,头和尾都能高效的插入删除元素, 就可以把这个 List 当做一个 栈/队列 来使用了 Redis 有一个典型的应用场景,就是作为消息队列 最早的时候, 就是通过 List 类型~. 后来 Redis 又提供了 stream 类 用于消息队列 2.list相关命令 2.1 LPUSH 将⼀个或者多个元素从左侧放⼊头插到 list 中。 语法 LPUSH key element [element ...] 命令有效版本1.0.0 之后 时间复杂度只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数. 返回值插⼊后 list 的长度。 ⽰例 redis LPUSH mylist world (integer) 1 redis LPUSH mylist hello (integer) 2 redis LRANGE mylist 0 -1 1) hello 2) world //按照顺序,依次头插这几个元素. //全都插入完毕,4 是在最前面的!!! //如果 key 已经存在, 并且 key 对应的 value 类型,不是 list //此时 lpush 命令就要报错. //此处的序号与下标无关序号只是标识项描述一下顺序 2.2 LPUSHX 在 key 存在时将⼀个或者多个元素从左侧放⼊头插到 list 中。不存在直接返回 语法 LPUSHX key element [element ...] 命令有效版本2.0.0 之后 时间复杂度只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数. 返回值插⼊后 list 的⻓度。 示例 redis LPUSH mylist World (integer) 1 redis LPUSHX mylist Hello (integer) 2 redis LPUSHX myotherlist Hello (integer) 0 redis LRANGE mylist 0 -1 1) Hello 2) World redis LRANGE myotherlist 0 -1 (empty array) 2.3 RPUSH 将⼀个或者多个元素从右侧放⼊尾插到 list 中。 语法 RPUSH key element [element ...] 命令有效版本1.0.0 之后 时间复杂度只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数. 返回值插⼊后 list 的⻓度。 ⽰例 redis RPUSH mylist world (integer) 1 redis RPUSH mylist hello (integer) 2 redis LRANGE mylist 0 -1 1) world 2) hello 2.4 RPUSHX 在 key 存在时将⼀个或者多个元素从右侧放⼊尾插到 list 中。 语法 RPUSHX key element [element ...] 命令有效版本2.0.0 之后 时间复杂度只插⼊⼀个元素为 O(1), 插⼊多个元素为 O(N), N 为插⼊元素个数. 返回值插⼊后 list 的⻓度。 ⽰例 redis RPUSH mylist World (integer) 1 redis RPUSHX mylist Hello (integer) 2 redis RPUSHX myotherlist Hello (integer) 0 redis LRANGE mylist 0 -1 1) World 2) Hello redis LRANGE myotherlist 0 -1 (empty array) 2.5 LRANGE 获取从 start 到 end 区间的所有元素左闭右闭。 语法 //此处的l不是left而是list LRANGE key start stop 命令有效版本1.0.0 之后 时间复杂度O(N) 返回值指定区间的元素。 ⽰例 redis RPUSH mylist one (integer) 1 redis RPUSH mylist two (integer) 2 redis RPUSH mylist three (integer) 3 redis LRANGE mylist 0 0 1) one redis LRANGE mylist -3 2 1) one 2) two 3) three redis LRANGE mylist -100 100 1) one 2) two 3) three redis LRANGE mylist 5 10 (empty array) 2.6 LPOP 从 list 左侧取出元素即头删。 语法 LPOP key 命令有效版本1.0.0 之后 时间复杂度O(1) 返回值取出的元素或者 nil。 ⽰例 redis RPUSH mylist one two three four five (integer) 5 redis LPOP mylist one redis LPOP mylist two redis LPOP mylist three redis LRANGE mylist 0 -1 1) four 2) five 2.7 RPOP 从 list 右侧取出元素即尾删。 语法 RPOP key 我们所用的版本是5 不考虑 命令有效版本1.0.0 之后 时间复杂度O(1) 返回值取出的元素或者 nil。 ⽰例 redis RPUSH mylist one two three four five (integer) 5 redis RPOP mylist five redis LRANGE mylist 0 -1 1) one 2) two 3) three 4) fourRedis 中的 list 是一个双端队列~~ 从两头插入/删除元素都是非常高效 O(1) 搭配使用 rpush 和 lpop, 就相当于队列了 搭配使用 rpush 和 rpop, 就相当于栈了, 2.8 LINDEX 获取从左数第 index 位置的元素。 语法   LINDEX key index 命令有效版本1.0.0 之后 时间复杂度O(N),此处的N是list中元素的个数 返回值取出的元素或者 nil。 ⽰例 redis LPUSH mylist World (integer) 1 redis LPUSH mylist Hello (integer) 2 redis LINDEX mylist 0 Hello redis LINDEX mylist -1 World redis LINDEX mylist 3 (nil) 2.9 LINSERT 在特定位置插⼊元素。 语法 LINSERT key BEFORE | AFTER pivot element pivot 以该元素为基准 命令有效版本2.2.0 之后 时间复杂度O(N) 返回值插⼊后的 list ⻓度。 ⽰例 redis RPUSH mylist Hello (integer) 1 redis RPUSH mylist World (integer) 2 redis LINSERT mylist BEFORE World There (integer) 3 redis LRANGE mylist 0 -1 1) Hello 2) There 3) World //基准不是下标而是元素 万一要插入的列表中,基准值,存在多个,咋办? linsert 进行插入的时候,要根据基准值, 找到对应的位置,从左往右找,找到第一个符合基准值的位置即可. O(N)N 表示列表的长度 2.10 LLEN 获取 list ⻓度。 语法 LLEN key 命令有效版本1.0.0 之后 时间复杂度O(1) 返回值list 的⻓度。 ⽰例 redis LPUSH mylist World (integer) 1 redis LPUSH mylist Hello (integer) 2 redis LLEN mylist (integer) 2 2.11 LREM count0从左往右找 count0从右往左找 count0全部删除 2.12 LRIM 只保留区间内的数 时间复杂度是O(N)N是当前要删除的元素的个数 2.13 LSET  3.阻塞版命令 redis 中的 list 也相当于 阻塞队列 一样线程安全是通过单线程模型支持的.阻塞,则只支持队列为空的情况,不考虑队列满”但阻塞版本会根据 timeout阻塞一段时间期间 Redis 可以执行其他命令使用 brpop 和 blpop 的时候,这里是可以显式设置阻塞时间的!!!(不一定是无休止的等待!!)【此处的 blpop 和 brpop 看起来好像耗时很久但是实际上并不会对 redis 服务器产生负面影响!!】命令中如果设置了多个键那么会从左向右进行遍历键一旦有一个键对应的列表中可以弹出元素命令立即返回。 blpop 和 brpop 都是可以同时去尝试获取多个 key 的列表的元素的~~ 多个 key 对应多个 list这多个 |ist 哪个有元素了,就会返回哪个元素, 如果多个客户端同时多一个键执行 pop则最先执行命令的客户端会得到弹出的元素。区别 blpop 和 brpop 是 lpop 和 rpop 的阻塞版本和对应⾮阻塞版本的作⽤基本⼀致除了 • 在列表中有元素的情况下阻塞和⾮阻塞表现是⼀致的。但如果列表中没有元素⾮阻塞版本会理 解返回 nil但阻塞版本会根据 timeout阻塞⼀段时间期间 Redis 可以执⾏其他命令但要求执 ⾏该命令的客⼾端会表现为阻塞状态如图 2-22 所⽰。 • 命令中如果设置了多个键那么会从左向右进⾏遍历键⼀旦有⼀个键对应的列表中可以弹出元 素命令⽴即返回。 • 如果多个客⼾端同时多⼀个键执⾏ pop则最先执⾏命令的客⼾端会得到弹出的元素。 3.1 BLPOP LPOP 的阻塞版本。 语法 BLPOP key [key ...] timeout 此处 可以指定一个 key 或者 多个 key每个 key 都对应一个 list.如果这些 list 有任何一个非空,blpop 都能够把这里的元素给获取到. 立即返回如果这些 list 都为空, 此时就需要阻塞等待, 等待其他客户端往这些 list 中插入元素了单位是 秒(Redis 6, 超时时间允许设定成小数.Redis 5 中,超时时间,得是整数) 命令有效版本1.0.0 之后 时间复杂度O(1) 返回值取出的元素或者 nil。 ⽰例 redis EXISTS list1 list2 (integer) 0 redis RPUSH list1 a b c (integer) 3 redis BLPOP list1 list2 0 1) list1 2) a 当插入任何一个元素都会返回 3.2 BRPOP RPOP 的阻塞版本。 语法 BRPOP key [key ...] timeout 命令有效版本1.0.0 之后 时间复杂度O(1) 返回值取出的元素或者 nil。 ⽰例 redis DEL list1 list2 (integer) 0 redis RPUSH list1 a b c (integer) 3 redis BRPOP list1 list2 0 1) list1 2) c 4.命令小结 操作类型命令时间复杂度添加rpush key value [value ...]O(k)k 是元素个数lpush key value [value ...]O(k)k 是元素个数linsert key before | after pivot valueO(n)n 是 pivot 距离头尾的距离查找lrange key start end O(sn)s 是 start 偏移量n 是 start 到 end 的范围 lindex key indexO(n)n 是索引的偏移量llen keyO(1)删除lpop keyO(1)rpop keyO(1)lremkey count valueO(k)k 是元素个数ltrim key start endO(k)k 是元素个数修改lset key index valueO(n)n 是索引的偏移量阻塞操作blpop brpopO(1) 5.内部编码 列表类型的内部编码有两种 • ziplist压缩列表当列表的元素个数⼩于 list-max-ziplist-entries 配置默认 512 个同时 列表中每个元素的⻓度都⼩于 list-max-ziplist-value 配置默认 64 字节时Redis 会选⽤ ziplist 来作为列表的内部编码实现来减少内存消耗。 • linkedlist链表当列表类型⽆法满⾜ ziplist 的条件时Redis 会使⽤ linkedlist 作为列表的内 部实现。 上述方式为老版本的内部编码现在用的是quicklist quicklist 相当于是 链表 和 压缩列表 的结合整体还是一个链表,链表的每个节点,是一个压缩列表。 每个压缩列表,都不让它太大同时再把多个压缩列表通过链式结构连起来~~ 6.list的应用场景 6.1 存储多个数据 6.2 消息队列生产者消费模型少见 Redis 可以使⽤ lpush brpop 命令组合实现经典的阻塞式⽣产者-消费者模型队列⽣产者客⼾端使⽤ lpush 从列表左侧插⼊元素多个消费者客⼾端使⽤ brpop 命令阻塞式地从队列中争抢 队⾸元素。通过多个客⼾端来保证消费的负载均衡和⾼可⽤性。 谁先执行的这个 brpop 命令谁就能拿到这个新来的元素像这样的设定,就能构成一个轮询式的效果.假设消费者执行顺序是123当新元素到达之后,首先是消费者1 拿到元素.(按照执行brpop 命令的先后顺序来决定谁获取到的)消费者1 拿到元素之后,也就从 brpop 中返回了(相当于这个命令就执行完了)如果消费者1 还想继续消费,就需要重新执行 brpop.此时, 再来一个新的元素过来, 就是消费者2 拿到该元素也从 brpop 中返回~~ 如果消费者2 还想继续消费也需要重新执行 brpop.再来一个新元素,就是消费者3 拿到这个元素了 分频道的消息队列 6.3 微博 Timeline 每个⽤⼾都有属于⾃⼰的 Timeline微博列表现需要分⻚展⽰⽂章列表。此时可以考虑使⽤ 列表因为列表不但是有序的同时⽀持按照索引范围获取元素。
http://www.hkea.cn/news/14287721/

相关文章:

  • 做网站要先买域名吗生产网线需要什么设备
  • 西宁站 网站长沙网站设计精选柚v米科技
  • 公司企业网站开发电子商城网站开发支持手机端
  • 网站公司怎么做运营商高端产品网站
  • 营销型网站制作流程网站开发是前端还是后台
  • 南昌手机网站建设东莞公司企业设计网站建设
  • 网站开发所需人才网站的建站公司
  • 阿里云centos7做网站wordpress 采集 发布
  • 网站建设需要具备的能力培训机构推广
  • 养殖场在哪个网站做环评备案网站制作哪里好薇
  • 网站商城微信支付接口现有电商平台
  • 如何看网站是用什么程序做的友缘在线官网
  • 怎么查看一个网站页面的seo优化情况三栏wordpress模板下载
  • 做动态表情包的网站网络和网站的区别
  • 个人响应式网站建设广告设计公司需要用专线网吗
  • 网站内容板块调换位置最好的开发网站建设价格
  • 网页设计制作网站app拉新渠道商
  • 网站程序合同有口碑的南昌网站建设
  • 合肥做网站联系方式wordpress主题无法预览
  • 网站改版打造全新网站wordpress怎么使用主题
  • 宁波网站建设是哪家便宜高密住房和城乡建设部网站
  • 鹤壁网站seo优化哈尔滨网站建设口碑好
  • 做百度手机网站排名erp管理系统有哪些牌子
  • 制作网站空间域名湖南常德师范学校
  • 公主岭网站建设做货代的有哪些网站
  • 网站排名掉了网站开发流程图
  • 苍南做网站深圳市在建项目查询
  • 重庆微信网站开发做网站和做新媒体运营
  • 网站备案登记昆明响应式网站
  • 网站打不开了什么原因网站页面建设