• Redis基本数据类型:List


    基本数据类型:List列表
    在redis里面,我们可以把list玩成,栈、队列、阻塞队列!
    redis所有的list命令都是用l开头的
    list是可以存放重复值的

    127.0.0.1:6379> clear
    127.0.0.1:6379> lpush list1 one   # 往名为list1的list中里放入值
    (integer) 1
    127.0.0.1:6379> lpush list1 two
    (integer) 2
    127.0.0.1:6379> lpush list1 three   # 按123放入
    (integer) 3
    127.0.0.1:6379> lrange list1 0 -1   # 取出list1的值
    1) "three"
    2) "two"
    3) "one"   	# 发现是倒着出来的,先进后出
    127.0.0.1:6379> lrange list1 0 1   # 通过区间取出具体的值
    1) "three"
    2) "two"
    127.0.0.1:6379> rpush list1 right  # 从右边插入一个值right
    (integer) 4
    127.0.0.1:6379> lrange list1 0 -1   # 取出list1的值
    1) "three"
    2) "two"
    3) "one"
    4) "right"	# 发现right这个值最后出来,说明右边是指列表的尾部
    
    #############################################################
    移除命令
    
    lpop:往左边移除
    rpop:往右边移除
    127.0.0.1:6379> lrange list1 0 -1   # 获取list1中的所有值
    1) "three"
    2) "two"
    3) "one"
    4) "right"
    127.0.0.1:6379> lpop list1   # 从左边(头)移除一个
    "three"   # 移除的元素
    127.0.0.1:6379> rpop list1   # 从右边(尾)移除一个
    "right"   # 移除的元素
    127.0.0.1:6379> lrange list1 0 -1   # 移除后的list1
    1) "two"
    2) "one"
    
    #############################################################
    lrem:l remove移除指定的值!
    
    127.0.0.1:6379> lrange list 0 -1
    1) "three"
    2) "three"
    3) "two"
    4) "one"
    127.0.0.1:6379> lrem list 1 three  # 移除一个three
    (integer) 1
    127.0.0.1:6379> lrange list 0 -1
    1) "three"
    2) "two"
    3) "one"
    127.0.0.1:6379> lpush list three  # 再放进去一个three
    (integer) 4
    127.0.0.1:6379> lrange list 0 -1
    1) "three"
    2) "three"
    3) "two"
    4) "one"
    127.0.0.1:6379> lrem list 2 three   # 移除两个three
    (integer) 2
    127.0.0.1:6379> lrange list 0 -1
    1) "two"
    2) "one"
    #############################################################
    Lindex:根据索引获取值
    
    127.0.0.1:6379> lindex list1 1   # 获取list1中的索引为1的值
    "one"
    127.0.0.1:6379> lindex list1 0
    "two"
    
    #############################################################
    llen:获取list长度
    
    127.0.0.1:6379> lpush list one
    (integer) 1
    127.0.0.1:6379> lpush list two
    (integer) 2
    127.0.0.1:6379> lpush list three
    (integer) 3
    127.0.0.1:6379> llen list    # 返回list的长度(此处list是key名)
    (integer) 3
    
    #############################################################
    trim:修剪;截断list,相当于截取list中的值
    
    127.0.0.1:6379> lpush mylist hello
    (integer) 1
    127.0.0.1:6379> lpush mylist hello1
    (integer) 2
    127.0.0.1:6379> lpush mylist hello2
    (integer) 3
    127.0.0.1:6379> lpush mylist hello3   # 往里面放四个值
    (integer) 4
    127.0.0.1:6379> lrange mylist 0 -1   # 获得值
    1) "hello3"
    2) "hello2"
    3) "hello1"
    4) "hello"
    # 截取0-1的值,当然你想截取其他的也可以,截取了,list也被修改了
    127.0.0.1:6379> ltrim mylist 0 1   
    OK
    127.0.0.1:6379> lrange mylist 0 -1
    1) "hello3"
    2) "hello2"
    
    #############################################################
    rpoplpush # 移除列表最后一个元素,放到另一个list中
    
    127.0.0.1:6379> lrange mylist 0 -1
    1) "hello3"
    2) "hello2"
    3) "hello1"
    127.0.0.1:6379> rpoplpush mylist otherlist  # 移动最后一个元素到其他list
    "hello1"
    127.0.0.1:6379> lrange mylist 0 -1   # 可以看到已经被移走了
    1) "hello3"
    2) "hello2"
    127.0.0.1:6379> lrange otherlist 0 -1   # 移动到这个新的list中了
    1) "hello1"
    
    #############################################################
    lset:将列表指定下标的值,替换为另一个值,就是更新操作
    
    127.0.0.1:6379> exists list   # 判断这个列表是否存在
    (integer) 0
    127.0.0.1:6379> lset list 0 item    # 错误的原因是list不存在
    (error) ERR no such key
    127.0.0.1:6379> lpush list value1   # 先放入一个value1
    (integer) 1
    127.0.0.1:6379> lrange list 0 0
    1) "value1"
    127.0.0.1:6379> lset list 0 value2   # 把第0索引替换成一个value2
    OK
    127.0.0.1:6379> lrange list 0 0
    1) "value2"
    127.0.0.1:6379> lset list 1 value3   # list中没有索引为1的值,所以失败
    (error) ERR index out of range
    
    #############################################################
    linsert:插入,在list的某个值前,或后插入一个值
    127.0.0.1:6379> flushdb  # 清空redis数据库
    OK
    127.0.0.1:6379> rpush mylist hello
    (integer) 1
    127.0.0.1:6379> rpush mylist world   # 放两个值
    (integer) 2
    # 在world前插入一个other
    127.0.0.1:6379> linsert mylist before "world" "other"
    (integer) 3
    127.0.0.1:6379> lrange mylist 0 -1
    1) "hello"
    2) "other"
    3) "world"
    # 在world前插入一个!!!!!
    127.0.0.1:6379> linsert mylist after world "!!!!!"
    (integer) 4
    127.0.0.1:6379> lrange mylist 0 -1
    1) "hello"
    2) "other"
    3) "world"
    4) "!!!!!"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165

    小结

    1、他实际上是一个链表,before Node after , left , right都可以插入值
    2、如果key不存在,创建新的链表
    3、如果key存在,新增内容
    4、如果移除了所有值,空链表,也代表不存在!
    5、在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点~

    消息排队!消息队列( Lpush Rpop ) ,栈( Lpush Lpop )

  • 相关阅读:
    《PostgreSQL中的JSON处理:技巧与应用》
    Android AOP二三事:使用AspectJ增加登录校验
    产品关键词该怎么优化改进?
    node_modules/node-sass npm ERR! command failed解决方法
    找不到d3dcompiler_43.dll,无法继续执行代码如何解决
    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10)- 从Serial NAND启动
    SQL SERVER中XML查询:FOR XML指定RAW
    Android sdk工程搭建(aar)
    酒店管理系统的设计与实现
    spring boot 过滤器&拦截器与aop
  • 原文地址:https://blog.csdn.net/dayuiicghaid/article/details/125623542