新数据类型
Bitmaps
Ⅰ.Bitmaps 本身不是一种数据类型,实际上它就是字符串(key-value ),但是它可以对字符串的位进行操作。
Ⅱ.Bitmaps 单独提供了一套命令,所以在 Redis 中使用 Bitmaps 和使用字符串的方法不太相同。 可以把 Bitmaps 想象成一个以位为单位的数组数组的每个单元只能存储0和1,数组的标在 Bitmaps 中叫做偏移量。
命令
setbit
setbit<key><offset><value>设置 Bitmaps 中某个偏移量的值(0或1)
offset:偏移量从0开始
实例
没设置的都为0
getbit
getbit<key><offset>获取 Bitmaps 中某个偏移量的值
获取键的第 offset 位的值(从0开始算)
实例
bitcount
统计字符串被设置为1的 bit数。一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。start 和 end 参数的设置,都可以使用负数值:比如 -1 表示最后一个位,而 -2 表示倒数第二个位,start、end 是指 bit 组的字节的下标数,二者皆包含。
bitcount<key>[start end]统计字符串从 start 字节到 end 字节比特值为1的数量
实例
bitop
bitop and(or/not/xor)<destkey> [key...]
bitop 是一个复合操作,它可以做多个 Bitmaps的and(交集)、or(并集)、 not(非)、xor(异或)操作并将结果保存在 destkey 中。
实例
Bitmaps与set 对比
所以数据多时Bitmaps才更省空间
HyperLogLog
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。
命令
pfadd
pfadd <key>< element>[element.] 添加指定元素到 HyperLogLog 中
实例
这里还可以同时加多个"" ""
将所有元素添加到指定 HyperLogLog 数据结构中。如果执行命令后 HLL估计的近似基数发生变化,则返回1,否则返回 0。
pfcount
pfcount<key> [key ….]计算 HLL的近似基数,可以计算多个 HLL,比如用 HLL 存储每天的 UV,计算一周的 UV 可以使用7 天的 UV 合并计算即可
实例
pfcount hll1 "redis"
pfmerge
pfmerge<destkey><sourcekey>[sourcekey ..]将一个或多个 HLL 合并后的结果存储在另一个HLL中,比如每月活跃用户可以使用每天的活跃用户来合并计算可得
实例
将hll1和hll2合并到hll3
Geospatial
命令
geoadd
gegadd<key>< longitude><latitude><member> [longitude latitude member...] 添加地理位置(经度,纬度,名称)。
实例
geopos
geopos <key><member>[member...]获得指定地区的坐标值
实例
geoadd china:city shanghai
geodist
geodist<key><member1><member2>[m|km|ft|mi] 获取两个位置之间的直线距离
实例
m 表示单位为米[默认值]。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
georadius
georadius<key>< longitude><latitude>radius m|km|ft|mi 以给定的经纬度为中心
找出某一半径内的元素。