redis中list类型的操作

news2025/2/23 10:55:59

一、特点    
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 2^32 - 1 个元素 (超过40亿个元素)。


    list其底层使用quicklist存储数据

    quicklist:称为快速列表,是由listPack组成的双向链表,即quicklist的每一个节点都是一个listPack。当listPack的大小超过8k时,才会创建下一个节点。

    listPack是优化后的ziplist,listPack每个节点不再包含前一个节点的长度,这样就可以避免极端情况下连锁更新带来的不小的性能消耗。

二、使用场景
1、消息队列

    比如在秒杀时,多人同时请求服务,可能会堵塞服务器的通道,甚至造成服务器宕机。如果按用户的点击顺序先把请求保存到redis的list中(配合string类型统计数量,超过秒杀数量的请求忽略掉)。服务再从redis中取出请求进行处理。

2、评论列表

    可以把视频、小说、或是新闻的评论保存到list中,把最新的评论添加到最前面。还可以把回复插入到某条评论的后面。

3、分页

    每个用户的查询条件不同,当用户量大时,实时查询对服务器的性能影响较大,如果把用户查询的结果缓存到redis中,当用户查看某一页时,服务在缓存此页的同时,把下一页也查询缓存在redis中,用户翻页时可直接从缓存中获取,并且回退查看上一页时,也可以直接从redis缓存中获取。

4、排行榜结果

    比如热搜排行,首先这种排行并不是实时的,每天会在指定的时间进行更新,此时可以把统计的结果缓存在reids的list中。

5、工作流

    有许多业务是有流程的,上一步完成,再一下步,经常在编辑的时候需要进行回退操作。可以把每一步的数据缓存在reids的list中,当要回退时,反向获取即可。

三、添加值
1、添加元素到列表的头部

1)lpush

    向列表头部一次添加一个或多个值,在前面的值会先插入,方法返回当前列表中值的数量。如果key不存在,则创建key

语法

lpush key element [element ...]

示例

//在列表头部添加两个民族
lpush nation '汉族' '壮族'

2)lpushx

    仅当key存在时,向列表头部一次添加一个或多个值,在前面的值会先插入,方法返回当前列表中值的数量。

语法

lpushx key element [element ...]

示例

//向列表中添加两个民族
lpushx nation '苗族' '傣族'

2、添加元素到列表尾部

1)rpush

    向列表尾部一次添加一个或多个值,在前面的值会先插入,方法返回当前列表中值的数量。如果key不存在,则创建key

语法

rpush key element [element ...]

示例

//向列表尾部添加回族和满族
rpush nation '回族' '满族'

2)rpushx

    仅当key存在时,向列表尾部一次添加一个或多个值,在前面的值会先插入,方法返回当前列表中值的数量。

语法

rpushx key element [element ...]

示例

//向列表的尾部添加藏族和侗族
rpushx nation '藏族' '侗族'

3、添加元素到指定值的前或后方

3)linsert

    在指定的值的前面或是后面插入一个新值,返回当前列表中值的数量

语法

linsert key BEFORE|AFTER pivot element

示例

//在苗族的前面插入布衣族

linsert nation before '苗族' '布衣族'

四、修改值
1、lset

修改指定下标位置的值,位置从0开始计算,-1表示最后一个元素

语法

lset key index element

示例

//把第3个值替换成羌族
lset nation 2 '羌族'

五、删除值
1、从列表头部删除值

1)lpop

从列表的头部开始删除指定数量的值,删除后返回被删除的值

语法

lpop key [count]

示例

//删除并返回前两个值
lpop nation 2

2)blpop

      从列表的头部删除一个值并返回此值, 如果列表没有值会阻塞列表直到等待超时或发现可删除的值为止。

语法

blpop key [key ...] timeout

其中

timeout为超时时间,单位为秒

示例

//删除第一个元素,如果不存在等待10秒
blpop nation 10

2、从列表的尾部删除一个值

1)rpop

    从列表的尾部开始删除指定数量的值,删除后返回被删除的值

语法

rpop key [count]

示例

//删除并返回最后两个值
rpop nation 2

2)brpop

    从列表的尾部删除一个值并返回此值, 如果列表没有值会阻塞列表直到等待超时或发现可删除的值为止。

语法

brpop key [key ...] timeout

示例

//删除最后一个元素
brpop nation 10

3)rpoplpush

    把一个列表末尾的值删除并把此值从头部插入到另一个列表中,返回被删除的值

