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

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

发布时间:2019-11-12 08:40:47 所属栏目:建站 来源: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。并且我还想你们介绍了如何使用他们,他们的运用场景有哪些,希望对你们有帮助。

非常感谢你能看到这里,如果喜欢或者对你有帮助别忘了点赞哦。你也可以关注我,我会经常做些学习分享给大家。

(编辑:核心网)

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

热点阅读