百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis 常用数据类型之list(字符串列表)

mhr18 2024-11-13 10:59 12 浏览 0 评论

list 字符串列表的特性

Redis list 列表是简单的字符串列表,按照插入顺序排序。我们可以添加元素在列表的头部(左边)或者尾部(右边),就是类似于一个双端列表。

如果是从数组的两端开始删除数据,则会比较快,如果是从中间开始删除,就会比较慢。类似于我们 Java ArrayList使用数组的方式,同事也具有 LinkedList 双向连接的方式。


表的特性


Redis list 列表是简单的字符串列表,按照插入顺序排序。我们可以添加元素在列表的头部(左边)或者尾部(右边),就是类似于一个双端列表。


如果是从数组的两端开始删除数据,则会比较快,如果是从中间开始删除,就会比较慢。类似于我们 Java ArrayList使用数组的方式,同事也具有 LinkedList 双向连接的方式。


list 相关命令


list 相关的命令都是 以 "l" 开头,表示 list 类型的操作,redis 中并不区分命令的大小写。


操作

命令

例子

说明

从左侧添加

lpush

lpush key v1 v2 v3


从右侧添加

rpush

rpush key v1 v2 v3


查看元素

lrange

lrange key 0 -2

0为查看的开始位置, -2为查看到倒数第二个(如果数组的长度为5,即显示前三个);

lrange key 0 -1, 表示查看所有的元素值

从头部弹出元素

lpop

lpop key

执行弹出操作后,弹出元素将不存在与key中

从尾部弹出元素

rpop

rpop key

执行弹出操作后,弹出元素将不存在与key中

查看数组的长度

llen

llen key

返回数组的长度,如果说数组不存在,那么返回0

向存在的数组的左边插入值

lpushx

lpush key value

如果数组key 不存在,则不会插入值,并且返回一个0

向存在的数组的右边插入值

rpushx

rpush key value

如果数组key 不存在,则不会插入值,并且返回一个0

删除数组中的值

lrem

lrem key count value

向集合中删除 count个值,比如:

  • lrem mylist 2 3, 指的是从前到后,删除2个,值为 3 的 value 值
  • lrem mylist -2 3, 指的是从后到前,删除2个,值为 3 的 value 值
  • lrem mylist 0 3, 指的删除 所有 值为 3 的 value 值

向指定下标处插入值

lset

lset key index value

向数组中下标值为 index 的插入一个元素 value

例如: lset mylist 3 mmm

向指定值的地方插入

linsert

linsert key before value newValue

向数组中值为 value 前面插入 newValue

linsert key after value newValue

向数组中值为 value 后面插入 newValue

将列表中尾部的数据弹出,添加到头部

rpoplpush

rpoplpush mylist1 mylist2

将 mylist1 中的最后一个元素弹出,并且压入到 ,mylist2 中的头部


详细说明


常用操作(lpush、rpush、lrange)


127.0.0.1:6379> lpush index 1 2 3 4        # 从左边插入新的元素,按照数据插入顺序新增
(integer) 4
127.0.0.1:6379> lpush index 0 -1           # 再从左边添加新的元素
(integer) 6
127.0.0.1:6379> lrange index 0 -1          # 查看数组中的元素(0 到 -1 表示所有的)
1) "-1"
2) "0"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> rpush index a b c         # 从右边添加元素
(integer) 9
127.0.0.1:6379> lrange index 0 -1         # 再次查看添加的元素
1) "-1"
2) "0"
3) "4"
4) "3"
5) "2"
6) "1"
7) "a"
8) "b"
9) "c"
127.0.0.1:6379>



弹出元素操作(lpop、rpop)


127.0.0.1:6379> lpush list one two three four five        # 添加元素
(integer) 5
127.0.0.1:6379> lrange list 0 -1                          # 查看添加的元素
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
127.0.0.1:6379> lpop list                                 # 移除 list 中的第一个元素
"five"
127.0.0.1:6379> rpop list                                 # 移除 list 中的最后一个元素
"one"
127.0.0.1:6379> lrange list 0 -1
1) "four"
2) "three"
3) "two"
127.0.0.1:6379>



删除操作(lrem)


具体查询上面表格中说明的部分


127.0.0.1:6379>  lpush mylist  3 2 1 0 2 3 1 
(integer) 7
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "3"
3) "2"
4) "0"
5) "1"
6) "2"
7) "3"
127.0.0.1:6379> lrem mylist -1 1                #  从后到前,删除 1个值为 1 的元素
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1              # 查看
1) "1"
2) "3"
3) "2"
4) "0"
5) "2"
6) "3"
127.0.0.1:6379> lrem mylist 1 3                 # 从前到后,删除 1 个值为 3 的元素
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "2"
3) "0"
4) "2"
5) "3"
127.0.0.1:6379> lrem mylist 0 3                 # 删除所有值为 3 的元素
(integer) 1
127.0.0.1:6379> lrem mylist 0 2                 # 删除所有值为 2 的元素
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "0"
127.0.0.1:6379>



索引与长度(lindex、llen)


127.0.0.1:6379> lpush list 1 2 3 4
(integer) 4
127.0.0.1:6379> llen list                # 查看数组的长度
(integer) 4
127.0.0.1:6379> lindex list 0            # 通过指定的下标来获取值
"4"
127.0.0.1:6379> lindex list 2
"2"
127.0.0.1:6379>