语法

rpoplpush source destination

示例

//把列表中的最后一个值移动到最前面,返回移动的值
rpoplpush nation nation

3)brpoplpush

    把一个列表末尾的值删除并把此值从头部插入到另一个列表中,返回被删除的值。如果列表没有值会阻塞列表直到等待超时或发现可删除的值为止。

brpoplpush source destination timeout

示例

//把nation中的最后一个元素转移到nation1中
brpoplpush nation nation1 10

4)lrem

    删除列表中指定的值,如果值有重复,删除从头部算起的前count个值,如果不够,则删除实际数量的值,当count为0时,删除所有指定的值

语法

lrem key count element

示例

//删除前两个回族,如果存在的话
lrem nation 2 回族

5)ltrim

    把指定范围之外的元素都删除,下标从0开始,-1表示最后一个元素。

语法

ltrim key start stop

示例

//只保存第2个值,其它值全部删除
ltrim nation 1 1

六、查看值
1、lindex

    返回指定下标位置的值,-1为最后一个元素

语法

lindex key index

示例

//返回第3个值
lindex nation 2

2、llen

    返回当前列表中元素的数量

语法

llen key

示例

//返回列表中值的数量
llen nation

3、lrange

    返回指定范围内的值,下标从0开始,-1为最后一个元素

语法

lrange key start stop

示例

//返回列表中前两个值
lrange nation 0 1

 文章来源于哔站《redis中list类型的操作》

更多学习视频和专栏文章请到哔站个人空间: 布道师学院的个人空间-布道师学院个人主页-哔哩哔哩视频

更多资源和项目下载请到:”开源吧(找实战项目和毕设项目的好网站)“ ​ :开源吧

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1058756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql面试题10:MySQL中有哪几种锁?表级锁、行级锁、页面锁区别和联系?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Mysql中有哪几种锁? 在MySQL中,主要有以下几种类型的锁: 共享锁(Shared Lock):也称为读锁。多个事务可以同时持有共享锁,可以读取但不能修…

想要精通算法和SQL的成长之路 - 验证二叉树的前序序列化

想要精通算法和SQL的成长之路 - 验证二叉树的前序序列化 前言一. 验证二叉树的前序序列化 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 验证二叉树的前序序列化 原题链接 思路(参考负雪明图): 首先我们看题目所给的字符串&#xff…

Ipython和Jupyter Notebook介绍

Ipython和Jupyter Notebook介绍 Python、IPython和Jupyter Notebook是三个不同但密切相关的工具。简而言之,Python是编程语言本身,IPython是对Python的增强版本,而Jupyter Notebook是一种在Web上进行交互式计算的环境,使用IPytho…

CSS学习小结

css的两种使用方式&#xff1a; ①内嵌样式表 ②导入外部样式表&#xff08;实际开发常用&#xff09;<link href"...." rel"stylesheet"/> 选择器&#xff1a; ①标签选择器&#xff1a;通过标签种类决定 ②类选择器&#xff1a;class"..…

websocket逆向【python实现http/https拦截】

python实现http拦截 前言:为什么要使用http拦截一、技术调研二、技术选择三、使用方法前言:为什么要使用http拦截 大多数爬虫玩家会直接选择API请求数据,但是有的网站需要解决扫码登录、Cookie校验、数字签名等,这种方法实现时间长,难度高。需求里面不需要高并发,有没有…

vertx的学习总结4

一、异步数据和事件流 1.为什么流是事件之上的一个有用的抽象&#xff1f; 2.什么是背压&#xff0c;为什么它是异步生产者和消费者的基础&#xff1f; 3.如何从流解析协议数据&#xff1f; 1. 答&#xff1a;因为它能够将连续的事件序列化并按照顺序进行处理。通过将事件…

ensp桥接电脑网卡

注意&#xff1a; 如果ensp云中没有你想要的网卡&#xff0c;请卸载电脑中的wincap&#xff0c;重新安装wincap即可。 wincap下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1JSXJSu4wKaiCKjGvY0mHKA?pwdh29v 提取码&#xff1a;h29v

【算法训练-数组 三】【结构特性】螺旋矩阵

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是螺旋矩阵&#xff0c;使用【二维数组】这个基本的数据结构来实现 螺旋矩阵【EASY】 二维数组的结构特性入手 题干 解题思路 根据题目示例 mat…

java Spring Boot 自动启动热部署 (别再改点东西就要重启啦)

