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

【Redis】list以及他的应用场景

  1. 介绍list 即是 链表。链表是一种非常常见的数据结构,特点是易于数据元素的插入和删除并且且可以灵活调整链表长度,但是链表的随机访问困难。许多高级编程语言都内置了链表的实现比如 Java 中的 LinkedList,但是 C 语言并没有实现链表,所以 Redis 实现了自己的链表数据结构。Redis 的 list 的实现为一个 双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。

  2. 常用命令: rpush,lpop,lpush,rpop,lrange、llen 等。

  3. 应用场景: 发布与订阅或者说消息队列、慢查询。

通过 rpush/lpop 实现队列:

1.先添加元素 

127.0.0.1:6379> rpush myList value1 # 向 list 的头部(右边)添加元素
(integer) 1
127.0.0.1:6379> rpush myList value2 value3 value4 # 向list的头部(最右边)添加多个元素
(integer) 4

2.通过 lrange myList 0 1 实现一次分页(为第一页),lrange myList 2 3(为第二页)

127.0.0.1:6379> lrange myList 0 1 # 查看对应下标的list列表, 0 为 start,1为 end
1) "value2"
2) "value3"
127.0.0.1:6379> lrange myList 0 -1 # 查看列表中的所有元素,-1表示倒数第一
1) "value2"
2) "value3"

通过 rpush/rpop 实现栈:

127.0.0.1:6379> rpush myList2 value1 value2 value3
(integer) 3
127.0.0.1:6379> rpop myList2 # 将 list的头部(最右边)元素取出
"value3"

通过 lrange 查看对应下标范围的列表元素:

127.0.0.1:6379> rpush myList value1 value2 value3
(integer) 3
127.0.0.1:6379> lrange myList 0 1 # 查看对应下标的list列表, 0 为 start,1为 end
1) "value1"
2) "value2"
127.0.0.1:6379> lrange myList 0 -1 # 查看列表中的所有元素,-1表示倒数第一
1) "value1"
2) "value2"
3) "value3"

通过 lrange 命令,你可以基于 list 实现分页查询,性能非常高!

通过 llen 查看链表长度:

127.0.0.1:6379> llen myList
(integer) 3

相关文章:

  • PDF标准详解(一)——PDF文档结构
  • vue中,使用file-saver导出文件,下载Excel文件、下载图片、下载文本
  • C# 命名管道NamedPipeServerStream使用
  • Spring依赖注入
  • 响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-3 getBoundingClientRect()
  • 【基础算法练习】单调队列与单调栈模板
  • LabVIEW扫频阻抗测试系统
  • 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)
  • vue 跨域XMLHttpRequest
  • 如何使用 WebRTC 与 Kurento 建立视频会议 App
  • 如何成为一个更好的沟通者?
  • 粒子群优化算法(Particle Swarm Optimization,PSO)求解基于移动边缘计算的任务卸载与资源调度优化(提供MATLAB代码)
  • navicat连接postgresql、人大金仓等数据库报错
  • 带libc源码gdb动态调试(导入glibc库使得可执行文件动态调试时可看见调用库函数源码)
  • 【Vue实用功能】Vue实现文档在线预览功能,在线预览PDF、Word等office文件
  • [译]前端离线指南(上)
  • Codepen 每日精选(2018-3-25)
  • Cumulo 的 ClojureScript 模块已经成型
  • extract-text-webpack-plugin用法
  • in typeof instanceof ===这些运算符有什么作用
  • Java-详解HashMap
  • jquery ajax学习笔记
  • windows下使用nginx调试简介
  • 简单易用的leetcode开发测试工具(npm)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何合理的规划jvm性能调优
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • Java总结 - String - 这篇请使劲喷我
  • 阿里云服务器如何修改远程端口?
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #AngularJS#$sce.trustAsResourceUrl
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • %check_box% in rails :coditions={:has_many , :through}
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (差分)胡桃爱原石
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • ***测试-HTTP方法
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Project Open Day(2011.11.13)
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .Net6使用WebSocket与前端进行通信
  • .NET业务框架的构建
  • .NET运行机制
  • .NET正则基础之——正则委托
  • .NET中 MVC 工厂模式浅析
  • //解决validator验证插件多个name相同只验证第一的问题
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面