redis基本数据类型(集合、HyperLogLog、地理位置)
作者 | 陌无崖
转载请联系授权
redis基本数据类型
目录
基本数据类型集合SADDSISMEMBERSPOPSRANDMEMBERSREMSMOVESCRADSMEMBERS keySINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTOREHyperLogLogPFADDPFCOUNTPFMERGE地理位置GEOADDGEOPOSGEODISTGEORADIUSGEORADIUSBYMEMBWER
集合
SADD
将一个或多个 member
元素加入到集合 key
当中,已经存在于集合的 member
元素将被忽略。返回值为被添加到集合中的新元素的数量,不包括被忽略的元素。被添加到集合中的新元素的数量,不包括被忽略的元素。
SADD key member [member …]
SISMEMBER
判断 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
SPOP
移除并返回集合中的一个随机元素。如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER key [count] 命令。
SPOP key
SRANDMEMBER
只提供 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)
SREM
移除集合 key
中的一个或多个 member
元素,不存在的 member
元素会被忽略。返回值为被成功移除的元素的数量,不包括被忽略的元素。
SREM key member [member …]
SMOVE
将 member
元素从 source
集合移动到 destination
集合。
SMOVE source destination member
SCRAD
返回集合 key
的基数(集合中元素的数量)。当 key
不存在时,返回 0
。
SCARD key
SMEMBERS key
返回集合 key
中的所有成员。
不存在的 key
被视为空集合。
SMEMBERS key
SINTER
返回一个集合的全部成员,该集合是所有给定集合的交集。
不存在的 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"
SINTERSTORE
这个命令类似于 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
返回一个集合的全部成员,该集合是所有给定集合的并集。
SUNION key [key …]
SUNIONSTORE
这个命令类似于 SUNION key [key …] 命令,但它将结果保存到 destination
集合,而不是简单地返回结果集。
如果 destination
已经存在,则将其覆盖。
destination
可以是 key
本身。
SUNIONSTORE destination key [key …]
SDIFF
返回一个集合的全部成员,该集合是所有给定集合之间的差集。
SDIFF key [key …]
SDIFFSTORE
这个命令的作用和 SDIFF key [key …] 类似,但它将结果保存到 destination
集合,而不是简单地返回结果集。
如果 destination
集合已经存在,则将其覆盖。
destination
可以是 key
本身。
SDIFFSTORE destination key [key …]
HyperLogLog
HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。基数估计就是在误差可接受的范围内,快速计算基数.
PFADD
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
当 PFCOUNT key [key …] 命令作用于单个键时, 返回储存在给定键的 HyperLogLog 的近似基数, 如果键不存在, 那么返回 0
。
PFCOUNT key [key …]
PFMERGE
将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。
合并得出的 HyperLogLog 会被储存在 destkey
键里面, 如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的 HyperLogLog 。
PFMERGE destkey sourcekey [sourcekey …]
地理位置
GEOADD
将给定的空间元素(纬度、经度、名字)添加到指定的键里面。这些数据会以有序集合的形式被储存在键里面, 从而使得像 GEORADIUS
和 GEORADIUSBYMEMBER
这样的命令可以在之后通过位置查询取得这些元素。
GEOADD key longitude latitude member [longitude latitude member …]
GEOPOS
从键里面返回所有给定位置元素的位置(经度和纬度)。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)
GEODIST
返回两个给定位置之间的距离。
指定单位的参数 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
以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]
GEORADIUSBYMEMBWER
这个命令和 GEORADIUS
命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER
的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS
那样, 使用输入的经度和纬度来决定中心点。一个数组, 数组中的每个项表示一个范围之内的位置元素。
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ctfhub-信息泄泄露_备份文件下载
- Angular In-memory Web API使用介绍
- 攻防世界-php_rce
- 无法添加某个relationship给SAP CRM Product category的一个可能原因
- 记一次DataGuard SWITCHOVER_STATUS 状态为RESOLVABLE GAP的处理
- ABAP数据库表的元数据
- ctfshow-萌新赛
- VC++ libcurl FTP上传客户端程序
- Oracle RAC变更实验之修改11gR2+公网IP地址(网段不变)
- C# 纯控制台创建一个全屏窗口
- MySQL MHA部署添加Linux/Unix基本信息至Django中
- 记一次innobackupex导致的从库无法同步的问题
- mysqlbinlog命令详解记一次有函数的标量子查询导致的查询缓慢
- ctfshow红包题-web
- 微信支付一面(C++后台)