三大特殊数据类型结构,十分的少见但是开源项目中依然有它们的身影
Geospatial:地理位置
实现的功能:附近的人,城市与城市之前的距离计算
添加城市经纬度到key中,经纬度则是key的value值,在正常的开发过程中,这些数据是通过java导入即可,不需要手动添加
添加命令
geoadd
格式
geoadd key value【纬度 精度 城市名】
geoadd
[root@localhost redis]# ./bin/redis-cli -p 6379 客户端登录redis
127.0.0.1:6379> GEOADD china:city 116.40 39.90 beijing 添加北京的经纬度
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.47 31.23 shanghai 117.55 34.85 zaozhuang 110.33 20.00 hainan 添加多个城市的经纬度,上海 枣庄 海南
(integer) 3
Geopos:查询添加key中的数据
127.0.0.1:6379> GEOPOS china:city beijing 查询一个城市,北京经纬度
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
127.0.0.1:6379> GEOPOS china:city zaozhuang hainan 查询多个城市经纬度,枣庄海南
1) 1) "117.55000144243240356"
2) "34.8499990842851517"
2) 1) "110.32999902963638306"
2) "20.00000058910486445"
127.0.0.1:6379>
Geodis :可以查询两地的距离
127.0.0.1:6379> GEODIST china:city zaozhuang beijing km
查询枣庄到北京的直线距离单位为 km
"570.8001"
注意:距离有点差距,因为经纬度并不是十分的精确,但是差的并不是很多
georadius:以给定的经纬度为中心,找到某一半径的元素
127.0.0.1:6379> ZRANGE china:city 0 -1 集合中已存在的所有键,查询则是在集合的基础上进行查询
1) "hainan"
2) "shanghai"
3) "zaozhaung"
4) "beijing"
127.0.0.1:6379>以经纬度110 30为中2000km为半径画个圆,找到集合中在⚪中的数据
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km
1) "shanghai"
2) "zaozhaung"
3) "beijing"
4) "hainan"查询数据,并附带着城市的经纬度
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withcoord
1) 1) "shanghai"
2) 1) "121.47000163793563843"
2) "31.22999903975783553"
2) 1) "zaozhaung"
2) 1) "117.55000144243240356"
2) "34.8499990842851517"
3) 1) "beijing"
2) 1) "116.39999896287918091"
2) "39.90000009167092543"
4) 1) "hainan"
2) 1) "110.32999902963638306"
2) "20.00000058910486445"查询数据并附带着城市距离这个⚪的距离
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withdist
1) 1) "shanghai"
2) "1105.9098" 距离
2) 1) "zaozhaung"
2) "890.2686" 距离
3) 1) "beijing"
2) "1245.2858" 距离
4) 1) "hainan"
2) "1112.7582" 距离127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withdist count 1
count则表示:只显示一个数据,显示最近的那个城市
1) 1) "zaozhaung"
2) "890.2686"
127.0.0.1:6379> GEORADIUS china:city 110 30 2000 km withdist count 2显示两个城市
1) 1) "zaozhaung"
2) "890.2686"
2) 1) "shanghai"
2) "1105.9098"
GEORADIUSBYMEMBER :根据城市为中心进行查找
上面的georadius是通过给定的经纬度为中心进行查找,而这个则是通过结合中已经存在的城市为中心进行查找
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
以集合中北京为中1000km为半径,枣庄则是在⚪中
1) "zaozhaung"
2) "beijing"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km withcoord附带查询到数据的经纬度
1) 1) "zaozhaung"
2) 1) "117.55000144243240356"
2) "34.8499990842851517"
2) 1) "beijing"
2) 1) "116.39999896287918091"
2) "39.90000009167092543"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km withdist附带查询城市的距离
1) 1) "zaozhaung"
2) "570.8001"
2) 1) "beijing"
2) "0.0000"
127.0.0.1:6379>
Geohash:返回一个或多个元素,是通过hash来进行表示
返回值则是11个字符的Geohash的字符串
是将二维的经纬度转换为一维的字符串
注意:如果两个返回值越接近,表示两个城市距离就越近
127.0.0.1:6379> GEOHASH china:city beijing zaozhaung
1) "wx4fbxxfke0"
2) "ww5w6bjrcw0"
127.0.0.1:6379>
Geo实现的底层原理就是五大基本数据类型的zset,在redis.io的官方文档中,并没有介绍关于删除集合信息的命令,但是我们可以通过底层原理去实现键的删除
127.0.0.1:6379> ZRANGE china:city 0 -1 查询集合中的所有数据
1) "hainan"
2) "shanghai"
3) "zaozhaung"
4) "beijing"
127.0.0.1:6379> ZREM china:city zaozhaung 删除枣庄这个城市的数据
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1 删除成功
1) "hainan"
2) "shanghai"
3) "beijing"
127.0.0.1:6379>
hyperloglog:实现的功能是计算统计
例如:统计网页的访问量(注意一点:redis功能具有一定的容错,并不是完全正确)
基数:结合中不重复的元素个数,可以极少的占用内存
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> PFADD key1 a b c d e f g 创建两个集合分别放着不同的信息
(integer) 1
127.0.0.1:6379> PFADD key2 e f g h i j k
(integer) 1
127.0.0.1:6379> PFCOUNT key1 查看集合1中的元素个数
(integer) 7
127.0.0.1:6379> PFCOUNT key2
(integer) 7
127.0.0.1:6379> PFMERGE key3 key1 key2 将集合一与集合二整合到集合三中
OK
127.0.0.1:6379> PFCOUNT key3 这里显示的则是两个集合中的基数
(integer) 11
127.0.0.1:6379>
bitmaps:位存储
统计信息:只有两种情况的例如:登录,未登录 签到 未签到
bitmaps位图,数据结构 是二进制来进行记录,只有0 1两个状态
127.0.0.1:6379> setbit sign 0 1 假设一每周签到为前提 1 表示已签到 0 表示没签到
创建每天签到的状况
(integer) 0127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 1
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0
127.0.0.1:6379> GETBIT sign 1 查看周一是否签到
(integer) 0
127.0.0.1:6379> GETBIT sign 0 查看周天是否签到
(integer) 1
127.0.0.1:6379> BITCOUNT sign 统计已存入信息已签到的个数
(integer) 5
127.0.0.1:6379>