02 redis 三种特殊的数据类型

课程学习地址:
https://www.bilibili.com/video/BV1S54y1R7SB?p=23
中间手册地址:
http://www.redis.cn/

一. 地理空间(geospatial) 索引半径查询

二.Hyperloglog


什么是基数

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

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

简介

Redis2.8.9版本就更新了Heperloglog数据结构!
Redis Hyperloglog 基数统计的算法
优点:占用内在是固定的,2^64不同的元素的技术,只需要12kb内在!如果要从内在的角度来比较的话Hyperloglog首先!
页面的UV(一个人访问网站多次,但还是算作一个人!)
传统的方式,set保存用户的id,然后就可以统计set中元素数据作为标准判断!
Heperloglog 0.81%错误率!统计UV任务,可以忽略不计的!

测试使用

127.0.0.1:6379> pfadd mykey a a b c d e f g h i  #添加第一组基数数量
(integer) 1
127.0.0.1:6379> pfcount mykey  #统计第一组基数数量,会自动去重
(integer) 9
127.0.0.1:6379> pfadd mykey j #继续添加
(integer) 1
127.0.0.1:6379> pfadd mykey2 i j z x c v b n m  
(integer) 1
127.0.0.1:6379> pfcount mykey2
(integer) 9
127.0.0.1:6379> pfmerge mykey3 mykey mykey2 #合并第二组两个基数集
OK
127.0.0.1:6379> pfcount mykey3 #统计基数
(integer) 15
127.0.0.1:6379> pfcount mykey  #统计基数
(integer) 10
127.0.0.1:6379> pfcount mykey2 #统计基数 
(integer) 9

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


三. Bitmaps

位存储

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

测试

使用bitmap来记录,周一到周日的打卡!(1代表已经签到了,0代码没有签到)!
周一:1 周二:0 周三:0 周四:1 ......

127.0.0.1:6379> setbit sign 0 1
(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 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 1
(integer) 0

查看某一天是否有打卡!

127.0.0.1:6379> getbit sign 3 #周四打卡了
(integer) 1 
127.0.0.1:6379> getbit sign 5 #周六没有打卡
(integer) 0

统计操作,统计打卡的天数!

127.0.0.1:6379> bitcount sign #统计这周的打卡记录,就可以看到是否有全勤
(integer) 5
posted @ 2020-10-03 07:43  HaimaBlog  阅读(168)  评论(0编辑  收藏  举报