04
数据结构 - 集合
Redis的集合(set)键允许用户将任务多个各不相同的元素存储到集合中,这些元素可以是文本数据,也可以是二进制数据。
命令
SADD 命令
SADD set member [member ...]
说明:将一个或多个元素添加到集合中
SREM 命令
SREM set element [element ...]
说明:从集合中移除一个或多个已存在的元素
SMOVE 命令
SMOVE source target member
说明:将元素从一个集合移动到另一个集合
SMEMBERS 命令
SMEMBERS key
说明:获取集合包含的所有元素
SCARD 命令
SCARD key
说明:获取集合包含的元素数量
SISMEMBER 命令
SISMEMBER key member
说明:检查给定元素是否存在于集合中
SRADNMEMBER 命令
SRANDMEMBER key [count]
说明:随机获取集合中的元素
count:指定获取元素的数量,默认是1
count > 0,返回count个不重复的元素
count < 0,返回abs(count)个元素,其中允许出现重复的元素
SPOP 命令
SPOP key [count]
说明:随机从集合中移除指定数量的元素
SINTER, SINTERSTORE, SUNION, SUNIONSTORE, SDIFF, SDIFFSTORE 命令
SINTER key [key ...]
SINTERSTORE target key [key ...]
SUNION key [key ...]
SUNIONSTORE target key [key ...]
SDIFF key [key ...]
SDIFFSTORE target key [key ...]
说明:
SINTER,SINTERSTORE:求集合交集并存储
SUNION,SUNIONSTORE:求集合并集并存储
SDIFF,SDIFFSTORE:求集合差集并存储
05
数据结构 - 有序集合
Redis的有序集合(sorted set)同时具有“有序”和“集合”两种性质,这种数据结构中的每个元素都是有一个成员和一个与成员关联的分值组成。其中成员以字符串方式存储,而分值则以64位双精度浮点数格式存储。
命令
ZADD 命令
ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
说明:
XX:只对给定成员当中已存在于有序集合的成员进行更新,不存在的成员则会被忽略。
NX:只对给定成员当中不存在于有序集合的成员添加到有序集合中,已存在的成员则会被忽略
GT:仅当新得分大于当前得分时,才更新现有元素。这个标志不会阻止添加新元素。
LT:仅当新得分小于当前得分时更新现有元素。这个标志不会阻止添加新元素。
CH:返回被修改成员的数量
INCR:当指定此选项时,ZADD的行为类似于ZINCRBY。在这种模式下,只能指定一个分数元素对。
ZREM 命令
ZREM key member [member ...]
说明:移除指定成员
ZSCORE 命令
ZSCORE key member
说明:获取成员的分值
ZINCRBY 命令
ZINCRBY key increment member
说明:对成员的分值执行自增或子减操作
给定成员不存在于有序集合中,或者给定的有序集合不存在,该命令将直接把给定的成员添加到有序集合中。并把给定的增量设置为该成员的分值。相当于ZADD操作
ZCARD 命令
ZCARD key
说明:获取有序集合的大小
ZRANK,ZREVRANK 命令
ZRANK key member
ZREVRANK key member
说明:
ZRANK:返回的是成员的升序排列排名,按分值从小到大进行排序
ZREVRANK:返回的是成员的降序排列排名,按分值从大到小进行排序
ZRANGE, ZREVRANGE 命令
ZRANGE key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
说明:
ZRANGE:用户按升序排列,从有序集合中获取指定索引范围内的成员
ZREVRANGE:用户按降序排列,从语序集合中获取指定索引范围内的成员
WITHSCORES:获取成员的分值
ZRANGEBYSCORE,ZREVRANGEBYSCORE 命令
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
说明:
ZRANGEBYSCORE,ZREVRANGEBYSCORE:获取指定分值范围内的成员
ZCOUNT 命令
ZCOUNT key min max
说明:统计指定分值范围内的成员数量
ZREMRANGEBYRANK 命令
ZREMRANGEBYRANK key start stop
说明:移除指定排名范围内的成员
ZREVRANGEBYSCORE 命令
ZREMRANGEBYSCORE key min max
说明:移除指定分值范围内的成员
ZUNIONSTORE,ZINTERSTORE 命令
ZUNIONSTORE destination numkeys key [key ...]
ZINTERSTORE destination numkeys key [key ...]
说明:有序集合的并集运算和交集运算
ZPOPMAX, ZPOPMIN 命令
ZPOPMAX key [count]
ZPOPMIN key [count]
说明:弹出分值最高或最低的count个成员
06
数据结构 - HyperLogLog
HyperLogLog是一个专门为计算集合的基数而创建的概率算法,对于一个给定的集合,HyperLogLog可以计算出这个集合的近似基数:近似基数并非实际基数,它可能比实际基数小一点或大一点。
HyperLogLog的优点在于它计算近似基数所需的内存并不会因为集合的大小而改变,无论集合包含的元素有多少个,HyperLogLog进行计算所需的内存总是固定的,并且是非常少的。
Redis中的HyperLogLog只需要使用12KB内存空间,就可以对接近:2^64个元素进行计数,而算法的标准误差仅为0.81%,因此它计算出的近似基数是相当可信的。
命令
PFADD 命令
PFADD key element [element ...]
说明:对集合元素进行基数
如果给定的元素都已经进行过计数,那PFADD命令返回0,表示HyperLogLog计算出的近似基数没有发生变化
如果给定的元素至少一个之前没有进行过计数的元素,导致HyperLogLog计算出的近似基数发生了变化,那么PFADD命令将返回1
PFCOUNT 命令
PFCOUNT key [key...]
说明:返回集合的近似基数
多个key进行计算时,PFCOUNT将执行并集计算,然后返回并集计算出的近似基数
PFMERGE 命令
PFMERGE destkey sourcekey [sourcekey ...]
说明:计算多个HyperLogLog的并集,并将并集存储到指定的key中
PFCOUNT 与 PFMERGE
PFCOUNT 执行流程
内部调用PFMERGE命令,计算给定的HyperLogLog并集,并将并集存储到一个临时的HyperLogLog中
对临时的HyperLogLog进行PFCOUNT命令,得到近似基数
删除临时HyperLogLog
返回近似基数
07
数据结构 - BitMap
Redis的位图(bitmap)是由多个二进制位组成的数组,数组中的每个二进制位都有与之对应的偏移量(也成索引),用户通过这些偏移量可以对位图中指定的一个或多个二进制位操作。
命令
SETBIT 命令
SETBIT key offset value
说明:为位图指定偏移量上的二进制位设置值
GETBIT 命令
GETBIT key offset
说明:获取二进制位的值
offset 必须为正数
offset 超过最大偏移量则返回0
BITCOUNT 命令
BITCOUNT key [start end]
说明:统计被设置的二进制位数量
start & end :使用来指定字节偏移量而不是二进制位偏移量
位图的字节偏移量与Redis其他数据结构的偏移量一样,都是从0开始的:位图第一个字节偏移量为0,第二个字节偏移量为1,以此类推
start & end:除了是正数之外,还可以是负数
BITPOS 命令
BITPOS key value [start] [end]
说明:查找第一个指定的二进制位的值
start & end:指定的字节范围内进行查找
超过边界的将返回-1
BITOP 命令
BITOP operation destkey sourcekey [sourcekey ...]
说明:执行二进制位运算
operation:AND(逻辑并), OR(逻辑或), XOR(逻辑异或), NOT(逻辑非)中任意一个
AND,OR,XOR:这三种运算允许用户使用任意数量的位图作为输入
NOT:只允许使用一个位图作为输入
08
数据结构 - 地理坐标GEO
Redis GEO 是Redis在3.2版本中新增加的特性,通过该特性,用户可以将经纬度格式的地理坐标存储到Redis中,并对这些坐标进行距离计算,范围查找等操作。
命令
GEOADD 命令
GEOADD key longitude latitude member [longitude latitude member ...]
说明:将一个或多个经纬度坐标存储到位置集合中,并为这些坐标设置相应的名字
longitude:经度
latitude:纬度
member:名称
GEOPOS 命令
GEOPOS key name [name...]
说明:获取指定位置的坐标
GEODIST 命令
GEODIST key name1 name2 [unit]
说明:计算两个位置之间的直线距离
unit: 距离的单位(m: 米, km:千米,mi:英里,ft:英尺)
GEORADIUS 命令
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC]
说明:查找指定坐标半径范围内的其他位置
radius:查找半径
unit:查找半径的单位(m: 米, km:千米,mi:英里,ft:英尺)
WITHCOORD:返回被匹配的位置的坐标
WITHDIST: 返回被匹配位置与中心点之间的距离
ASC:升序
DESC:降序
GEORADIUSBYMEMBER 命令
GEORADIUSBYMEMBER key name radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC]
说明:查找指定位置半径范围内的其他位置
与GEORADIUS差异:指定中心点时使用的参数不一样
GEOHASH 命令
GEOHASH key member [member ...]
说明:获取指定位置的GEOHASH值
有序集合命令操作GEO数据
ZADD :添加
ZRANGE:查看位置集合存储的所有位置
ZCARD:查看存储数量
ZSCORE:查看指定位置的GEOHASH值
ZREM:删除指定位置