Redis三种特殊数据类型

Redis三种特殊结构的数据类型

geospatial

朋友的定位、附近的人、打车距离计算?
Redis的Geospatial在Redis3.2就推出了,这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!

  1. getadd 添加地理位置,规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!参数 key 值(维度、经度、名称)
    例如:

127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing #添加城市的经度纬度
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen
(integer) 2
127.0.0.1:6379> GEOPOS china:city beijing shenzhen #获取指定城市的经度纬度
1) 1) “116.39999896287918091”
2) “39.90000009167092543”
2) 1) “114.04999762773513794”
2) “22.5200000879503861”

  1. GEODIST:两人之间的距离!
    单位:
    m表示单位、km表示千米

    127.0.0.1:6379> GEODIST china:city beijing shenzhen #北京到深圳的直线距离 单位:米
    “1945788.0901”
    127.0.0.1:6379> GEODIST china:city beijing shenzhen km #北京到深圳的直线距离 单位:千米
    “1945.7881”

  2. GEORADIUS 以给定的经纬度为中心,找出某一半径内的元素
    我附近的人?(获得所有附近的人的地址,定位!)通过半径来查询!

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km #查询以110 30经纬度为中心,半径为1000km的中国城市
1) “chongqing”
2) “shenzhen”
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
1) “chongqing”

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist #withdist显示直线距离
1) 1) “chongqing”
2) “341.9374”
2) 1) “shenzhen”
2) “924.6408”
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord #显示经纬度
1) 1) “chongqing”
2) 1) “106.49999767541885376”
2) “29.52999957900659211”
2) 1) “shenzhen”
2) 1) “114.04999762773513794”
2) “22.5200000879503861”

#找出位于指定元素周围的其他元素:
127.0.0.1:6379> GEORADIUSBYMEMBER china:city chongqing 1100 km
1) “chongqing”
2) “shenzhen”

GEOHASH命令-返回一个或多个位置元素的Geohash字符串属性

127.0.0.1:6379> ZRANGE china:city 0 -1
1) “chongqing”
2) “shenzhen”
3) “beijing”
127.0.0.1:6379> zrem china:city beijing
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1
1) “chongqing”
2) “shenzhen”

Hyperloglog

什么是基数?

A{1,3,5,7,8,9} B{1,3,5,7,8}
基数(不重复的元素)= 5,可以接受误差!

简介
Redis2.8.9版本就更新了Hyperloglog数据结构!
Redis Hyperloglog 基数统计的算法!
优点:占用的内存是固定,2^64不同的元素的技术,只需要费12KB内存!
网页的UV(一个人访问一个网站多次,但是还是算作一个人!)
传统的方式,set保存用户的id,然后就可以统计set中的元素数量作为标准判断!
这个方式如果保存大量的用户id,就会比较麻烦!我们的目的是为了技术,而不是保存用户id;0.81%错误率!统计UV任务,可以忽略不计的!

127.0.0.1:6379> PFadd mykey a b c d e f g h i j #创建第一组元素 mykey
(integer) 1
127.0.0.1:6379> PFCOUNT mykey #统计mykey元素的基数数量
(integer) 10
127.0.0.1:6379> PFadd mykey2 i j z x c v b n m #创建第二组元素 mykey2
(integer) 1
127.0.0.1:6379> PFCOUNT mykey2
(integer) 9
127.0.0.1:6379> PFMERGE mykey3 mykey mykey2 #合并两组 mykey mykey2 => mykey3 并集
OK
127.0.0.1:6379> PFCOUNT mykey3 #看并集的数量!
(integer) 15

如果允许容错,那么一定可以使用Hyperloglog!
如果不允许容错,就使用set或者自己的数据类型即可!

Bitmaps

位存储
统计用户信息,活跃,不活跃!登录,未登录!打卡,365打卡!两个状态的,都可以使用Bitmaps!
Bitmaps位图,数据结构!都是操作二进制位来进行记录,就只有0和1两个状态!
365天=365bit 1字节=8bit 46个字节左右!

  1. 常用操作:模拟一周打卡的情况

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 0
(integer) 0
127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> bitcount sign #统计这周的打卡记录,就可以看到是否有全勤!
(integer) 3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值