更新与修剪操作(lset、ltrim)


127.0.0.1:6379> rpush list one two three four
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> lset list 0 4                # 将下标为0 的元素值,修改为 4
OK
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> lindex list 3                # 根据指定的下标获取元素值
"four"
127.0.0.1:6379>



特殊操作(rpoplpush)


127.0.0.1:6379> lpush list msg1 msg2 msg3 msg4 msg5
(integer) 5
# 移除list 中的最后一个元素,添加到 listbak 中,
# 这里 listbak 之前并不存在,在执行了这个操作之后,会自动创建
127.0.0.1:6379> rpoplpush list listbak        
"msg1"
127.0.0.1:6379> lrange list 0 -1                  # 查看原有的数组值
1) "msg5"
2) "msg4"
3) "msg3"
4) "msg2"
127.0.0.1:6379> lrange listbak 0 -1               # 新的数组值
1) "msg1"
127.0.0.1:6379>

相关推荐

Docker集群管理之Docker Compose

前言:在上一篇《Docker集群管理之DockerMachine》中,我们通过源码分析了解了DockerMachine的工作原理,使用者可以通过DockerMachine的一条命令在任意支持的平...

使用Dockerfile build镜像

Docker映像可以看作是Docker容器的压缩包,包含了应用程序以及运行应用程序所需的依赖,容器是映像的运行时实例。一般构建镜像都是使用dockerfile进行构建而不是dockercommit,...

自建私有云相册:Docker一键部署Immich,照片视频备份利器

自建私有云相册:Docker一键部署Immich,照片视频备份利器前言随着人们手机、PC、平板等电子产品多样,我们拍摄和保存的照片和视频数量也在不断增加。如何高效地管理和备份这些珍贵的记忆成为了一个重...

docker容器的使用以及部署mysql

首先什么是docker官方:翻译:Docker是一个用于开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分离,以便您可以快速交付软件。使用Docker,您可以像管理应...

自建Docker镜像加速服务,免费且简单,服务器VPS、NAS皆可用
自建Docker镜像加速服务,免费且简单,服务器VPS、NAS皆可用

写在前面:流程十分简单,有手就行,还请耐心看完。本文的实例仅做演示用,不久后将会删除,有需要的各位请自行搭建。免费实例如果15分钟内未收到入站流量,Render会关闭实例的网络服务。Render会在下次收到处理请求时重新启动该服务。Ren...

2025-05-24 15:40 mhr18

用了8年的方式-用 Docker 瞬间搭建本地开发环境

有些时候我们需要在本地搭开发环境,比如平时学习新技术的时候。或者有时候公司的项目需要在本地建一套类似的,方便调试修改。开发环境可能包括MySQL、Redis、Nginx、MQ、Elasticsea...

使用dockerfile构建docker镜像

准备工作购买vps使用ssh工具连接上1、更新系统aptupdate-y2、一键安装Dockercurl-fsSLhttps://get.docker.com-oget-docker.sh...

快速搭建 SpringCloud 微服务开发环境的脚手架

本文适合有SpringBoot和SpringCloud基础知识的人群,跟着本文可使用和快速搭建SpringCloud项目。本文作者:HelloGitHub-秦人HelloGitHub推出...

Docker Hub最全详解(图文全面总结)

DockerHubDockerHub是一个由Docker公司负责维护的公共注册中心,它包含了超过15000多个可用来下载和构建容器的Docker镜像。DockerHub作用Docker好比一个代...

Docker 命令详解

dockerimages—查看本地镜像命令dockerimages说明列出本地已下载的所有镜像及其标签、ID、大小等信息。适用场景查看本地镜像资源、准备删除或管理镜像时。常见用法docker...

Kylin安装Dify

cd/mntgitclonehttps://github.com/langgenius/dify.gitcp/mnt/dify/docker/.env.example/mnt/dif...

kali下对Docker的详细安装

Docker是渗透测试中必学不可的一个容器工具,在其中,我们能够快速创建、运行、测试以及部署应用程序。如,我们对一些漏洞进行本地复现时,可以使用Docker快速搭建漏洞环境,完成复现学习。注:本教程仅...

银河麒麟V10使用Docker方式部署应用

现在越来越多的企业级应用需要运行在国产化环境中,而银河麒麟V10是目前我碰到的最常用的服务器,在银河麒麟上部署应用有两种方式:使用二进制文件编译部署和使用Docker。关于使用二进制文件的方式...

Docker入门到精通超详细教程,Docker全家桶实战攻略

大家好,我是各位双生的武魂、随身老爷爷。从看到这篇内容开始,你就是被选定的天命骚年,将承担起学完docker教程的使命,本使命为单向契约,你可选择YES或者选择YES。正式学习之前,我先给大家做一下d...

【Docker 新手入门指南】第一章:前言

一、基本介绍Docker介绍Docker是基于Go语言开发的开源容器化平台,旨在实现“一次镜像,处处运行”。它通过将应用程序及其依赖环境(代码、运行时、系统工具、系统库等)打包成一个轻量级、可移...

取消回复欢迎 发表评论: