Redis笔记4:数据类型之列表(List)


命令
描述
语法
LPUSH 在list头部添加多个值LPUSH key value [value ...]
LPUSHXKey存在则添加值,否则不做操作LPUSHX key value
RPUSH在list尾部添加多个值RPUSH key value [value ...]
RPUSHX在list尾部添加单个值RPUSHX key value
LPOP从头部移除列表中的keyLPOP key
RPOP从尾部移除列表中的keyRPOP key
LINDEX返回下标中的值LINDEX key index
LLEN返回key的长度LLEN key
LREM删除前面几个值等于某值的元素LREM key count value
LTRIM 截取list中的值LTRIM key start stop
LSET 给下标赋值LSET key index value
RPOPLPUSH从一个集合尾部移除值并插入到另一个集合的头部RPOPLPUSH source destination
LINSERT在某个值的前面或者后面插入值LINSERT key BEFORE|AFTER pivot value
LRANGE返回列表中指定区间内的元素LRANGE key start stop
















1、LPUSH key value [value …]

将一个或多个值 value 插入到列表 key 的表头如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头。如果 key 不存在,一个空列表会被创建并执行LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。 
返回值: 执行LPUSH 命令后,列表的长度。

示例:
127.0.0.1:6379> LPUSH languages chinese english japanese
(integer) 3
127.0.0.1:6379> LRANGE languages 0 -1
1) "japanese"
2) "english"
3) "chinese"


2、LPUSHX key value 
将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表才能插入。 
返回值: LPUSHX 命令执行之后,表的长度。

示例:
127.0.0.1:6379> LPUSHX mylist "hello"
(integer) 0
127.0.0.1:6379> LPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> LPUSHX mylist "redis"
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1
1) "redis"
2) "hello"


3、RPUSH key value [value …] 
将一个或多个值 value 插入到列表 key 的表尾 (最右边)。 
返回值: 执行RPUSH 操作后,表的长度。

示例:
127.0.0.1:6379> RPUSH mylist a b c
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "a"
2) "b"
3) "c"


4、RPUSHX key value 
将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表才能插入。
返回值: RPUSHX 命令执行之后,表的长度。

示例:
127.0.0.1:6379[15]> LLEN greet
(integer) 0
127.0.0.1:6379[15]> LPUSHX greet "hello" 
(integer) 0
127.0.0.1:6379[15]> LPUSH greet "hello" 
(integer) 1
127.0.0.1:6379[15]> LPUSHX greet "good morning"
(integer) 2
127.0.0.1:6379[15]> LRANGE greet 0 -1
1) "good morning"
2) "hello"




5、LPOP key 
移除并返回列表 key 的头元素。 
返回值: 列表的头元素。当 key 不存在时,返回 nil 。

示例:
127.0.0.1:6379> LPUSH company google baidu sina 360
(integer) 4
127.0.0.1:6379> LRANGE company 0 -1
1) "360"
2) "sina"
3) "baidu"
4) "google"
127.0.0.1:6379> LPOP company
"360"
127.0.0.1:6379> LPOP company
"sina"
127.0.0.1:6379> LPOP company
"baidu"
127.0.0.1:6379> LPOP company
"google"
127.0.0.1:6379> LPOP company
(nil)


6、RPOP key 
移除并返回列表 key 的尾元素。
返回值: 列表的尾元素。当 key 不存在时,返回 nil 。

示例:
127.0.0.1:6379[15]> RPUSH mylist "one"
(integer) 1
127.0.0.1:6379[15]> RPUSH mylist "two"
(integer) 2
127.0.0.1:6379[15]> RPUSH mylist "three"
(integer) 3
127.0.0.1:6379[15]> RPOP mylist
"three"
127.0.0.1:6379[15]> LRANGE mylist 0 -1
1) "one"
2) "two"


7、LINDEX key index 
返回列表 key 中,下标为 index 的元素。 下标 (index) 参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素,-2 表示列表的倒数第二个元素,以此类推。如果 key 不是列表类型,返回一个错误
返回值: 列表中下标为 index 的元素。如果 index 参数的值不在列表的区间范围内 (out of range),返回 nil 。

示例:
127.0.0.1:6379> LPUSH mylist "hello" "redis"
(integer) 2
127.0.0.1:6379> LINDEX mylist 0
"redis"
127.0.0.1:6379> LINDEX mylist 1
"hello"
127.0.0.1:6379> LINDEX mylist 2
(nil)
127.0.0.1:6379> LINDEX mylist -1
"hello"
127.0.0.1:6379> LINDEX mylist 0
"redis"


8、LLEN key 
返回列表 key 的长度。如果 key 不存在,则 key 被解释为一个空列表,返回 0 。如果 key 不是列表类型,返回一个错误。 
返回值: 列表 key 的长度。

示例:
127.0.0.1:6379[15]> LLEN job
(integer) 0
127.0.0.1:6379[15]> LPUSH job "cook food"
(integer) 1
127.0.0.1:6379[15]> LPUSH job "have lunch"
(integer) 2
127.0.0.1:6379[15]> LLEN job
(integer) 2


9、LREM key count value 
移除列表中与参数 value 相等的 count 个元素。 
count 的值可以是以下几种: 
  count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。 
  count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。 
  count = 0 : 移除表中所有与 value 相等的值。 
返回值:被移除元素的数量。因为不存在的 key 被视作空表 (empty list),所以当 key 不存在时,LREM 命令总是返回 0 。

