redis三种特殊的类型---不知懂否

一、geospatial

  Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。
使用场景:朋友的定位,附近的人,打车等等都可以使用

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐标。
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
  • geohash:返回一个或多个位置对象的 geohash 值。

①geoadd

127.0.0.1:6379[5]> geoadd china:city 121.445 31.213 shanghai
(integer) 1
127.0.0.1:6379[5]> geoadd china:city 116.408 39.904 beijing
(integer) 1
127.0.0.1:6379[5]> geoadd china:city 102.702 25.051 kunming
(integer) 1
127.0.0.1:6379[5]> geoadd china:city 120.165 30.319 hangzhou
(integer) 1
127.0.0.1:6379[5]> geoadd china:city 104.071 30.67 chendu
(integer) 1
127.0.0.1:6379[5]> geoadd china:city 114.109 22.544 shenzhen
(integer) 1

②geopos

127.0.0.1:6379[5]> geopos china:city beijing
1) 1) "116.40800267457962036"
   2) "39.90399988166036138"
127.0.0.1:6379[5]> geopos china:city shanghai
1) 1) "121.44499808549880981"
   2) "31.213001199663303"

③geodist

127.0.0.1:6379[5]> geodist china:city beijing shanghai
"1068232.0171"
127.0.0.1:6379[5]> geodist china:city beijing shanghai km
"1068.2320"
127.0.0.1:6379[5]> geodist china:city kunming shanghai km
"1958.7653"

④georadius

withdist:结果带上距离 withcoord:结果带上经纬度

127.0.0.1:6379[5]> georadius china:city 110 30 1000 km withdist withcoord    #距离 经度:110 纬度:30 1000km的地方
1) 1) "kunming"
   2) "905.7861"
   3) 1) "102.70200043916702271"
      2) "25.0510002766274269"
2) 1) "chendu"
   2) "573.9591"
   3) 1) "104.07099992036819458"
      2) "30.67000055930392222"
3) 1) "shenzhen"
   2) "924.8087"
   3) 1) "114.10900086164474487"
      2) "22.54399882788700182"
4) 1) "hangzhou"
   2) "977.8811"
   3) 1) "120.16499966382980347"
      2) "30.31899997732214302"

⑤georadiusbymember

距离昆明1000km的城市

127.0.0.1:6379[5]> georadiusbymember china:city kunming 1000 km
1) "kunming"
2) "chendu"

⑥geohash

返回一个或者多个位置元素的hash表示(11位表示)

127.0.0.1:6379[5]> geohash china:city beijing
1) "wx4g0bm9xh0"
127.0.0.1:6379[5]> geohash china:city shanghai
1) "wtw3ed1sct0"

二、HyperLogLog

  什么是基数?
  基数就是不重复元素比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

使用场景:网页一个人访问多次视为一次。
  在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

举例说明:
将key1与key2合并成key3之后,key3的长度为10,而不是13

127.0.0.1:6379[6]> pfadd key1 a b c d e f g
(integer) 1
127.0.0.1:6379[6]> pfadd key2 a b c x y z
(integer) 1
127.0.0.1:6379[6]> pfcount key1
(integer) 7
127.0.0.1:6379[6]> pfcount key2
(integer) 6
127.0.0.1:6379[6]> pfmerge key3 key1 key2
OK
127.0.0.1:6379[6]> pfcount key3
(integer) 10

三、bitmaps

  Bitmaps 并不是实际的数据类型,而是定义在String类型上的一个面向字节操作的集合。因为字符串是二进制安全的块,他们的最大长度是512M,最适合设置成2^32个不同字节。
  Bitmaps 的最大优势之一在存储信息时极其节约空间。例如,在一个以增量用户ID来标识不同用户的系统中,记录用户的四十亿的一个单独bit信息(例如,要知道用户是否想要接收最新的来信)仅仅使用512M内存。

使用场景:主要是用来做统计的,而且是两种状态的统计。比如说:用户登录/未登录、用户活跃/不活跃、用户打卡/未打卡

举例说明:

127.0.0.1:6379[7]> setbit sign 0 1
(integer) 0
127.0.0.1:6379[7]> setbit sign 1 1
(integer) 0
127.0.0.1:6379[7]> setbit sign 2 1
(integer) 0
127.0.0.1:6379[7]> setbit sign 3 1
(integer) 0
127.0.0.1:6379[7]> setbit sign 4 1
(integer) 0
127.0.0.1:6379[7]> setbit sign 5 1
(integer) 0
127.0.0.1:6379[7]> setbit sign 6 0
(integer) 0
127.0.0.1:6379[7]> bitcount sign
(integer) 6
127.0.0.1:6379[7]> getbit sign 2
(integer) 1
127.0.0.1:6379[7]> getbit sign 6
(integer) 0

楠哥-------一心想为IT行业添砖加瓦,却总是面向cv编程的程序员。
  谢谢阅读,无误点赞,有误还望评论区指正。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值