Redis之三大特殊数据类型
一、Geospatial地理位置
1、介绍
Redis 地理空间索引允许存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。
2、相关shell命令
2.1 规则
两级无法直接添加,一般会下载城市数据,直接通过java程序一次性导入
参数:key
值:纬度、经度、名称
有效的经度:-180度到180度
有效的纬度:-85.05112878度到85.05112878度
2.2 geoadd命令(给城市赋值)
给城市赋值(经纬度)
geoadd china:city 经度 纬度 城市名
例如
geoadd china:city 116.40 39.90 beijing
2.3 geopos命令(获取指定城市的经度和纬度)
获得当前定位(一定是个真正存在的坐标值)
geopos china:city 城市名1 城市名2
例如
geopos china:city beijing shanghai
2.4 geodist命令(获取两个城市之间的距离)
计算两点之间的距离
单位:
m表示单位为米
km表示单位为千米
mi表示单位为英里
ft表示单位为英尺
geodist china:city 城市名1 城市名2 km
例如
查看上海到北京的直线距离
geodist china:city beijing shanghai km
2.5 georadius命令(以给定的经纬度为中心,找出某一半径内的元素)
georadius china:city 经度 纬度 距离值 km
(1)以110,30这个经纬度为中心,寻找方圆1000km内的城市
georadius china:city 110 30 1000 km
(2)显示到中心距离的位置(withdist)
georadius china:city 110 30 1000 km withdist
(3)显示他人的定位信息(withcoord)
georadius china:city 110 30 1000 km withcoord
(4)筛选出指定位置的结果(withcoord count 1)
georadius china:city 110 30 1000 km withcoord count 1
2.6 georadiusbymember
找出位于指定元素周围的其他元素
georadiusbymember china:city 城市名 1000 km
例如
georadiusbymember china:city beijing 1000 km
2.7 geohash命令
返回11个字符的Geohash字符串
将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么距离越近。
geohash china:city 城市名
例如
geohash china:city beijing
3、注意
GEO底层的实现原理其实就是Zset,我们可以使用Zset命令来操作geo
(1)查看地图中全部的元素
zrange china:city 0 -1
(2)移除指定元素
zrem china:city beijing
二、Hyperloglog基数存储
1、基数
基数指(不重复的元素)= 5 ,可以接受误差
例如:A{1,3,5,7,8}
2、简介
Redis Hyperloglog基数统计的算法
优点:占用的内存是固定的,2^64个不同的元素的技术,只需要12KB内存
3、相关shell命令
3.1 创建一组元素
pfadd key值 a b c d e f g
例如
pfadd mykey a b c d e f g
3.2 统计mykey元素的基数数量
pfcount key值
结果
pfcount mykey
3.3 合并两组数据
pfmerge key值3 key值1 key值2
例如
pfmerge mykey3 mykey mykey2
4、注意
如果允许容错,就可以使用Hyperloglog,
如果不允许容错,就使用set或其他数据类型。
三、Bitmaps位存储
1、介绍
统计用户信息,活跃、不活跃!登录、未登录!打卡等等都可以使用Bitmaps
Bitmaps位图,数据结构,都是操作二进制位来进行记录,就只有0和1两个状态。
365天 = 365bit 1字节=8bit 46个字节左右
2、相关shell命令
2.1 对位图赋值
setbit 对象 某个属性 对应含义
例如
星期一标号为0
赋值为1,代表打卡,赋值为0,代表未打卡
如下:
星期一打卡了,赋值为1
星期二未打卡,赋值为0
星期三未打卡,赋值为0
星期四打卡了,赋值为1
setbit day 0 1
setbit day 1 0
setbit day 2 0
setbit day 3 1
2.2 查看是否打卡
getbit day 2
2.3 统计打卡天数
bitcount day