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

简介: 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基本类型及其数据结构

相关文章
|
11月前
|
存储 消息中间件 NoSQL
【Redis】常用数据结构之List篇:从常用命令到典型使用场景
本文将系统探讨 Redis List 的核心特性、完整命令体系、底层存储实现以及典型实践场景,为读者构建从理论到应用的完整认知框架,助力开发者在实际业务中高效运用这一数据结构解决问题。
|
存储 NoSQL 定位技术
Redis数据类型面试给分情况
Redis常见数据类型包括:string、hash、list、set、zset(有序集合)。此外还包含高级结构如bitmap、hyperloglog、geo。不同场景可选用合适类型,如库存用string,对象存hash,列表用list,去重场景用set,排行用zset,签到用bitmap,统计访问量用hyperloglog,地理位置用geo。
659 5
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
868 2
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
671 85
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
1089 1
Java 中数组Array和列表List的转换
|
NoSQL Redis
Redis的常用数据类型有哪些 ?
Redis 有 5 种基础数据结构,它们分别是:string(字符串)、list(列表)、hash(字典)、set(集 合) 和 zset(有序集合)
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
719 14
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
427 9
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
1656 10
|
存储 NoSQL Redis
redis常见数据类型
Redis 是一种基于内存的键值存储数据库,支持字符串、哈希表、列表、集合及有序集合等多种数据类型,每种类型均有特定用途与适用场景,提供丰富的命令操作,适用于高速数据访问与处理。
360 5