Redis 三种特殊的数据类型

geospatial 地理位置

添加不同城市的地理位置信息

geoadd china:city 116.408 39.901 beijing

geoadd china:city 121.445 31.213 shanghai

geoadd china:city 120.343 36.088 qingdao

geoadd china:city 104.071 30.67 chengdu

geoadd china:city 108.969 34.285 xian

计算距离等相关信息

geopos     china:city beijing                # 获得北京的经度和维度

geodist    china:city beijing shanghai km    # 北京和上海的距离

georadius  china:city 100 30 500  km         # 距离某个地理位置 500km 内的坐标

georadius china:city 100 30 5000  km count 2 # 对结果进行限定,最多只能查出来两个

georadiusbymember china:city beijing 5000 km count 2  # 距离北京5000km的城市,限定两个

Hyperloglog

hyper 亢奋的;使用做基数统计。

举个最简单的例子,如果你要对某个网站访问人数,进行统计,那么如果一个人访问了多次,那么他算是一次访问。

正常情况下,我们可以使用 set 来处理这种情况,因为 set 本身如果重复的话,那么就会自动覆盖,但是这样的话,一般占用的空间比较大,使用 Hyperloglog 只需要费 12k 的内存,但是会有 0.8%的错误率

pfadd pfkey1  1 2 3 4 5 6     # 往 pfkey1 里添加值

pfadd pfkey2 5 6 7 8 9 10     # 往 pfkey2 里添加值

pfcount pfkey1                # 读取 pfkey1 的总数

pfmerge pfkey3 pfkey1 pfkey2  #将 pfkey1 和 pfkey2 合并为新的 pfkey3

pfcount pfkey3                # 统计 pfkey3的总数

Bitmaps

他是用于位存储,所以一般用来存储两种状态的,就可以使用这会方法,因为位只能存储 0,1

比如下面是一个人的上班打卡信息,1表示打卡了,0表示没有打卡

setbit bit1 1 1     # 第一天正常上班
setbit bit1 2 1     # 第二天正常上班
setbit bit1 3 0     # 第三天没有来上班
setbit bit1 4 1     # 第四天正常上班

 getbit bit1 3      # 查看第三天的状态

bitcount bit1     # 总共有几天是上班的?
# 输出3   ,只有三天上班了。

参考文献

[1] https://www.bilibili.com/video/BV1S54y1R7SB?share_source=copy_web

posted @ 2021-07-31 17:08  沧海一声笑rush  阅读(40)  评论(0编辑  收藏  举报