上文 java Spring Boot 手动启动热部署 我们实现了一个手动热部署的代码 但其实很多人会觉得 这叫说明热开发呀 这么捞 写完还要手动去点一下 很不友好 其实我们开发人员肯定是希望重启这种事不需要自己手动去做 那么 当然可以 我们就让它自己去做 Build Project 这个操作 我们…

10.3运算符重载

#include <iostream>using namespace std;//定义一个复数类 class Complex { private:int real; //实部int vir; //虚部 public:Complex(){}Complex(int r, int v):real(r),vir(v){}void show(){if(vir > 0){cout<<real<<" "<<vir&…

Linux实用操作(固定IP、进程控制、监控、文件解压缩)

目录 一、快捷键 1、ctrl c强制停止 2、ctrl d退出或登出 3、历史命令搜索history 4、光标移动快捷键 5、清屏 二、软件安装 1、CentOS的yum命令 2、Ubantu的apt命令 三、systemctl命令 四、软连接 五、日期、时区 1、date命令 2、修改Linux时区为东八区 3、nt…

Linux基本指令(上)——“Linux”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容是Linux啦&#xff01;&#xff01;&#xff01;主要是Linux的一些基本指令和Linux相关的基本概念&#xff08;系统层面&#xff09;&#xff0c;下面&#xff0c;让我们进入Linux的世界吧&#xff01;&#xff01;…

OpenGLES:绘制一个混色旋转的3D圆锥

一.概述 1.1 对圆锥的拆解 上一篇博文讲解了绘制圆柱体&#xff0c;这一篇讲解绘制一个彩色旋转的圆锥 在绘制圆柱体时提到过&#xff0c;关键点是先将圆柱进行拆解&#xff0c;便于创建出顶点坐标数组 同样&#xff0c;绘制圆锥也先进行拆解 圆锥的拆解很简单&#xff0c…

BGP(Border Gateway Protocol)

目录 BGP报文类型 BGP状态机 BGP邻居 BGP同步规则 Transit AS中的IBGP路由传递 IBGP水平分割原则 路由通告规则 表 计时器 配置命令 维护BGP BGP表 路径属性 WEIGHT LOCAL PREFERENCE AS-path Origin MED NEXT_HOP NEXT_HOP on shared Media COMMUNIT…

Eevee引擎与渲染原理

操作视频&#xff1a; 02-Blender的Eevee渲染器_哔哩哔哩_bilibiliy 技术原理&#xff1a; How 3D Game Rendering Works, A Deeper Dive: Rasterization and Ray Tracing | TechSpot A guide to Blender Eevee render settings - Artisticrender.com 笔记&#xff1a; …

安装Vue脚手架图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 预备工作 在安装Vue脚手架之前&#xff0c;请确保您已经正确安装了npm&#xff1b;假若还尚未安装npm&#xff0c;请你参考 Node.js安装教程图文详解。 安装Vue脚手架 请…

STM32HAL库CRC学习及测试记录

STM32HAL库CRC学习及测试记录 1.CRC的校验原理2.基本原理3.几个基本概念13.1.1 CRC检验码的计算13.1.2 错误检测13.2 STM32中的CRC 4.CRC功能描述5.STM32Cube生成工程6.看官方说如何使用这个驱动程序7.实验现象 1.CRC的校验原理 循环冗余校验(CRC)计算单元是根据固定的生成多项…

实用的嵌入式 C 程序!建议收藏

在学习和工作开发的时候&#xff0c;经常需要使用到各种各样不太常用的操作&#xff0c;这种情况一般是自己手动写一些小程序来处理。因为它们不太常用&#xff0c;所以经常用了又没保存&#xff0c;等到下一次在使用的时候又需要重写&#xff0c;这样的非常浪费时间和精力。 …

力扣练习——链表在线OJ

目录 提示&#xff1a; 一、移除链表元素 题目&#xff1a; 解答&#xff1a; 二、反转链表 题目&#xff1a; 解答&#xff1a; 三、找到链表的中间结点 题目&#xff1a; 解答&#xff1a; 四、合并两个有序链表&#xff08;经典&#xff09; 题目&#xff1a; 解…

c++-vector

文章目录 前言一、vector介绍二、vector使用1、构造函数2、vector 元素访问3、vector iterator 的使用4、vector 空间增长问题5、vector 增删查改6、理解vector<vector< int >>7、电话号码的字母组合练习题 三、模拟实现vector1、查看STL库源码中怎样实现的vector2…