redis中list

redis中的list是链表结构,这种结构的特点就是新增删除快,查询慢,新增或者删除只用断开键添加或删除后再连上即可,但是查询则需要从头开始查所以慢。redis中的list在开头或结尾添加比较快,但是在中间添加速度也是会很慢,因为需要找到中间这个元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

 

redis中list的一些相关命令:

  • lpush key value[value...] 从头部开始添加,例如 lpush test a b c d 此时test里面的数据为“d c b a”,先放的在后面。此命令的返回值是当前key的长度。
  • lpushx key value[value...] 跟lpush一样,只不过lpushx只会对已经存在的key生效,对不存在的key执行则会返回0,对存在的key执行返回其长度。
  • lrange key start end 列出start到end之间的所有元素,包含start和end。如果要查询所有的数据则是 lrange test 0 -1。
  • llen key 返回key的长度,如果key不存在返回0。
  • lrem key count value 删除key中制定数量(count)的元素(value),如果count等于0则删除所有的value。
  • lset key index value 将指定位置(index)的元素的值设置为value
  • lindex key index 返回指定位置(index)的值,如果要查询最后一个元素的值只需要将index设置为-1,lindex test -1。
  • ltrim key start end 保留[start,end]区间内的数据,其他的都删除,end为-1的时候表示为最后一个角标。
  • linsert key before|after target value 在target之前或之后添加元素value,如果key不存在返回0,如果target不存在返回-1。
  • lpop key 从头部弹出一个元素,返回值是头部的第一个元素,该命令执行后头部的第一个元素消失。
  • rpush key value[value...] 同lpush,例如rpush test a b c d 此时test里面的数据为“a b c d”,先放的在后面。此命令的返回值是当前key的长度。
  • rpushx key value[value...] 同lpushx。
  • rpop key 从尾部弹出第一个元素,返回值是尾部第一个元素,该命令执行后尾部第一个元素消失。
  • rpoplpush source destination 从source的尾部弹出第一个元素并将该元素添加到destination的头部。

rpoplpush可以在redis的消息队列中使用,因为rpop在使用后尾部的第一个元素就会消失,如果这时候代码出现异常那么这个元素就彻底消失了会影响到数据,使用rpoplpush可以将尾部的第一个元素放到另一个key里面,如果消息消费成功可以再去将另一个key里面的元素清除,同时可以设置一个守护程序将另一个key里面即将超时消失的元素再放回到原来的key里面继续进行消费

posted on 2021-08-19 15:02  多看多记多写  阅读(1119)  评论(0)    收藏  举报