常用来制作队列,当然lpush+rpop也能做栈

#将RPUSH RPUSHX LPUSH LPUSHX一并介绍(具体介绍RPUSH和RPUSHX,因为其实就是插入的方向的区别)

RPUSH key value [value ...]

向存于 key 的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 当 key 保存的不是一个列表,那么会返回一个错误。

可以使用一个命令把多个元素打入队列,只需要在命令后面指定多个参数。元素是从左到右一个接一个从列表尾部插入。 比如命令 RPUSH mylist a b c 会返回一个列表,其第一个元素是 a ,第二个元素是 b ,第三个元素是 c

#情况1 key不是列表

127.0.0.1:6379> set list2 test
OK
127.0.0.1:6379> RPUSH list2 1 2 3
(error) WRONGTYPE Operation against a key holding the wrong kind of value #情况2 正常情况 127.0.0.1:6379> RPUSH list1 1 2 3
(integer) 3 127.0.0.1:6379> LRANGE list1 0 -1
1) "1"
2) "2"
3) "3"

RPUSHX key value

将值 value 插入到列表 key 的表尾, 当且仅当 key 存在并且是一个列表。 和 RPUSH 命令相反, 当 key 不存在时,RPUSHX 命令什么也不做。

#情况1 正常情况list存在以刚刚的list1举例

127.0.0.1:6379> RPUSHX list1 4
(integer) 4
127.0.0.1:6379> LRANGE list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4" #情况2 list不存在,不操作直接返回0 127.0.0.1:6379> RPUSHX list3 4
(integer) 0

#pop指令。将RPOP LPOP一并介绍(具体介绍RPOP,因为其实就是弹出的方向的区别)

RPOP key

移除并返回存于 key 的 list 的最后一个元素。

#情况1list不存在的情况

127.0.0.1:6379> RPOP list3
(nil) #情况2 非list 127.0.0.1:6379> get list2
"test" 127.0.0.1:6379> RPOP list2
(error) WRONGTYPE Operation against a key holding the wrong kind of value #情况3 正常情况 127.0.0.1:6379> LRANGE list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> RPOP list1
"4" 127.0.0.1:6379> LRANGE list1 0 -1
1) "1"
2) "2"
3) "3" #情况4 当list为空的情况 127.0.0.1:6379> RPOP list
(nil)

#如果想修改某个位置的值 lset

LSET key index value

设置 index 位置的list元素的值为 value。

当index超出范围时会返回一个error。

127.0.0.1:6379> LRANGE list1 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> LSET list1 0 0
OK
127.0.0.1:6379> LRANGE list1 0 -1
1) "0"
2) "2"
3) "3"

#如果想截断保留list部分空间使用ltrim

LTRIM key start stop

修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。start 和 stop 都是由0开始计数的, 这里的 0 是列表里的第一个元素(表头),1 是第二个元素,以此类推。

LTRIM 的一个常见用法是和 LPUSH / RPUSH 一起使用。此场景可用来纪录日志,类似环形队列。以为空间是定长 例如:

  • LPUSH mylist someelement
  • LTRIM mylist 0 99
127.0.0.1:6379> LRANGE list1 0 -1
1) "0"
2) "2"
3) "3"
127.0.0.1:6379> LTRIM list1 0 1
OK
127.0.0.1:6379> LRANGE list1 0 -1
1) "0"
2) "2"

#如果想在某个list值前后加值可以使用linsert

LINSERT key BEFORE|AFTER pivot value

把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面。

当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。

当 key 存在,但保存的不是一个list的时候,会返回error。

#下面例子是在2后插入3在2前插入1.

127.0.0.1:6379> LRANGE list1 0 -1
1) "0"
2) "2"
127.0.0.1:6379> LINSERT list1 AFTER 2 3
(integer) 3
127.0.0.1:6379> LINSERT list1 BEFORE 2 1
(integer) 4 127.0.0.1:6379> LRANGE list1 0 -1
1) "0"
2) "1"
3) "2"
4) "3"

