有没有办法通过索引向Redis列表中插入值?
LINSERT
可以通过值进行插入,但这似乎有点不可靠,因为相同的值可能在列表中多次出现。
有一个解决方法可能会比较慢,因为所有操作都是O(n)的。
如果您需要不重复的元素,则Redis的set是更合适的数据结构,或者使用排序集合(sorted set)来对元素进行排序。列表(lists)更适用于推送和弹出操作。
开发yinqiwen的答案只是为了澄清:
假设想要在名为test的列表中第二个条目之前插入一个值。
从空键开始,填充数据:
127.0.0.1:6379> del test
(integer) 1
127.0.0.1:6379> rpush test "uno"
(integer) 1
127.0.0.1:6379> rpush test "dos"
(integer) 2
127.0.0.1:6379> rpush test "tres"
(integer) 3
127.0.0.1:6379> lrange test 0 -1
1) "uno"
2) "dos"
3) "tres"
选取要插入位置之后的数据并保留,然后用任何标签值替换它。
127.0.0.1:6379> lindex test 1
"dos"
127.0.0.1:6379> lset test 1 "my_tag"
OK
127.0.0.1:6379> lrange test 0 -1
1) "uno"
2) "my_tag"
3) "tres"
在标签后插入旧值。
127.0.0.1:6379> linsert test after my_tag dos
(integer) 4
127.0.0.1:6379> lrange test 0 -1
1) "uno"
2) "my_tag"
3) "dos"
4) "tres"
在标签后插入一个值,比如说“插入”值
127.0.0.1:6379> linsert test after my_tag insertion
(integer) 5
127.0.0.1:6379> lrange test 0 -1
1) "uno"
2) "my_tag"
3) "insertion"
4) "dos"
5) "tres"
现在,删除标签,插入的数据将会在第二个值之前:
127.0.0.1:6379> lrem test 0 my_tag
(integer) 1
127.0.0.1:6379> lrange test 0 -1
1) "uno"
2) "insertion"
3) "dos"
4) "tres"
LINDEX
获取指定索引处的值,并将其用作插入的支点,仅在目标索引处的值恰好唯一时才能正常工作。因此,首先插入标签是有意义的。 - Harry