三个特殊数据类型
geospatial(地理位置)
朋友的定位 附近的人
查询地理信息数据:城市经纬度查询-国内城市经度纬度在线查询工具 (jsons.cn)
这个功能在3.2版本就推出了
添加城市位置
#geoadd 添加地理位置
#规则 地球两极是无法直接添加的,一般我们会下载城市数据 利用Java程序一次性导入
#填写规则是纬度经度 不要写反 但是redis会检查输入的经纬度的值 如果超出限制会出现错误
127.0.0.1:6379> GEOADD china:city 116.405285 39.904989 beijing
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.472644 31.231706 shanghai
(integer) 1
127.0.0.1:6379> GEOADD china:city 125.3245 43.886841 jilin
(integer) 1
127.0.0.1:6379> GEOADD china:city 114.085947 22.547 shenzhen
(integer) 1
127.0.0.1:6379> GEOADD china:city 126.642464 45.756967 haerbin 117.190182 39.125596 tianjin
(integer) 2
127.0.0.1:6379>
查询一个地方的经度纬度 一定是一组坐标值
127.0.0.1:6379> GEOPOS china:city beijing
1) 1) "116.40528291463851929"
2) "39.9049884229125027"
127.0.0.1:6379> GEOPOS china:city beijing shanghai
1) 1) "116.40528291463851929"
2) "39.9049884229125027"
2) 1) "121.47264629602432251"
2) "31.23170490709807012"
127.0.0.1:6379>
计算两个地理位置之间的绝对距离
如果两个位置之间的其中一个不存在, 那么命令返回空值。
指定单位的参数 unit 必须是以下单位的其中一个:
-
m 表示单位为米。
-
km 表示单位为千米。
-
mi 表示单位为英里。
-
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST
默认使用米作为单位。
GEODIST
命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差
127.0.0.1:6379> GEODIST china:city beijing shanghai km
"1067.5980"
127.0.0.1:6379>
我附近的人(获得周围所有人的定位) 通过半径来查 还可以通过指定的count来反回一定数量的数据
127.0.0.1:6379> GEORADIUS china:city 123 44 500 km
1) "jilin"
2) "haerbin"
127.0.0.1:6379>
GEORADIUSBYMEMBER
通过一个元素的位置来进行搜索
比如搜索北京1000公里内的所有城市
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "tianjin"
2) "beijing"
3) "jilin"
127.0.0.1:6379>
geohash
该命令将返回11个字符的Geohash字符串
127.0.0.1:6379> GEOHASH china:city beijing
1) "wx4g0b7xrt0"
127.0.0.1:6379>
geo的底层原理其实就是zset 我们可以使用zset命令来操作geo
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "shenzhen"
2) "shanghai"
3) "tianjin"
4) "beijing"
5) "jilin"
6) "haerbin"
127.0.0.1:6379>
Hyperloglog
什么是基数
A{1,3,5,7,8,9} B{1,3,5,7,8}
基数指的是 不重复的元素 比如这里面的元素 不重复的元素 是 1 3 5 7 8 那么基数就是 5
统计网站的访问量 (一个人多次访问 算成一个人)
传统方式 使用set集合 利用其唯一的特性 来保存访问的数量
这个方法如果保存大量的用户id 就会格外的麻烦 我们只是为了计数 而不是为了保存用户id
采用hyperloglog的优点就是 占用内存是固定的 采用2的64次方进行计数 只需要12kb的内存
如果要从内存角度来比较的话 那么这个方法应该是首选的
但是这个方法有着0.81%的错误率 如果对数据的精准性要求不是很高的情况
127.0.0.1:6379> PFADD mypf1 a b c d e f g h i
(integer) 1
127.0.0.1:6379> PFADD mypf2 h g i m k l u t r
(integer) 1
127.0.0.1:6379> PFCOUNT mypf1
(integer) 9
127.0.0.1:6379> PFCOUNT mypf2
(integer) 8
127.0.0.1:6379> PFMERGE mypf3 mypf2 mypf1
OK
127.0.0.1:6379> PFCOUNT mypf3
(integer) 14
127.0.0.1:6379>
Bitmap
位存储
统计用户信息 登录 未登录 打卡 未打卡 活跃 不活跃
两种状态的 都可以使用这个
bitmap 位图 数据结构 使用二进制 只有两个状态
测试 使用bitmap 来记录一周的打卡
127.0.0.1:6379> SETBIT sign 0 1
(integer) 0
127.0.0.1:6379> SETBIT sign 1 0
(integer) 0
127.0.0.1:6379> SETBIT sign 2 0
(integer) 0
127.0.0.1:6379> SETBIT sign 3 1
(integer) 0
127.0.0.1:6379> SETBIT sign 4 1
(integer) 0
127.0.0.1:6379> SETBIT sign 5 0
(integer) 0
127.0.0.1:6379> SETBIT sign 6 1
(integer) 0
127.0.0.1:6379>
查看某一天是否打卡
127.0.0.1:6379> GETBIT sign 6
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> GETBIT sign 5
(integer) 0
127.0.0.1:6379>
统计打卡天数
127.0.0.1:6379> BITCOUNT sign 0 -1标签:city,特殊,0.1,数据类型,127.0,6379,三个,china,integer From: https://www.cnblogs.com/AnJiaYu/p/17660202.html
(integer) 4
127.0.0.1:6379>