Redis学习之三种特殊类型

目录

三种特殊类型:

Geospatial

        基本方法

        演示:

Hyperloglog

       简介

       演示:

      场景

Bitmap

       测试

        场景


三种特殊类型:

        Geospatial(地理位置)

        Hyperloglog(基数统计)

        Bitmap(位图场景)

Geospatial

        简称geo,主要用于存储地理位置信息,并对内存的信息进行操作

        基本方法

        geoadd:添加地理位置坐标

        geopos:获取地址位置坐标

        geodist:计算两个位置之间的距离

        georadius:根据给定的经纬度来获取指定方位内的地理位置集合

        georadiusbymember:根据给定地点获取指定范围内的坐标集合

        演示:

# 1、添加
127.0.0.1:6379> geoadd china:city 116.405285 39.904989 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 113.665412 34.757975 zhengzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 121.472644 31.231706 shanghai
(integer) 1
127.0.0.1:6379> GEOADD china:city 120.153576 30.287459 hangzhou
(integer) 1
127.0.0.1:6379> GEOADD china:city 114.085947 22.547 shenzhen
(integer) 1

# 2、查看坐标
127.0.0.1:6379> GEOPOS china:city shenzhen
1) 1) "114.08594459295272827"
   2) "22.54699993773966327"

# 3、查看两个成员之间的距离
127.0.0.1:6379> GEODIST china:city beijing shenzhen
"1943024.0448"
127.0.0.1:6379> GEODIST china:city beijing zhengzhou
"621563.5619"

# 4、根据坐标查看范围内的成员
127.0.0.1:6379> GEORADIUS china:city 116.405285 39.904989 1000 km
1) "zhengzhou"
2) "beijing"

# 5、根据成员查看范围内的成员
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "zhengzhou"
2) "beijing"

        GEO底层实现原理就是ZSET,可以使用ZSET的命令来操作geo!!

127.0.0.1:6379> ZRANGE china:city 0 -1
1) "shenzhen"
2) "hangzhou"
3) "shanghai"
4) "zhengzhou"
5) "beijing"
127.0.0.1:6379> ZREM china:city beijing
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "shenzhen"
2) "hangzhou"
3) "shanghai"
4) "zhengzhou"

Hyperloglog

        什么是基数:

        A{1,3,5,7,8,7}        B{1,3,5,7,8}

        基数(不重复的数字)=5,可以接受误差

       简介

                -Redis Hyperloglog 基数统计的算法!!

                -优点:占用的内存是固定的!2^64不同的元素的技术,只需要占用12KB的内存!

       演示:

# 创建第一个数据集合
127.0.0.1:6379> PFADD mypf1 a b c d e f g h j
(integer) 1

# 创建第二个数据集合
127.0.0.1:6379> PFADD mypf2 i j z x c v b n m
(integer) 1

# 查看集合一中数据的数量
127.0.0.1:6379> PFCOUNT mypf1 
(integer) 9

# 查看集合二中数据的数量
127.0.0.1:6379> PFCOUNT mypf2 
(integer) 9

# 合并一和二到一种
127.0.0.1:6379> PFMERGE mypf1 mypf2
OK

# 查看集合一
127.0.0.1:6379> PFCOUNT mypf1
(integer) 15

      场景

        网站的UV(一个人访问网站多次,但是还是算作一个人)

        传统的方式,set用户的id,然后就可以统一set中元素数量作为判断标准!

        这种方式大量存储用户的id,比较麻烦!我们的目的是为了计数!

        这种方式有0.81%的错误错误率,如果是UV的话,可以忽略不计!!

Bitmap

       测试

        用bitmap来统计用户一周的打卡!使用0(未打卡)、1(打卡)来进行统计!

# 记录周一到周日的状态
127.0.0.1:6379> SETBIT sign 0 0
(integer) 0
127.0.0.1:6379> SETBIT sign 1 1
(integer) 0
127.0.0.1:6379> SETBIT sign 2 0
(integer) 0
127.0.0.1:6379> SETBIT sign 3 0
(integer) 0
127.0.0.1:6379> SETBIT sign 4 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) 1

# 统计数量
127.0.0.1:6379> BITCOUNT sign
(integer) 4

        场景

        统计用户信息,活跃、不活跃!登录、未登录!打卡、未打卡!两个状态,都可以使用bitmap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倪家李子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值