redis数组操作

文章目录

    • 插入
    • 访问
    • 删除
    • 更新
    • 其他

Redis的数组是使用链表(Linked List)实现的。

插入和删除时间复杂度都是O(1),但查找时间复杂度为O(n)

插入

lpush/rpush

127.0.0.1:6379> lpush fruit apple
(integer) 1
127.0.0.1:6379> lpush fruit banana peach
(integer) 3

lpushx/rpushx : 当key存在时才插入,如果不存在则不插入

127.0.0.1:6379> lpushx xxxx value
(integer) 0
127.0.0.1:6379> lrange xxxx 0 -1
(empty array)

访问

lrange:

lrange key start_index end_index
127.0.0.1:6379> lrange fruit 0 -1
1) "peach"
2) "banana"
3) "apple"

如果访问第二个到第三个,则:

127.0.0.1:6379> lrange fruit 1 2
1) "banana"
2) "apple"

lindex:访问index=i的值

127.0.0.1:6379> lrange nums 0 -1
1) "100"
2) "1"
3) "2"
4) "3"

127.0.0.1:6379> lindex nums 3 # 访问第四个元素的值
"3"

llen:获取数组的长度

127.0.0.1:6379> lrange nums 0 -1
1) "100"
2) "1"
3) "2"
4) "3"

127.0.0.1:6379> llen nums # nums数组长度为4
(integer) 4

删除

rpop/lpop:

127.0.0.1:6379> lpop fruit
"peach"
127.0.0.1:6379> lrange fruit 0 -1
1) "banana"
2) "apple"

ltrim,保留(left,right)范围,其他的值删除:

127.0.0.1:6379> rpush nums 0 1 2 3 4 5 6
(integer) 7

127.0.0.1:6379> lrange nums 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
127.0.0.1:6379> ltrim nums 1 3 # 只保留index(1 - 3)
OK
127.0.0.1:6379> lrange nums 0 -1
1) "1"
2) "2"
3) "3"

更新

lset:更新第i个元素的值

127.0.0.1:6379> lrange nums 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
127.0.0.1:6379> lset nums 0 100 # 将index=0的元素的值更新为100
OK
127.0.0.1:6379> lrange nums 0 -1 # 被更新后,第1个元素变为100
1) "100"
2) "1"
3) "2"
4) "3"

其他

还有几个和数组相关的命令,使用比较少。

  • linsert, 找到某个值,在它之前或之后插入新元素。
  • lrem分三种情况删除数组中的元素。

你可能感兴趣的:(redis)