一、List命令:
在java中,list有两大类,数组ArrayList和链表LinkedList:
(1)、数组:优点:根据索引取值,速度极快,不会因为数据量变大,速度降低;
缺点:数组的元素增删,效率极低(数据量越大,效率越低)
(2)双向链表:优点:链表的元素增删效率极高(增删速度与数据量大小无关)
缺点:根据索引取值,效率极低(数据量越大,效率越低)
在Redis中,list选取的是链表,原因:因为在redis操作中,更多的操作是进行元素的增删。
1、取值:lrang key start end:获取链表中从start到end的元素的值,start、end从0开始计数;也可以为负数,若为负-1,则表示链表尾部的元素,-2则表示倒数第2个元素,以此类推。
例:list1[d,c,b,a]
①lrange list1 0 3 输出:d c b a
②lrange list1 0 -1 输出同上
③lrange list1 1 2 输出:c b
2、赋值:
(1)lpush key values[value1 value2 value3 ...] 在指定的key所关联的list头部插入所有的values,如果该key不存在,该命令在插入之前创建一个该key关联的空链表,之后再向该链表头部插入数据,插入成功返回元素的个数;
(2)rpush key values[value1 value2 ...] 在该list的尾部添加元素
例:向集合list1和list2中分别添加元素a b c d
①lpush list1 a b c d
而存入list1中的数据是list1[d c b a]
②rpush list2 a b c d
而存入的数据是list2[a b c d]
3、删除:
(1)lpop key:返回并弹出指定的key关联的链表中的第一个元素,即头部元素,如果该key不存在,返回nil,若key不存在,返回头元素;
(2)rpop key:从尾部删除
例:集合list1[a,b,c,d]
lpop list1 返回a 集合为[b,c,d]
rpop list1 返回d 集合为i[b,c]
4、扩展命令:
(1)llen key返回指定的key关联的链表中的元素的数量
(2)lrem key count value 删除count个值为value的元素,如果count大于0,从头向尾遍历并删除count个值为value的元素;如果count小于0,则从尾向头遍历并删除;如果count等于0,则删除链表中所有等于value的元素。
(3)lset key index value 通过索引替换元素(
效率低),设置链表中的index的脚标的元素值,0代表链表的头元素,-1代表链表的尾元素。操作链表的脚标不存在则抛出异常。
(4)linsert key before | after pirot value在pivot元素前或后插入value这个元素。
(5)rpoplpush resource destination 将链表中的尾部元素弹出,并添加到头部【循环操作】
二、Set命令:
在redis中,我们可以将set类型看做
无序的字符集合,可包含
最大元素数量为4294967295个,和list不同的是,set中
不允许出现重复的元素。
1、赋值:sadd key values[value value ...]向set集合中添加数据,如果该key的值已经有了,则不会重复添加。
2、删除:srem key member[member member...] 删除set集合中指定的成员,若无该元素,返回0,不会实际操作。
3、取值:①smembers key 获取set中所有元素
②sismember key member 判断参数中指定的=成员是否在该set中,1表示存在,0表示不存在 或该key本身就不存在。
4、差集运算:sdiff key1 key2 ...返回key1与key2中相差的成员
5、交集运算:sinter key1 key2 key3...
6、并集运算:sunion key1 key2...
7、扩展命令:
①scard key 获取set中成员的数量
②srandmember key随机返回set集合中的一个成员
③sdiffstore destination key1 key2 将key1 key2相差的成员存储在destination上
④sinterstore destination key [key ...] 交集存在destnation上
⑤sunionstore destination key[key ...]并集存在destnation上