Redis特殊类型

Redis 三种特殊类型
中文官网
https://www.redis.net.cn/tutorial/3501.html

Geospatial

定位、附近的人、距离计算
五个命令
GEOADD

# GEOADD 命令
# 规则,两级无法添加,一般下载城市数据,直接通过java导入
# 参数 key 值(维度、精度、名称)
# 有效的经度从-180度到180度。
# 有效的纬度从-85.05112878度到85.05112878度。
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
GEOADD china:city 116.40 39.90 beijing
GEOADD china:city 121.47 31.23 shanghai
GEOADD china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen
GEOADD china:city 120.16 30.24 hangzhou 108.96 34.26 xian

GEOPOS

# 获取城市数据,获得当前定位,一定是一个坐标值 
GETPOS china:city beijing # 获取指定的经纬度
GETPOS china:city beijing chongqing

GEODIST

# 查询两地点直线距离 默认:m
GEODIST china:city beijing shanghai
# 查询两地点之间的距离 km
GEODIST china:city beijing shanghai km

GEORADIUS
以某点为中心查找指定距离的地点

# 查找距离 该点(经纬度为110,30) 1000km以内的城市
GEORADIUS china:city 110 30 1000 km
# 查找距离 该点(经纬度为110,30) 1000km以内的城市 带有距离
GEORADIUS china:city 110 30 1000 km withdist
# 查找距离 该点(经纬度为110,30) 1000km以内的城市 带有经纬度
GEORADIUS china:city 110 30 1000 km withcoord
# 查找距离 该点(经纬度为110,30) 1000km以内的城市 带有经纬度,查询2个
GEORADIUS china:city 110 30 1000 km withcoord count 2

GEORADIUSBYMEMBER

# 找到北京1000km范围内的城市 beijing 必须存在于china:city
GEORADIUSBYMEMBER china:city beijing 1000 km

GEOHASH

通常使用表示位置的元素使用不同的技术,使用Geohash位置52点整数编码。由于编码和解码过程中所使用的初始最小和最大坐标不同,编码的编码也不同于标准。此命令返回一个标准的Geohash。
Geohash字符串属性
该命令将返回11个字符的Geohash字符串,所以没有精度Geohash,损失相比,使用内部52位表示。返回的geohashes具有以下特性:

  • 他们可以缩短从右边的字符。它将失去精度,但仍将指向同一地区。
  • 它可以在 geohash.org 网站使用,网址 http://geohash.org/。查询例子:http://geohash.org/sqdtr74hyu0.
  • 与类似的前缀字符串是附近,但相反的是不正确的,这是可能的,用不同的前缀字符串附近。
    返回值
    一个数组, 数组的每个项都是一个 geohash 。 命令返回的 geohash 的位置与用户给定的位置元素的位置一一对应。
# 将二维的经纬度转换成一维的字符串,字符串越接近,距离越近
GEOHASH china:city  beijing chongqing

B站:狂神说
GEO 底层原理 为Zset! 可以使用Zset命令操作GEO
ZRANG china:city 0 1
ZREM china:city beijing
ZRANG china:city 0 1

Hyperloglog

https://www.redis.net.cn/tutorial/3513.html

Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
什么是基数?
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

场景:访问网站次数(UV),一个访问一个网站多次也算一个人
如果使用set保存用户id,然后就可以统计set中的元素数量
但是如果保存大量的用户ID,就会耗费大量的空间!我们的目的是为了计数,不是为了保存用户ID
优点:占用的内存小
缺点:存在0.81%的错误率

命令及描述

1 PFADD key element [element …] 添加指定元素到 HyperLogLog 中。
2 PFCOUNT key [key …] 返回给定 HyperLogLog 的基数估算值。
3 PFMERGE destkey sourcekey [sourcekey …] 将多个 HyperLogLog 合并为一个 HyperLogLog

PFadd mykey a b c d e f g h i j
PFCOUNT mykey # 10
PFADD mykey2 i j k l m n o p
PFCOUNT mykey2 # 8
PFMERGE mykey3 mykey mykey2
PFCOUNT mykey3 # 16

Bitmap

位存储,适合有两个状态的
Bitmap 位图,都是通过二进制位来记录

# 一周打卡
setbit sign 0 1 #第一天打卡
setbit sign 1 0 #第二天未打卡
getbit sign 1 # 查看第二天是否打卡
# 统计打卡天数
bitcount sign # 统计打卡天数

参考:B站狂神说

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值