Bitmaps
简介:
Redis提供了Bitmaps可以实现 对位 的操作:
① Bitmaps本身不是一种数据类型,实际上及时字符串(key-value)。
② Bitmaps类似一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。
基础命令:
setbit [key] [offset] [value] 设置bitmaps中某个偏移量的值(0或1)
偏移量从0开始。
getbit [key] [offset] 取出bitmaps中某个偏移量的值
bitcount [key] [\st] [\ed] 获取value设置为1的数量(st、ed可选)
bitop and [result key] [key1] [key2] ... bitop是一个符合操作,可以将多个bitmaps
的and(交集)、or(并集)、not(非)、xor(异或)操作
结果保存在result key中
在第一次初始化Bitmaps时,如果偏移量非常大,那么整个初始化过程执行会非常慢,可能会造成Redis的阻塞。
redis的setbit设置或清除的是bit位置,bitcount设置的是byte设置
set和bitmaps对比
bitmaps能极大的节约空间。
HyperLogLog
简介:
在工作中,经常遇到与统计相关的功能实现,比如统计网站PV(ageView),可以使用Redis的incr、incrby轻松实现。
但像UV(UniqueVisitor,独立访客)、独立ip数、搜索记录数等需要去重和计数的问题,或者说是求集合中不重复元素个数的问题,就是 基数问题 。
HyperLogLog 是一种用来做基数统计的算法,HyperLogLog的显著特点是,在输入的元素数量或者体积非常庞大时,计算基数所需的空间总是固定。在Redis的具体实现中,每个HyperLogLog键只需要花费12kb内存,就可以计算接近2^64个不同元素的基数。
但是,HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。
基础命令:
pfadd [key] [value1] [value2] ... 往将值加入到key指定的HyperLogLog数据结构中
如果在添加后,HLL估计的近似基数发生变化,
则返回1,否则返回0。
pfcount [key1] [key2] ... 计算指定HLL的近似基数,可以计算多个HLL pfmerge [result key] [key1] [key2] ... 将一个或者多个HLL合并后的结果存在
result key当中
Geospatial
简介:
GEO提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等信息
有效的经度 从 -180度 到 180度。 有效的纬度 从 -85.05112827度 到 85.05112827度
当坐标位置超出范围时,该命令会返回一个错误 已添加的数据,是无法再次往里添加的。
基础命令:
geoadd [key] [longitute] [latitude] [value] 在key中添加包含经纬度信息的value
geopos [key] [value] 获取value的经纬度
geodist [key] [value1] [value2] 获取两个位置之间的直线距离
georadius [key] [longitude] [latitude] [radius] [m/km/ft/mi]
以给定的经纬度为中心,找出某一半径内的元素