Redis三种特殊的数据类型
1、Geospatial(地理位置)
使用经纬度定位地理坐标并使用一个有序集合Zset保存,所以Zset命令也可以使用
有效的经纬度
- 有效的经度:-180°~180°
- 有效的纬度:-85.05112878°~85.05112878°
unit必须是以下单位的其中一个:
- m表示单位为米(默认)
- km表示单位为千米
- mi表示单位为英里
- ft表示单位为英尺
关于GEORADIUS的参数
通过
georadius
可以完成附近的人功能
WITHCOORD:带上坐标显示
WITHDIST:带上距离显示,单位与半径单位是相同的
WITHHASH:返回指定结果中包含的geopath
COUNT count:指定返回结果的数量,只显示前面count个(默认按照距离递增排序)
asc|desc:返回结果根据离中心节点位置的距离进行升序或降序
store key:将返回结果的地理位置信息保存到指定key
storedist key:将返回结果离中心节点的距离保存到指定key
2、Hyperloglog(基数统计)
什么是基数?
数据集中不重复的元素的个数
Redis HyperLogLog是用来做基数统计的算法
HyperLogLog的优点:在输入元素的数量或者体积非常非常大的时候,计算技术所需要的空间是固定的,并且很小,只需要花费12KB的内存就可以计算接近2^64个不同元素的基数
HyperLogLog的缺点:HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。
HyperLogLog的底层使用的是String类型
命令 | 描述 | 示例 |
---|---|---|
PFADD key element1 [element2..] |
添加指定元素到HyperLogLog中 | ![]() |
PFCOUNT key [key] |
返回给定HyperLogLog的基数估算值 | ![]() |
PFMERGE destkey sourceky1 [sourcekey2..] |
将多个HyperLogLog合并为一个HyperLogLog | ![]() |
如果允许容错(即存在一点误差),则一定可以使用HyperLogLog(标准误差为0.81%)
如果不允许有容错,就使用Set或者自己的数据类型即可
应用场景:
- 页面的访问量(UV):一个用户多次访问,也只能算作一个热。
传统实现,存储用户的id,然后每次进行比较。当用户变多之后,这种方式及其浪费空间,而我们的目的只是计数,HyperLogLog就能帮助我们利用最小的空间完成。
3、BitMaps(位图)
1.使用位存储,信息状态只有0和1
2.Bitmap是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。(PS:划重点 节省存储空间)。
3.Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND、OR、XOR、NOT以及其他操作
4. 如果要统计全年打卡情况365天=365bit 1字节=8bit 46个字节左右!
127.0.0.1:6379> SETBIT sign 0 1 //10000000
(integer) 0
127.0.0.1:6379> SETBIT sign 3 1 //10010000
(integer) 0
127.0.0.1:6379> BITCOUNT sign 0 3 //统计下标0,3字节组中bit为1的个数,但目前字节组sign为[10010000 00000000 00000000]只有索引为0的字节组存在为1的位
(integer) 2
operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种:
- BITOP AND destkey key [key …] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
- BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。
- BITOP XOR destkey key [key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。
- BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey 。
注:除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入。
应用场景:
- 签到统计
- 状态统计
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81921.html