Redis(六)-Redis的常用数据类型之list列表

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis中的列表是简单的字符串列表,你可以添加一个元素到列表的头部(左边)或者尾部(右边),可以用它来做微博时间轴列表,还可以充当队列

简介

Redis中的列表是简单的字符串列表,你可以添加一个元素到列表的头部(左边)或者尾部(右边),可以用它来做微博时间轴列表,还可以充当队列

常用命令

从左边/右边插入一个或多个值

#从左边插入
lpush <key1> <value1>  <value2> ......
#从右边插入
rpush <key1> <value1>  <value2> ......
  1. 从左边/右边吐出一个值,取出一个值就删除这个值,值在键在,值亡键亡。
#从左边吐出
lpop <key1>
#从右边吐出
rpop <key1>

从上述示例中可以看出,从左边插入左边吐出的话,那就是先进后出的形式,从左边插入右边吐出的话那就是先进先出的形式。

<key1>列表右边吐出一个值,插到<key2> 列表左边

rpoplpush <key1> <key2>

按照索引下标获得元素(从左到右), 其中<start> 为0时指左边第一个, <stop> 为-1时指右边第一个,(0~-1 表示获取所有)

lrange <key> <start> <stop>

按照索引下标获得元素(从左到右)

lindex <key> <index>

获得列表长度

llen <key>

<value> 的前面|后面插入<newvalue> 插入值

#在`<value>` 的前面插入`<newvalue>` 插入值
linsert <key> before <value> <newvalue>
#`<value>` 的后面插入`<newvalue>` 插入值
linsert <key> after <value> <newvalue>

<value>的左边删除n个<value>(从左到右)

lrem <key1> <n> <value>

将列表<key> 下标为<index> 的值替换成<value>

lset <key> <index> <value>

数据结构

List的数据结构为快速链表 quickList。

在列表元素较少的情况下使用一块连续的内存存储,这个结构是ziplist,也就是压缩列表。

它将所有的元素紧挨着一起存储,分配的是一块连续的内存。

当数据量较多的时候才会改成 quickList。

因为普通的链表需要的附加指针空间太大, 会比较浪费空间,比如这个列表中存的只是int类型数据,结构上海需要两个额外的指针prev和next。

Redis 将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist 使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

详情可以了解这篇文章Redis(七)-Redis的list列表的数据结构-快速链表

参考

《Redis的设计与实现》

Redis基本类型及其数据结构

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
22小时前
|
XML JavaScript 数据格式
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的元素数量。在示例中,加载&quot;books.xml&quot;后,通过getElementsByTagName(&quot;title&quot;)获取标题节点列表,然后使用`for`循环遍历列表,输出每个标题的文本内容。此代码演示了如何处理XML文档中的节点集合。
|
3天前
|
存储 NoSQL 关系型数据库
【Redis】Redis的特性和应用场景 · 数据类型 · 持久化 · 数据淘汰 · 事务 · 多机部署
【Redis】Redis的特性和应用场景 · 数据类型 · 持久化 · 数据淘汰 · 事务 · 多机部署
14 0
|
3天前
|
NoSQL Redis 数据库
Redis中的常用命令非常丰富,涵盖了各种数据类型的基本操作以及服务器管理和维护的相关指令
【5月更文挑战第15天】Redis常用命令包括通用(如PING、SELECT)、键操作(KEYS、EXISTS、DEL)、字符串(SET、GET)、哈希(HSET、HGET)、列表(LPUSH、LPOP)、集合(SADD、SMEMBERS)和有序集合(ZADD、ZRANGE)等。这些命令用于数据操作及服务器管理,满足不同场景需求。了解更多命令,建议参考Redis官方文档。
11 2
|
3天前
|
存储 缓存 NoSQL
【技术分享】求取列表需求的redis缓存方案
【技术分享】求取列表需求的redis缓存方案
14 0
|
3天前
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的长度,允许遍历和处理节点。例如,加载&quot;books.xml&quot;到`xmlDoc`,通过`getElementsByTagName(&quot;title&quot;)`获取所有标题节点,然后使用循环输出每个&lt;title&gt;元素的文本内容。
|
3天前
|
SQL NoSQL Java
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
18 0
|
3天前
|
NoSQL Java Unix
Redis基础操作 String List
Redis基础操作 String List
10 0
|
3天前
|
XML 数据格式
节点列表长度(Node List Length)
`NodeList`对象自动更新,其`length`属性表示列表中节点数量。例如,加载&quot;books.xml&quot;后,`getElementsByTagName(&#39;title&#39;).length`返回`4`。此属性可用来遍历列表,如示例所示,遍历所有`&lt;title&gt;`元素并打印其文本内容:Everyday Italian, Harry Potter, XQuery Kick Start, Learning XML。
|
3天前
|
Python
【Python 基础】列表(list)和元组(tuple)有什么区别?
【5月更文挑战第6天】【Python 基础】列表(list)和元组(tuple)有什么区别?
|
3天前
|
XML 数据格式
节点列表长度(Node List Length)
`Node List`对象自动更新,其`length`属性表示列表中节点数量。在给定示例中,代码加载&quot;books.xml&quot;,并利用`getElementsByTagName(&#39;title&#39;)`获取&lt;title&gt;元素的数量,结果为4。`length`也可用于遍历列表,如示例所示,遍历并打印所有&lt;title&gt;元素的文本内容:Everyday Italian, Harry Potter, XQuery Kick Start, Learning XML。
http://www.vxiaotou.com