【三】、Rediis的三种特殊的数据类型

Redis三种特殊的数据类型

1、Geospatial(地理位置)

使用经纬度定位地理坐标并使用一个有序集合Zset保存,所以Zset命令也可以使用

有效的经纬度

  • 有效的经度:-180°~180°
  • 有效的纬度:-85.05112878°~85.05112878°
命令描述示例
GEOADD key longitud(经度) latitude(纬度) member [..]将具体经纬度的坐标存入一个有序的集合GEOADD key longitud(经度) latitude(纬度)  member [..]
GEOPOS key member [member..]获取集合中的一个/多个成员坐标GEOPOS key member [member..]
GEODIST key member1 member2 [unit]返回两个给定位置之间的距离。默认以米做单位也可以手动添加unit(如下),指定单位geodist key member1 member2 [unit]
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]以给定经纬度为中心,返回集合当中包含的位置元素中,返回不超过给定的最大距离的所有位置的元素GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
GEORADIUSBYMEMBER key member radius unit以给定的已有成员作为中心位置,返回不超过给定的最大距离的所有位置的元素GEORADIUSBYMEMBER key member radius unit
GEOHASH key member1 [member2..]返回一个或者多个位置元素用Geohash表示,使用Geohash位置52点整数编码GEOHASH key member1 [member2..]

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中PFADD key element1 [element2..]
PFCOUNT key [key]返回给定HyperLogLog的基数估算值PFCOUNT key [key]
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个字节左右!

命令描述示例
SETBIT key offset value为指定key的offset位设置值(设置key的第offset位为value)SETBIT key offset value
GETBIT key offset获取offset位的值GETBIT key offset
BITCOUNT key [start end]统计字符串被设置位1的bit数量,也可以按字节组指定统计范围BITCOUNT key [start end]
BITOP operration destkey key [key..]对一个或多个保存二进制的字符串key进行位元操作,并将结果保存到destkeyy上BITOP operration destkey key [key..]
BITOPS key bit [start] [end]返回字符串里面第一个被设置为1或者0的bit位。start和end只能按字节,不能按位BITOPS key bit [start] [end]
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 作为输入。

应用场景

  • 签到统计
  • 状态统计

例如:使用bitmap来记录周一到周日的打卡记录
记录周一到周日的打卡记录
周一:1 周二:0 周三:0 周四:1……
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值