示例:
127.0.0.1:6379[15]> LPUSH greet "morning"
(integer) 1
127.0.0.1:6379[15]> LPUSH greet "hello"
(integer) 2
127.0.0.1:6379[15]> LPUSH greet "morning"
(integer) 3
127.0.0.1:6379[15]> LPUSH greet "hello"
(integer) 4
127.0.0.1:6379[15]> LPUSH greet "morning"
(integer) 5
127.0.0.1:6379[15]> LRANGE greet 0 -1 
1) "morning"
2) "hello"
3) "morning"
4) "hello"
5) "morning"
127.0.0.1:6379[15]> LREM greet 2 morning
(integer) 2
127.0.0.1:6379[15]> LLEN greet
(integer) 3
127.0.0.1:6379[15]> LRANGE greet 0 -1
1) "hello"
2) "hello"
3) "morning"
127.0.0.1:6379[15]> LREM greet -1 morning 
(integer) 1
127.0.0.1:6379[15]> LLEN greet
(integer) 2
127.0.0.1:6379[15]> LRANGE greet 0 -1
1) "hello"
2) "hello"
127.0.0.1:6379[15]> LREM greet 0 hello
(integer) 2
127.0.0.1:6379[15]> LLEN greet
(integer) 0



10、LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
返回值:命令执行成功时,返回 ok 。

示例:
127.0.0.1:6379> RPUSH mylist "hello" "hello" "my" "redis"
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "hello"
3) "my"
4) "redis"
127.0.0.1:6379> LTRIM mylist 1 -1
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "my"
3) "redis"


11、RPOPLPUSH source destination
移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
返回值: 被弹出的元素。

示例:
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "bar"
(integer) 3
redis 127.0.0.1:6379> RPOPLPUSH mylist myotherlist
"bar"
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"


12、LSET key index value
将列表 key 下标为 index 的元素的值设置为 value 。 当 index 参数超出范围,或对一个空列表 ( key 不存在) 进行LSET 时,返回一个错误。 
返回值: 操作成功返回 ok ,否则返回错误信息。

示例:
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
redis 127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
redis 127.0.0.1:6379> RPUSH mylist "hello"
(integer) 4
redis 127.0.0.1:6379> LSET mylist 0 "bar"
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
1: "bar"
2) "hello"
3) "foo"
4) "hello"


13、LINSERT key BEFORE|AFTER pivot value 
在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。
返回值: 如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到 pivot ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。

示例:
127.0.0.1:6379[15]> RPUSH mylist "Hello"
(integer) 1
127.0.0.1:6379[15]> RPUSH mylist "World"
(integer) 2
127.0.0.1:6379[15]> LINSERT mylist BEFORE "World" "There"
(integer) 3
127.0.0.1:6379[15]> LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World"
127.0.0.1:6379[15]> LINSERT mylist BEFORE "go" "let's"
(integer) -1
127.0.0.1:6379[15]> EXISTS fake_list
(integer) 0
127.0.0.1:6379[15]> LINSERT fake_list BEFORE "nono" "gogogog"
(integer) 0



14、LRANGE key start stop 
返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
返回值:一个列表,包含指定区间内的元素。

示例:
127.0.0.1:6379> RPUSH user "zhangsan" "lisi" "wangwu" "zhaoliu" "tianqi"
(integer) 5
127.0.0.1:6379> LRANGE user 0 -1#返回所有
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "zhaoliu"
5) "tianqi"
127.0.0.1:6379> LRANGE user -1 0#返回空
(empty list or set)
127.0.0.1:6379> LRANGE user 1 2#返回多个
1) "lisi"
2) "wangwu"
127.0.0.1:6379> LRANGE user 1 1#返回一个
1) "lisi"


总结:
1.它是一个字符串链表,left、right都可以插入添加;
2.如果键不存在,则创建新的链表;
3.如果键已存在,则新增内容;
4.如果值全移除,对应的键也就消失了;
5.链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。



(完毕!)

参考:http://blog.csdn.net/thinkercode/article/details/46565051



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis异常JedisConnectionException:Read timed out通常是由于Redis连接超时引起的,解决方法如下: 1. 增加超时时间 在Jedis连接Redis时,可以通过设置timeout参数来增加连接超时时间。例如: ```java Jedis jedis = new Jedis("localhost", 6379, 5000); ``` 上述代码中,timeout参数为5000,表示连接超时时间为5秒。可以根据实际情况适当增加超时时间。 2. 检查Redis服务是否正常运行 如果Redis服务停止或异常,会导致连接超时。可以通过以下命令检查Redis服务是否正常运行: ```sh redis-cli ping ``` 如果返回PONG,则表示Redis服务正常运行;否则可能需要重启Redis服务。 3. 检查网络连接 如果网络连接不稳定或存在问题,会导致连接超时。可以通过以下命令检查网络连接是否正常: ```sh ping IP地址 ``` 如果网络连接正常,则可以排除网络问题。如果网络连接存在问题,则需要解决网络问题。 4. 增加Redis最大连接数 如果Redis并发连接数较多,可能会导致连接超时。可以通过以下命令增加Redis最大连接数: ```sh config set maxclients 10000 ``` 上述命令将Redis最大连接数设置为10000,可以根据实际情况适当增加最大连接数。 总之,JedisConnectionException:Read timed out异常通常是由于连接超时引起的,可以通过增加超时时间、检查Redis服务是否正常运行、检查网络连接、增加Redis最大连接数等方法来解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值