6、Redis五大数据类型---列表(List)
一、列表(List)简介
- 单键多值:Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- 它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
- 其底层有linkedList、zipList和quickList这三种存储方式。
list在redis常用作堆,栈。
二、常用命令
1、lpush/rpush lpush/rpush<key><value1> <value2><value3>
从左边/右边插入一个或多个值。
127.0.0.1:6379> lpush list a #在list左边插入a值
(integer) 1
127.0.0.1:6379> lpush list b #在list左边插入b值
(integer) 2
127.0.0.1:6379> lrange list 0 -1 #获取当前list所有值
1) "b"
2) "a"
127.0.0.1:6379> rpush list c #在list右边插入c值
(integer) 3
127.0.0.1:6379> rpush list d #在list右边插入d值
(integer) 4
127.0.0.1:6379> lrange list 0 -1 #获取list所有值
1) "b"
2) "a"
3) "c"
4) "d"
127.0.0.1:6379>
2、lpop/rpop lpop/rpop <key>
从左边/右边吐出一个值。(值在键在,值光键亡。)
127.0.0.1:6379> lrange list 0 -1 #查看当前list所有值
1) "b"
2) "a"
3) "c"
4) "d"
127.0.0.1:6379> lpop list 1 #在左边弹出一个值
1) "b"
127.0.0.1:6379> rpop list 1 #在右边弹出一个值
1) "d"
127.0.0.1:6379> lrange list 0 -1 #获取list当中所有的值
1) "a"
2) "c"
127.0.0.1:6379> keys * #查看数据库的键
1) "list"
127.0.0.1:6379> rpop list 2 #将list中所有的都弹出去
1) "c"
2) "a"
127.0.0.1:6379> keys * #查看键是否存在
(empty array)
127.0.0.1:6379>
通过上述测试验证了,值在键在,值光键亡。
3、lrange lrange <key><start><stop>
按照索引下标获得元素(从左到右)
127.0.0.1:6379> lrange mylist 0 -1 #获取mylist里面的所有值,-1右边第一个
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lrange mylist 0 2 #获取下标0到2的值
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> lrange mylist 0 1 #获取下标0到1的值
1) "d"
2) "c"
127.0.0.1:6379>
4、lindex lindex<key><index>
按照索引下标获得元素(从左到右)
127.0.0.1:6379> lrange mylist 0 -1 #获取mylist里面的所有值,-1右边第一个
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lindex mylist 0 #获取mylist集合中第0个元素
"d"
127.0.0.1:6379> lindex mylist 1 #获取mylist集合中第1个元素
"c"
127.0.0.1:6379> lindex mylist 2 #获取mylist集合中第2个元素
"b"
5、llen llen <key>
获得列表长度
127.0.0.1:6379> lrange mylist 0 -1 #
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> llen mylist #获取mylist的长度
(integer) 4
127.0.0.1:6379> lpush mylist1 l #将l值加入mylist1中
(integer) 1
127.0.0.1:6379> llen mylist1 #获取mylist1的值
(integer) 1
6、linsert linsert <key> before/after <value><newvalue>
在的后面插入插入值
127.0.0.1:6379> lrange mylist 0 -1 #获取mylist里面的所有值,-1右边第一个
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> linsert mylist before a m #在指定的值前面添加一个元素m
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1 #查看mylist里面的所有值
1) "d"
2) "c"
3) "b"
4) "m"
5) "a"
127.0.0.1:6379> linsert mylist after a n #在指定的值后边添加一个元素n
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1 #查看mylist里面的所有值
1) "d"
2) "c"
3) "b"
4) "m"
5) "a"
6) "n"
127.0.0.1:6379>
7、lrem lrem <key><n><value>
从左边删除n个value(从左到右)
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lrem mylist 2 z #移除mylist中z元素,没有返回0
(integer) 0
127.0.0.1:6379> lrem mylist 2 a #移除mylist中2个a元素,如果只有一个a,就只能移除一个
(integer) 1
8、lset lset <key><index><value>
将列表key下标为index的值替换成value
127.0.0.1:6379> lrange mylist 0 -1 #获取mylist立面的值
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lset mylist 0 m #将第0个元素替换成m
OK
127.0.0.1:6379> lrange mylist 0 -1 #获取mylist所有元素
1) "m"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379>
三、总结
list实际上是一个链表,before Node after ,left right都可以插入值
如果key不存在,创建新的链表
如果key存在,新增内容
如果移除了所有值,空链表,代表不存在
在两边插入或者改动值,效率最高!中间元素效率相对较低
消息队列(Lpush Rpop) 栈(Lpush Lpop)
6、Redis五大数据类型---列表(List)的更多相关文章
- Redis五大数据类型的常用操作
在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...
- redis 五大数据类型使用
redis 五大数据类型使用 字符串str 单个值 127.0.0.1:6379> set name pp # 设置键值[O(1)] OK 127.0.0.1:6379> setex na ...
- 一文搞定Redis五大数据类型及应用场景
本文学习知识点 redis五大数据类型数据类型:string.hash.list.set.sorted_set 五大类型各自的应用场景 @TOC 1. string类型 1-1 string类型数据的 ...
- 《Redis入门指南(第二版)》读书思考总结之Redis五大数据类型
热身:系统级命令 1. 获得符合规则的键名列表 KEYS pattern 模式匹配 产品的缓存:product+"."+....; => keys product* 订单的 ...
- Redis五大数据类型详解
关于Redis的五大数据类型,它们分别为:String.List.Hash.Set.SortSet.本文将会从它的底层数据结构.常用操作命令.一些特点和实际应用这几个方面进行解析.对于数据结构的解析, ...
- redis五大数据类型以及常用操作命令
Redis的五大数据类型 String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意 ...
- 四:Redis五大数据类型
Redis的五大数据类型 1.string(字符串) string是Redis最基本的类型,你可以理解成与menmcached一模一样的类型,一个key对应一个value string类型是二进制安全 ...
- redis 基本数据类型-列表(List)
今天不瘦给大家分享一下redis第二个基本数据类型:列表.如果大家了解基本数据结构,相信大家对列表不会陌生,比如在C语言中我们可以使用数组实现一个列表,也可以使用链表实现一个列表(列表链表傻傻分不清楚 ...
- Redis五大数据类型以及操作
目录: 一.redis的两种链接方式 二.redis的字符串操作(string) 三.redis的列表操作(list) 四.redis的散列表操作(类似于字典里面嵌套字典) 五.redis的集合操作( ...
随机推荐
- python将字符串转换成对应的python数据类型--eval和json.loads(),json.dumps()
eval()和json.loads() 都可以将字符串转换成对应的python数据类型,举个字典的例子,同样适合其他数据类型元组.列表.集合. In [3]: ss = '{"a" ...
- ajax - error
... <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title ...
- [atARC124F]Chance Meeting
为了方便,不妨先将$n$和$m$都减小1,其意义即为移动的次数 注意到老鼠向下移动和猫向上移动对于第2个条件是等价的,对于第1个条件即要求都恰好移动$n$次,那么对应的方案数即为${2n\choose ...
- HouseRobber II
// // Created by Administrator on 2021/7/27. // #ifndef C__TEST01_HOUSEROBBER2_HPP #define C__TEST01 ...
- Linux排序数据
1.sort 默认是按照字符大小来排序,如果要按照数字大小排序,需要加参数-n,-M按月排序 如:sort text.txt按字符大小排序 sort -n text.txt 按照数字大小排序 sort ...
- LOJ 2372 -「CEOI2002」臭虫集成电路公司(轮廓线 dp)
题面传送门 u1s1 似乎这题全网无一题解?那就由我来写篇题解造福人类罢(伦敦雾 首先看这数据范围,一脸状压.考虑到每一层的状态与上面两层有关,因此每层转移到下一层的有用信息只有两层,需要用三进制保存 ...
- python-django使用ORM模型增删改查CRUD
from weibo.models import WeiboUser as User user_obj = User.objects.get(pk=1) user_obj.pk Out[4]: 1 u ...
- PHP 获取两个日期相差多少年,多少月,多少天,多少小时,并填充数组
PHP 获取两个日期相差多少年,多少月,多少天,多少小时,并填充数组 <?php /** * 获取两个日期相差多少年,多少月,多少天,多少小时,并填充数组 * @param [type] $st ...
- char和varchar2
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的. 比如,存储字符串"abc",对于CHAR (10),表示你存储的字符将占10个字节(包括7个空字符) 而同样的V ...
- DNS域名解析全过程
一张图看懂DNS域名解析全过程 DNS域名解析是互联网上非常重要的一项服务,上网冲浪(还有人在用这个词吗?)伴随着大量DNS服务来支撑,而对于网站运营来说,DNS域名解析的稳定可靠,意味着更多用户 ...