关于Redis进阶必学的3种数据类型

当面试时被问到redis的数据类型,初级程序员只知道String, Hash, List, Set, Zset这5种基础数据类型。
但要想完美通过面试,你必须知道另外3种进阶数据类型。

BitMaps

计算机使用二进制存储数据,并提供了操作位的功能。Redis使用Bitmaps结构实现此功能。Bitmaps底层实现是字符串,使用命令以下标方式操作只保存0、1的数组。
例如记录用户是否访问网站存放到Bitmaps中,以1表示用户已经访问了,以0表示用户没有访问。
以下表示了2021-03-13当天用户id 0、3、7、10访问了网站。

数据 1 0 0 1 0 0 0 1 0 0 1
下标 0 1 2 3 4 5 6 7 8 9 10
  • 设值命令:setbit visit:user:2021-03-13 0,setbit visit:user:2021-03-13 3
  • 查找命令:getbit visit:user:2021-03-13 3获取用户3的访问记录,返回值是1
  • 查找指定范围值为1的个数:bitcount visit:user:2021-03-13 [0 10],返回值是4
  • 集合运算(and交集、or并集、not非、xor异或),如:bitop and visit:user:2021-03-12_13 visit:user:2021-03-01_12 visit:user:2021-03-01_13
    Bitmaps和set对比:
数据类型 id长度 用户量 消耗内存
set 64 50 000 000 400MB
Bitmaps 1 100 000 000 12.5MB

在需要保存的数据量很大的时候,Bitmaps能节省很多空间。但假如需要保存的用户量比较小时,则Bitmaps消耗比set要高,具体用哪种需要根据自身业务分析。

HyperLogLog

HyperLogLog是一种基数算法,能使用很小的内存空间完成IP、Email、ID的统计,底层使用String实现。命令如下:

  • pfadd:pfadd visit:user:2021-03-13 0 3 7 10,向此结构添加数据
  • pfcount:pfcount visit:user:2021-03-13,统计这个键对应的总数
  • pfmerge:pfmerge visit:user:2021-03 visit:user:2021-03-01 visit:user:2021-03-02 ...,将后面几个统计到第一个key中。
    HyperLogLog占用内存极小,但存在一定的误差率,最大是0.81%,可以用在统计总数中。

GEO

Redis3.2版本提供了GEO(地理信息定位)功能,可以实现查找附近范围,计算两地距离等,底层数据类型是zset。

  • 增加命令:geoadd key longitude latitude member [longitude latitude member...]
  • 更新命令:和增加命令一致,自动替换原值, geoadd key longitude latitude member [longitude latitude member...]
  • 获取命令:geopos key member [member...]
  • 计算距离:geodist key member1 member2 [unit(m米、km千米、mi英里、ft尺)]
  • 范围计算:georadius key longitude latitude radius m
  • 删除命令:zrem key member,利用zset删除地理位置信息
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容