Redis 中的 3 种特殊数据类型
时间:2022-07-24
本文章向大家介绍Redis 中的 3 种特殊数据类型,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 1. 前言
- 2. 三种特殊的数据类型
- 2.1 Gerspatial(地理位置)
- 2.2 Hyperloglog(基数统计)
- 2.3 Bitmap(位图)
1. 前言
Redis 中除开最常用的 5 种数据类型之外,还有 3 种特殊的数据类型,他们是:
- Gerspatial(地理位置)
- Hyperloglog(基数统计)
- Bitmap(位图)
2. 三种特殊的数据类型
2.1 Gerspatial(地理位置)
主要针对地理位置操作,有如下 6 个命令:
命令 |
说明 |
备注 |
---|---|---|
geoadd |
添加地理位置 |
经度有效值:[-180, 180]纬度有效值:[-85.05112878, 85.05112878] |
geodist |
两地之间的距离 |
m 表示单位为米km 表示单位为千米mi 表示单位为英里ft 表示单位为英尺 |
geohash |
将二维的经纬度转换为一维的字符串。如果两个字符串越接近,那么则距离越近 |
返回 11 个字符的 geohash 字符串 |
geopos |
获得当前位置(坐标值) |
|
georadius |
以给定的经纬度为中心, 找出某一半径内的元素 |
|
georadiusbymember |
以给定的经纬度为中心, 找出某一半径内的元素 |
# 添加北京和上海的地理位置信息
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
# 获取北京位置
geopos china:city beijing
# 计算北京上海的直线距离
127.0.0.1:6379> geodist china:city beijing shanghai km
# 以 120,40 为中心,搜索 1500km 范围内的城市
127.0.0.1:6379> georadius china:city 120 40 1500 km
# 搜索位于指定位置的其他元素
127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
2.2 Hyperloglog(基数统计)
2.8.9 版本中新加入的数据类型,主要用来做 基数统计 的算法,适合于在输入元素的数量或体积较大时,计算基数所需空间总是固定且小额的。每个键只需要 12kb 内存,就能存下
个不同元素。HyperLogLog 只会根据输入元素来计算基数,而不会存储输入元素的本身,主要有三个命令:
命令 |
说明 |
---|---|
pfadd |
创建一组元素 |
pfcount |
统计元素基数数量 |
pfmerge |
整合两组元素 |
# 创建第一组元素
127.0.0.1:6379> pfadd key1 a b c b c d e
# 统计 key1 元素的基数数量
127.0.0.1:6379> pfcount key1
# 创建第二组元素
127.0.0.1:6379> pfadd key2 4 2 3 2 1 5
# 合并第一二组元素
127.0.0.1:6379> pfmerge mergekey key1 key2
# 查看并集基数数量
127.0.0.1:6379> pfcount mergekey
2.3 Bitmap(位图)
Bitmap(位图) 是通过一个 bit
来表示某个元素对应的值或状态,其中 key
是对应元素本身,常用于用户签到、统计活跃用户等场景,常用相关命令有:
命令 |
说明 |
---|---|
setbit |
设置位图值 |
getbit |
获取位图值 |
bitcount |
统计位图值为 1 的值个数 |
# 设置一周的签到次数
127.0.0.1:6379> setbit sign 1 1
127.0.0.1:6379> setbit sign 2 1
127.0.0.1:6379> setbit sign 3 1
127.0.0.1:6379> setbit sign 4 1
127.0.0.1:6379> setbit sign 5 1
127.0.0.1:6379> setbit sign 6 0
127.0.0.1:6379> setbit sign 7 0
# 获取周 5 的签到情况
127.0.0.1:6379> getbit sign 5
# 统计是否全勤
127.0.0.1:6379> bitcount sign
- iOS如何实现多个环境一次打包
- 从原理到策略算法再到架构产品看推荐系统 | 附Spark实践案例
- MobX 在 React Native开发中的应用
- RCTEventEmitter使用
- Google V8 引擎
- 揭秘前端字符的戏精之路
- 跨语言嵌入模型的调查
- React Native如何消除启动时白屏
- 如何在Python中将TimeDistributed层用于Long Short-Term Memory Networks
- react native 调用原生UI组件
- Android侧滑删除另一种实现,SwipeListView补充
- React Native调用原生组件
- React Native调用原生UI组件
- js不好学并不是因为它难,而是因为它容易混淆
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Hystrix仪表盘
- Centos7 Nginx的SSL证书安装
- 算法集锦(11)| 自动驾驶 | 基于HOG和SVM的车辆识别算法
- 剑指offer(一):找出数组中重复的数字
- 剑指offer(二):不修改数组找出重复的数字
- 漫画:什么是树状数组?
- poiAndEasyExcel学习(五)
- 两分钟真能搞懂桶排序
- SpringMVC文件上传下载
- 学弟不懂原码反码补码,气的我给女朋友讲了一夜
- 使用 HanLP 统计二元语法中的频次
- 算法集锦(13)|自然语言处理| Python代码的语义搜索引擎创建
- 特征锦囊:彻底了解一下WOE和IV
- Nginx专辑|05 -如何使用Nginx配置正向代理
- 详解 SIGHAN05 的目录结构