redis 数据类型为list命令整理以及示例的更多相关文章

  1. redis 数据类型为set命令整理以及示例

    数据类型为set.可以保证set内数据唯一.场景:生成订单号,因为要求订单号是绝对不能重复的,所以数据库中要设置为unique索引.但是其实可以通过redis,set来做每天的订单集合.比如A客户的订 ...

  2. redis 数据类型为string命令整理以及示例

    #设置值 SET key value [EX seconds] [PX milliseconds] [NX|XX] SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX的功能,所 ...

  3. Redis数据类型和常用命令

    Redis相较于其它的数据库虽然简单,但是要熟记所有命令的用法也并非易事.一个简单的技巧是通过要操作的数据类型来将这些命令进行结构化. 数据类型和对应命令 所有存储于redis中的数据都对应于一个键值 ...

  4. redis笔记总结之redis数据类型及常用命令

    三.常用命令 3.1 字符串类型(string) 字符串类型是Redis中最基本的数据类型,一个字符串类型的键允许存储的数据的最大容量为512MB. 3.1.1 赋值与取值: SET key valu ...

  5. redis数据类型及常用命令介绍(图文实例)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAAFLCAYAAACUdvXUAAAgAElEQVR4nO3da1da58L2fT5KfPvc96 ...

  6. redis数据类型及常用命令使用

    redis干啥的,一般人都知道,但很多人只知道是个缓存数据库,其它的就不知道了,本猿无能亦是如此,然知耻而后勇,我们该理一理这里边的一些逻辑,看看redis究竟是怎么一回事儿,能干啥,怎么做的,这样才 ...

  7. Redis数据类型、两种模型、事务、内部命令

    1.redis数据类型 a.字符串,使用场景:常规key-value缓存应用 set name lixiang get name append name 123 # 字符串追加 mset key va ...

  8. Redis 基础及各数据类型对应的命令

    Redis 命令文档 基本概念 安装及使用 可以在官网下载源码编译安装.对于 CentOS,还可以通过 yum install redis 安装. Redis 安装完成后,通过 redis-serve ...

  9. Redis学习之二 数据类型和相关命令

    原文:https://www.cnblogs.com/lonelyxmas/p/9073928.html 如果还不懂安装的,请看 Windows环境下安装Redis Redis一共支持五种数据类型 1 ...

随机推荐

  1. pyspark 逻辑回归程序

    http://www.qqcourse.com/forum.php?mod=viewthread&tid=3688 [很重要]:http://spark.apache.org/docs/lat ...

  2. mysql 分配内存大小配置

    优化 innodb_buffer_pool_size  = 10*1024*1024*1024

  3. 解决iframe在iphone不兼容的问题

    <div class="scroll-wrapper"> <iframe src="地址"></iframe> </d ...

  4. AngularJS 中{{}}与ng-bind指令

    面试中,有被问题关于{{}}与ng-bind指令的问题,在此,分享下自己的知识点. 在脚本没有加载完成时,用户会看到{{}},界面比较丑陋.     一般的解决方法: 在index.html里面使用n ...

  5. 线段树模板(HDU 6356 Glad You Came)

    题目: HDU 6356 http://acm.hdu.edu.cn/showproblem.php?pid=6356 很裸的线段树 #include<bits/stdc++.h> #de ...

  6. Mybatis返回List<Map<K,V>>

    最终映射的字段名 会被作为 hashMap 的 key , <!-- TODO 测试返回 HashMap--> <resultMap id="testResultMap&q ...

  7. javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量

    定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ...

  8. Vue组成和第3方插件

    vue全家桶的成员是:vue-cli,vuex,vue-router,vue-axios(vue2.0). 第三方插件:vue-scroller,vue-lazyload,vue-awesome-sw ...

  9. 【pycharm】使用过程的相关问题

    背景:安装scrapy后在cmd里可以正常import scrapy模块,但是在pycharm里不可以(python2.7) 问题:cmd中能正常导入模块,在pycharm报错 原因:pycharm里 ...

  10. Android 各个版本新特性

    一.Android 4.x 新锁屏界面: Android4.0重新设计了锁屏幕UI,下方的解锁虚拟按键向周围发射出微光,轻轻拖动就可以解锁,比原来在UI上确实有很大的进步. 全新Widget排列: 主 ...