作者 | 陌无崖
转载请联系授权
基本数据类型集合SADDSISMEMBERSPOPSRANDMEMBERSREMSMOVESCRADSMEMBERS keySINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTOREHyperLogLogPFADDPFCOUNTPFMERGE地理位置GEOADDGEOPOSGEODISTGEORADIUSGEORADIUSBYMEMBWER
将一个或多个 member
元素加入到集合 key
当中,已经存在于集合的 member
元素将被忽略。返回值为被添加到集合中的新元素的数量,不包括被忽略的元素。被添加到集合中的新元素的数量,不包括被忽略的元素。
SADD key member [member …]
判断 member
元素是否集合 key
的成员。如果 member
元素是集合的成员,返回 1
。如果 member
元素不是集合的成员,或 key
不存在,返回 0
。
SISMEMBER key member
代码示例
redis> SMEMBERS joe's_movies
1) "hi, lady"
2) "Fast Five"
3) "2012"
redis> SISMEMBER joe's_movies "bet man"
(integer) 0
redis> SISMEMBER joe's_movies "Fast Five"
(integer) 1
移除并返回集合中的一个随机元素。如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER key [count] 命令。
SPOP key
只提供 key
参数时,返回一个元素;如果集合为空,返回 nil
。如果提供了 count
参数,那么返回一个数组;如果集合为空,返回空数组。
count
为正数,且小于集合基数,那么命令返回一个包含 count
个元素的数组,数组中的元素各不相同count
大于等于集合基数,那么返回整个集合。
count
为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count
的绝对值。SRANDMEMBER key [count]
代码示例
# 添加元素
redis> SADD fruit apple banana cherry
(integer) 3
# 只给定 key 参数,返回一个随机元素
redis> SRANDMEMBER fruit
"cherry"
redis> SRANDMEMBER fruit
"apple"
# 给定 3 为 count 参数,返回 3 个随机元素
# 每个随机元素都不相同
redis> SRANDMEMBER fruit 3
1) "apple"
2) "banana"
3) "cherry"
# 给定 -3 为 count 参数,返回 3 个随机元素
# 元素可能会重复出现多次
redis> SRANDMEMBER fruit -3
1) "banana"
2) "cherry"
3) "apple"
redis> SRANDMEMBER fruit -3
1) "apple"
2) "apple"
3) "cherry"
# 如果 count 是整数,且大于等于集合基数,那么返回整个集合
redis> SRANDMEMBER fruit 10
1) "apple"
2) "banana"
3) "cherry"
# 如果 count 是负数,且 count 的绝对值大于集合的基数
# 那么返回的数组的长度为 count 的绝对值
redis> SRANDMEMBER fruit -10
1) "banana"
2) "apple"
3) "banana"
4) "cherry"
5) "apple"
6) "apple"
7) "cherry"
8) "apple"
9) "apple"
10) "banana"
# SRANDMEMBER 并不会修改集合内容
redis> SMEMBERS fruit
1) "apple"
2) "cherry"
3) "banana"
# 集合为空时返回 nil 或者空数组
redis> SRANDMEMBER not-exists
(nil)
redis> SRANDMEMBER not-eixsts 10
(empty list or set)
移除集合 key
中的一个或多个 member
元素,不存在的 member
元素会被忽略。返回值为被成功移除的元素的数量,不包括被忽略的元素。
SREM key member [member …]
将 member
元素从 source
集合移动到 destination
集合。
SMOVE source destination member
返回集合 key
的基数(集合中元素的数量)。当 key
不存在时,返回 0
。
SCARD key
返回集合 key
中的所有成员。
不存在的 key
被视为空集合。
SMEMBERS key
返回一个集合的全部成员,该集合是所有给定集合的交集。
不存在的 key
被视为空集。
当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
SINTER key [key …]
代码示例
redis> SMEMBERS group_1
1) "LI LEI"
2) "TOM"
3) "JACK"
redis> SMEMBERS group_2
1) "HAN MEIMEI"
2) "JACK"
redis> SINTER group_1 group_2
1) "JACK"
这个命令类似于 SINTER key [key …] 命令,但它将结果保存到 destination
集合,而不是简单地返回结果集。
SINTERSTORE destination key [key …]
代码示例
redis> SMEMBERS songs
1) "good bye joe"
2) "hello,peter"
redis> SMEMBERS my_songs
1) "good bye joe"
2) "falling"
redis> SINTERSTORE song_interset songs my_songs
(integer) 1
redis> SMEMBERS song_interset
1) "good bye joe"
返回一个集合的全部成员,该集合是所有给定集合的并集。
SUNION key [key …]
这个命令类似于 SUNION key [key …] 命令,但它将结果保存到 destination
集合,而不是简单地返回结果集。
如果 destination
已经存在,则将其覆盖。
destination
可以是 key
本身。
SUNIONSTORE destination key [key …]
返回一个集合的全部成员,该集合是所有给定集合之间的差集。
SDIFF key [key …]
这个命令的作用和 SDIFF key [key …] 类似,但它将结果保存到 destination
集合,而不是简单地返回结果集。
如果 destination
集合已经存在,则将其覆盖。
destination
可以是 key
本身。
SDIFFSTORE destination key [key …]
HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。基数估计就是在误差可接受的范围内,快速计算基数.
Redis Pfadd 命令将所有元素参数添加到 HyperLogLog 数据结构中。
PFADD key element [element …]
代码示例
redis> PFADD databases "Redis" "MongoDB" "MySQL"
(integer) 1
redis> PFCOUNT databases
(integer) 3
redis> PFADD databases "Redis" # Redis 已经存在,不必对估计数量进行更新
(integer) 0
redis> PFCOUNT databases # 元素估计数量没有变化
(integer) 3
redis> PFADD databases "PostgreSQL" # 添加一个不存在的元素
(integer) 1
redis> PFCOUNT databases # 估计数量增一
4
当 PFCOUNT key [key …] 命令作用于单个键时, 返回储存在给定键的 HyperLogLog 的近似基数, 如果键不存在, 那么返回 0
。
PFCOUNT key [key …]
将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。
合并得出的 HyperLogLog 会被储存在 destkey
键里面, 如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的 HyperLogLog 。
PFMERGE destkey sourcekey [sourcekey …]
将给定的空间元素(纬度、经度、名字)添加到指定的键里面。这些数据会以有序集合的形式被储存在键里面, 从而使得像 GEORADIUS
和 GEORADIUSBYMEMBER
这样的命令可以在之后通过位置查询取得这些元素。
GEOADD key longitude latitude member [longitude latitude member …]
从键里面返回所有给定位置元素的位置(经度和纬度)。GEOPOS
命令返回一个数组, 数组中的每个项都由两个元素组成:第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。当给定的位置元素不存在时, 对应的数组项为空值。
GEOPOS key member [member …]
代码示例
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEOPOS Sicily Palermo Catania NonExisting
1) 1) "13.361389338970184"
2) "38.115556395496299"
2) 1) "15.087267458438873"
2) "37.50266842333162"
3) (nil)
返回两个给定位置之间的距离。
指定单位的参数 unit
必须是以下单位的其中一个:
m
表示单位为米。
km
表示单位为千米。
mi
表示单位为英里。
ft
表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST
默认使用米作为单位。计算出的距离会以双精度浮点数的形式被返回。如果给定的位置元素不存在, 那么命令返回空值。
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEODIST Sicily Palermo Catania
"166274.15156960039"
redis> GEODIST Sicily Palermo Catania km
"166.27415156960038"
redis> GEODIST Sicily Palermo Catania mi
"103.31822459492736"
redis> GEODIST Sicily Foo Bar
(nil)
以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]
这个命令和 GEORADIUS
命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER
的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS
那样, 使用输入的经度和纬度来决定中心点。一个数组, 数组中的每个项表示一个范围之内的位置元素。
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]