加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Redis不是只有5种基本数据类型?

发布时间:2019-11-13 01:15:40 所属栏目:建站 来源:IT知识课堂
导读:口试官: 我看你简历上说在你的项目中行使了 Redis,并行使它做了缓存,你能给我先容一下 Redis 的五种根基数据范例吗? 于是说道:emmm,Redis 中有 string字符串,hash哈希,list列表,set无序荟萃,zset有序荟萃,这五种数据范例。 口试官:除了这五种基

可以看到就这三个根基呼吁,很简朴很轻易把握。那我们来下手实践一下吧。

Redis不是只有5种根基数据范例?

BitMap

先容和行使场景

起首我们再来思索一个较量故意思的场景,老板想让你统计一年内多个用户之间他们同时在线的天数,这个时辰你怎么办?

你也许会想到行使 hash 存储,这太挥霍空间了,有没有更好的步伐呢?谜底是有的,Redis 中行使了 bitmap位图。

Redis不是只有5种根基数据范例?

我们知道,字符串中一个字符是行使8个比特来暗示的(如上图),在 Redis 中 bitmap 底层就是 string,也可以说 string 底层就是 bitmap。

假若有了这个我们是不是可以用来计较一个用户在指按时刻内签到的次数?也就是一个位置代表一天,0代表未签到,1代表签到,在上图中,该用户在八天内签到了四次。

Redis 中的 bitmap 还提供了多个 bitmap 举办与,或,异或运算的呼吁,虽然尚有单个 bitmap 的 非 运算。这是不是给你提供了一点思绪对付我们一开始的需求呢?

根基呼吁行使

  • setbit key index 0/1 配置某位的值
  • getbit key index 获取某位的值
  • bitcount key start end 获取指定范畴内为1的数目

必要留意的是,这里的start 和 end是指的字符位置不是比特位置!!!包罗下面的 bitpos 也是

  • bitpos key bit start end 获取第一个值为bit的从start到end字符索引范畴的位置
  • bitop and/or/xor/not destkey key1 key2 对多个 bitmap 举办逻辑运算。

对付bitmap尚有一个好玩的指令就是 bitfield ,这里我不做过多先容,感乐趣的同窗本身可以相识一下。

下手实践

我们起首来实现一下统计用户签到次数的成果。

Redis不是只有5种根基数据范例?

还记得我们一开始的题目吗?统计一年内多个用户之间他们同时在线的天数,我们有了 bitmap 还怕什么。

Redis不是只有5种根基数据范例?

GeoHash

先容和场景运用

GeoHash 常用来计较 四面的人,四面的市肆。

试想一下假如我们行使 相关数据库 来存储某个元素的地点 (id,经度,纬度) 。这个时辰我们该怎样计较四面的人?莫非我们要遍历全部元素位置并做间隔计较?这显然不行能。

虽然你可以行使分别地区并行使 SQL 语句圈出地区,然后成立 双向复合索引 来晋升机能,可是数据库的并发手段事实有限,我们能不能行使 Redis 来做呢?

谜底是可以的,Redis 中行使了 GeoHash 提供了很好的办理方案。详细道理是将地球当作一个平面,并把二维坐标映射成一维(精度丧失的缘故起因)。假如对个中的算法感乐趣你可以本身特殊去相识,篇幅有限不做过多声名。

根基呼吁和行使拭魅战

  • geoadd key longitude latitude element(后头可设置多个三元组) 添加元素
  • geodist key element1 element2 unit 计较两个元素的间隔
  • geopos key element [element] 获取元素的位置
  • geohash key element 获取元素hash
  • georadiusbymember key element distanceValue unit count countValue ASC/DESC [withdist] [withhash] [withcoord] 获取元撕?周的元素 可附加后头选项[间隔][hash][坐标]
  • georadius key longitude latitude distanceValue unit count countValue ASC/DESC [withdist] [withhash] [withcoord] 和上面一样只是元素改成了指定坐标值 
Redis不是只有5种根基数据范例?

总结

这篇文章中我想各人先容了 Redis 其它的四种非凡数据布局,他们别离是 BloomFilter,HyperLogLog,BitMap尚有GeoHash。而且我还想你们先容了怎样行使他们,他们的运用场景有哪些,但愿对你们有辅佐。

很是感激你能看到这里,假如喜好可能对你有辅佐别忘了点赞哦。你也可以存眷我,我会常常做些进修分享给各人。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读