redis除了五种基本数据类型,还有三种特殊数据类型,分别是
- geospatial:存储、查询地理位置信息
- hyperloglog
- bitmaps
一、geospatial
geoadd china:city 116 39 beijing 137 32 shanghai #在指定key中添加经度、纬度及其对应的位置,可以同时添加多个
geopos china:city beijng #返回指定位置的经纬度
geodist china:city beijiing shanghai km #返回两个位置的直线距离,可以指定距离单位m、km
geohash china:city beijing shanghai #以字符串的形式返回位置的经纬度,字符串越接近,说明距离越接近
georadius china:city 110 35 1000 km withdist withcoord #返回指定经纬度、指定半径内的位置,可以附带距离和经纬度
georadiusbymember china:city beijing 500 km #返回指定位置、指定半径内的位置
zrange china:city 0 -1 #返回全部位置
zrem china:city beijing #删除元素,返回1表示删除成功
geospatial底层是sorted set,所以可以使用zset的命令进行操作。比如geo没有移除命令,可以使用zrem移除位置。
二、hyperloglog
hyperloglog即使存放2^64个元素,占用空间只有12kB
主要作用:在允许误差的情况下,统计集合中的不重复元素个数。比如统计uv
大数据量有误差0.81%,小数据量精确
如果不允许误差,那么就不能使用hyperloglog,可以使用set
pfadd myKey a a b c d e f #增加元素到key中,返回1表示添加成功
pfcount myKey #返回key中的基数(即不重复的元素的个数),这里是6
pfmerge myKey3 myKey1 myKey2 #把myKey1、myKey2合并成myKey3,即myKey3是myKey1、myKey2的并集
三、bitmaps
统计、存储只有两个状态的数据,比如是否登陆、是否在线等,占用内存小
setbit key 0 1 #设置key第0位bit值1
setbit key 1 1
setbit key 2 0
setbit key 3 1
getbit key 2 #获取key第2位bit值,返回0
bitcount key #返回1的个数
以上