夫陶公
清风
千古,余又何人,敢称庶几
SADD key member [member …] //
添加
元素
特性
:
一个
或多个
元素,键不存在自动
创建。不能有相同
元素,加入相同元素会被忽略
掉。成功加入
集合的元素数量(忽略掉的元素不算
)SREM key member [member …] //
删除
元素
特性
:
一个
或多个
元素删除成功
的元素个数不存在
的元素会被忽略
掉案例:
SADD
127.0.0.1:6379> sadd letters a //向集合中添加一个元素
(integer) 1
127.0.0.1:6379> sadd letters a b c //元素a已经存在,返回值为 2
(integer) 2
127.0.0.1:6379> sadd letters a b c //3个元素都存在,返回值为 0
(integer) 0
SREM
127.0.0.1:6379> srem letters a //删除元素a 返回值 1
(integer) 1
127.0.0.1:6379> srem letters b d //d元素不存在,返回值为 1
(integer) 1
127.0.0.1:6379> srem letters g //g元素不存在,返回值为 0
(integer) 0
实践:使用Java操作Redis数据库:SADD
、SREM
@Test
public void test() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
Long a = jedis.sadd("letters", new String[]{
"a"});
Long a_b_c = jedis.sadd("letters", new String[]{
"a", "b", "c"});
System.out.print("添加元素:a" + " ");
System.out.println("返回值:" + a);
System.out.print("添加元素:a、b、c" + " ");
System.out.println("返回值:" + a_b_c);
Long rm_a = jedis.srem("letters", new String[]{
"a"});
Long rm_a_b_c = jedis.srem("letters", new String[]{
"a", "b", "c"});
Long rm_d = jedis.srem("letters", "d");
System.out.print("删除元素:a" + " ");
System.out.println("返回值:" + rm_a);
System.out.print("删除元素:a、b、c" + " ");
System.out.println("返回值:" + rm_a_b_c);
System.out.print("删除元素:d" + " ");
System.out.println("返回值:" + rm_d);
}
添加元素:a 返回值:1
添加元素:a、b、c 返回值:2
删除元素:a 返回值:1
删除元素:a、b、c 返回值:2
删除元素:d 返回值:0
SMEMBERS key
特性
:
所有
元素key
不存在时会返回空
127.0.0.1:6379> sadd letters a b c //添加3个元素
(integer) 3
127.0.0.1:6379> smembers letters //获取所有的元素
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> smembers other //获取一个不存在的集合 返回空
(empty list or set)
SISMEMBER key member
特性
:
时间复杂度
都为:O(1)
member
存在时返回1
,不存在时返回0
key
不存在时返回0
一次
只能判断一个
元素,否则会报错:(error) ERR wrong number of arguments for 'sismember' command
127.0.0.1:6379> smembers letters //获取所有元素
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> sismember letters a //判断元素 a
(integer) 1
127.0.0.1:6379> sismember letters a b //错误语法判断元素 报错
(error) ERR wrong number of arguments for 'sismember' command
127.0.0.1:6379> sismember letters d //判断不存在元素
(integer) 0
SDIFF key [key …] //
差集
运算
特性
:
多个集合
执行差集
运算。A
与集合B
的差集表示为A-B
,代表所有属于A
且不属于B
的元素构成的集合 (如下图所示),且A-B={x|x∈A且x∈B}
。同时传入多个键(key)
,当有3个以上时,计算顺序是先计算前面两个
,再把计算结果与后面
一个计算,依此类推
。案例:
首先我们定义3
个集合:setA:1 2 3
;setB:2 3 4
;setC:2 3
,当A与B执行差集运算A-B
时因为在B中存在
2 3 ,不存在1
,所以结果为1
,然后我们再将A-B计算结果1
与C集合
进行差集运算(A-B)-C
,也就是1
与2 3
运算,所以计算结果为1
。
127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sdiff setA setB
1) "1"
127.0.0.1:6379> sadd setC 2 3
(integer) 2
127.0.0.1:6379> sdiff setA setB setC
1) "1"
SINTER key [ key …] //
交集
运算
特性
:
多个集合
进行交集
运算A∩B
,代表所有属于A
且属于B
的元素构成的集合,即A∩B={x|x∈A且x∈B}
。用法同交集运算
。案例:
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> smembers setB
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
SUNION key [key …] //
并集
运算
特性
:
多个集合
执行并集
运算A∪B
,代表所有属于A
或属于B
的元素构成的集合,即A∪B={x|x∈A或x∈B}
。用法同交集运算
。案例
:
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> smembers setB
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> smembers setC
1) "2"
2) "3"
127.0.0.1:6379> sunion setA setB setC
1) "1"
2) "2"
3) "3"
4) "4"
SCARD key
此命令用来获取集合中的元素个数
,如果键存在
,那么正常返回集合元素个数,不存在
则返回0
.
7.0.0.1:6379> sadd nums 1 2 3 4 5 6 7 8 9 0
(integer) 10
127.0.0.1:6379> smembers nums
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
8) "7"
9) "8"
10) "9"
127.0.0.1:6379> scard nums
(integer) 10
127.0.0.1:6379> scard other //other键不存在,返回 0
(integer) 0
下面三个命令和去掉后缀STORE
的用法相同
,只是以下3个命令会将计算结果
存储到键destination
中。
SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTORE destination key [key …]
上面三个命令的用法和之前的SDIFF
SINTER
SUNION
用法相同,这里不再详细介绍。
127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sadd setC 4 5 6
(integer) 3
127.0.0.1:6379> sdiffstore AB setA setB //将集合setA与集合setB的计算结果存储到集合AB中
(integer) 1
127.0.0.1:6379> keys *
1) "nums"
2) "setB"
3) "setA"
4) "setC"
5) "AB"
127.0.0.1:6379> smembers AB
1) "1"
SRANDMEMBER key [count]
特性
:
随机
获取一个
元素(没有count参数情况下
)。有count参数
可以一次随机获得多个元素
整数
时,获取到的是count
个不重复
的元素整数
且大于集合中的元素个数
时,会返回集合中的全部元素
负数
时,会随机从集合里获得|count|
个元素,且这些元素可能相同
。案例:
127.0.0.1:6379> sadd num 1 2 3 4 5 6 7 8 9
(integer) 9
127.0.0.1:6379> smembers num
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember num //随机获取一个元素
"4"
127.0.0.1:6379> srandmember num //随机获取一个元素
"9"
127.0.0.1:6379> srandmember num 2 //随机获取2个元素 带参数
1) "5"
2) "7"
127.0.0.1:6379> srandmember num 3 //随机获取3个元素 带参数
1) "2"
2) "7"
3) "4"
127.0.0.1:6379> srandmember num 999 //count参数大于集合中的元素,获得全部元素
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember num -5 //count参数为负数,获取绝对值个元素,这些元素可能相同
1) "8"
2) "8"
3) "6"
4) "8"
5) "4"
127.0.0.1:6379> srandmember num -9
1) "8"
2) "2"
3) "4"
4) "8"
5) "9"
6) "3"
7) "3"
8) "9"
9) "4"
127.0.0.1:6379> srandmember num -11 // count负值大于集合中所有元素
1) "8"
2) "3"
3) "4"
4) "1"
5) "6"
6) "2"
7) "2"
8) "1"
9) "4"
10) "6"
11) "4"
SPOP key
此命令的作用是从集合左边弹出
(删除)一个
元素,然后返回元素的值,由于集合无序
,所以弹出的元素是随机
7.0.0.1:6379> sadd nums 1 2 3 4 5 6 7 8
(integer) 8
127.0.0.1:6379> smembers nums
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
127.0.0.1:6379> spop nums
"3"
127.0.0.1:6379> spop nums
"5"
127.0.0.1:6379> spop nums
"1"
注
:从上面的案例结果中可以看出弹出的元素是随机
的。
Redis中文官方网站:http://www.redis.cn
未完待续,持续更新中...