Redis新数据类型

一、Bitmaps

Bitmaps本身不是一种数据类型,实际上它是字符串(key-value),但是它可以对字符串的位进行操作

可以把Redis想象成一个以位为单位的数组,数组每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量

* setbit key offset value    设置Bitmaps中某个偏移量的值(0或1), offset偏移量从0开始

实例:每个独立用户是否访问过网站存放在Bitmaps中,将访问的用户记作1,没有为0,用偏移量作为用户id

Bitmaps         0 1 0 0 0 0 0 0 1 1 1

偏移量(用户id)         0 1 2 3 4 5 6 7 8 9 10

注:很多应用的用户id以一个指定数字如1000开头,直接将用户id与偏移量对应会造成一定浪费,可以将用户id-指定数字。

在第一次初始化Redis时,如果偏移量非常大,那么整个初始化过程会比较慢,造成Redis堵塞

* getbit key offset      获取Bitmaps中某个偏移量的值

* bitcount key [start end]   统计【起始 结束】字节比特值为1的数量

* redis的setbit设置或清除的是bit位置,而bitcount计算的是byte位置

* bitop and(or/not/xor) destkey key……     bitop是一个复合操作,可以做多个bitmap的and交集、or并集、not非、xor异或操作并将结果保存在destkey中。

Bitmaps和set对比:Bitmaps比较节省空间。但是若活跃用户量实际很少,Bitmaps就不太合适,因为大部分位都是0。

 

二、HyperLogLog

求集合中不重复元素个数的问题称为基数问题。Redis HyperLogLog是用来做基数统计的算法,优点是在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的,并且是很小的。

* pfadd key element 【element……】添加指定元素到HyperLogLog中  成功返回1,否则返回0

* pfcount key [key……]       计算HLL的近似基数,可以计算多个HLL,比如用HLL存储每天的UV,计算一周的UV可以使用7天的uv合并计算

* pfmerge destkey sourcekey [sourcekey……]  将一个或多个HLL并存后的结果存储在另一个HLL中,比如每月活跃用户可以使用每天的活跃用户来合并计算即可

 

三、Geospatial

* geoadd key longitude latitude memeber [longtiude latitude  member], 添加地理位置(经度、纬度、名称)

* geopos key member[memeber……]    获得指定对象地区的坐标值。

* geodist key member1 member2 …… [m|  km | ft | mi]      获取两个位置之间的直线距离

* georadius key longitude latitude radius m|km|ft|mi      以给定的经纬度为中心,找出一半径内的元素

posted @   佛系粥米  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示