IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis(四)------三种特殊数据类型 -> 正文阅读

[大数据]Redis(四)------三种特殊数据类型

Redis(四)------三种特殊数据类型

7、三种特殊数据类型

7.1 Geospatial(地理位置)

  • 使用经纬度定位地理坐标,并用一个有序集合Zset保存,所以,Zset的命令也可以使用
  • 有效经纬度
    • 经度:-180度到180度
    • 纬度:-85.05112878度到85.05112878度

7.1.1 基本用法

命令描述
GeoAdd key longitud(经度) latitude(维度) member…将具体经纬度的坐标存入一个有序集合
Geopos key member1 member2…获取集合中一个/多个成员的坐标
Geodist key member1 member2 距离单位返回给定两个位置之间的距离,默认单位为米
Georadius key longitudu(经度) latitude(纬度) 半径最大距离 单位(m/km/mi/ft) [with位置元素]以给定经纬度为中心点,返回集合包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素
Georadiusbymember key member 半径最大距离…以已有成员作为中心点,返回集合包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素
Geohash key member1 member2…返回一个/多个位置元素的Geohash表示,使用Geohash位置52点整数编码(11个字符)
  • Georadius参数:
    • withcoord:显示坐标
    • withdist:显示距离,单位和半径单位相同
    • count n:只显示前n个,距离递增排序

7.1.2 Geoadd

  • 坐标存储到Zset中,查看集合的数据可以用Zset命令来查看
  • 当坐标位置超出上述指定范围时,该命令将会返回一个错误
  • 南北两级无法直接添加,一般会下载城市数据,通过java程序一次性导入
---------- getadd ---------- 添加地理位置 ----------

127.0.0.1:6379> GEOADD china:city 116.41667 39.91667 beijing
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.43333 34.50000 shanghai
(integer) 1
127.0.0.1:6379> GEOADD china:city 117.20000 39.13333 tianjing
(integer) 1
127.0.0.1:6379> GEOADD china:city 118.78333 32.05000 jiangsu
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "jiangsu"
2) "shanghai"
3) "tianjing"
4) "beijing"

7.1.3 Geopos

---------- Geopos ---------- 获取当前定位(经纬度) ----------
127.0.0.1:6379> GEOPOS china:city jiangsu
1) 1) "118.78332942724227905"
   2) "32.04999907785209956"
   
# 可获取多个
127.0.0.1:6379> GEOPOS china:city jiangsu shanghai
1) 1) "118.78332942724227905"
   2) "32.04999907785209956"
2) 1) "121.4333304762840271"
   2) "34.49999971716130887"

7.1.4 Geodist

  • 指定单位的参数必须是以下单位的其中一个:
    • m :米
    • km :千米
    • mi :英里
    • ft :英尺
---------- Geodist ---------- 获取两位置间距离 ----------
# 查看江苏到北京的直线距离
127.0.0.1:6379> GEODIST china:city jiangsu beijing km
"900.4314"

7.1.5 Georadius

  • Georadius参数:
    • withcoord:显示坐标
    • withdist:显示距离,单位和半径单位相同
    • count n:只显示前n个,距离递增排序
---------- Georadius ---------- 获取距该位置(经纬度)半径为n的位置 ----------
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km
1) "chongqing"
2) "shenzhen"
3) "hangzhou"
4) "jiangsu"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
1) "chongqing"

# withdist 显示到中间距离的位置  withcoord 显示他人的定位信息(坐标)
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord withdist
1) 1) "chongqing"
   2) "346.0548"
   3) 1) "106.4500012993812561"
      2) "29.56666939001875249"
2) 1) "shenzhen"
   2) "915.6424"
   3) 1) "114.06667023897171021"
      2) "22.61666928352524764"
3) 1) "hangzhou"
   2) "981.3098"
   3) 1) "120.20000249147415161"
      2) "30.2666706589875858"
4) 1) "jiangsu"
   2) "867.3741"
   3) 1) "118.78332942724227905"
      2) "32.04999907785209956"
      
# count n 在集合展示n个 距离递增排序
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord withdist count 1
1) 1) "chongqing"
   2) "346.0548"
   3) 1) "106.4500012993812561"
      2) "29.56666939001875249"

7.1.6 Georadiusbymember

  • Georadius参数:
    • withcoord:显示坐标
    • withdist:显示距离,单位和半径单位相同
    • count n:只显示前n个,距离递增排序
---------- Georadiusbymember ---------- 获取距离该成员半径为n的位置 ----------
127.0.0.1:6379> GEORADIUSBYMEMBER china:city jiangsu 1000 km
1) "jiangsu"
2) "shanghai"
3) "tianjing"
4) "beijing"
5) "hangzhou"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city jiangsu 500 km
1) "jiangsu"
2) "shanghai"
3) "hangzhou"

7.1.7 Geohash

---------- Geohash ---------- 返回元素 的hash表示 ---------- 
127.0.0.1:6379> GEOHASH china:city jiangsu shanghai hangzhou
1) "wtsqqfx2u00"
2) "wwnk72911d0"
3) "wtmkpjyuph0"

---------- 可以用Zset命令操作Geo ----------
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "chongqing"
2) "shenzhen"
3) "hangzhou"
4) "jiangsu"
5) "shanghai"
6) "tianjing"
7) "beijing"
127.0.0.1:6379> ZRANGEBYLEX china:city - +
1) "chongqing"
2) "shenzhen"
3) "hangzhou"
4) "jiangsu"
5) "shanghai"
6) "tianjing"
7) "beijing"
127.0.0.1:6379> ZREM china:city jiangsu
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "chongqing"
2) "shenzhen"
3) "hangzhou"
4) "shanghai"
5) "tianjing"
6) "beijing"

7.1.8 Geospatial应用场景

  • 附近人
  • 地图位置

7.2 Hyperloglog(基数)

  • Redis Hyperloglog是用来做基数统计时的算法。
  • 优点:输入元素的数量或体积非常大时,计算基数所需的空间总是固定的,并且很小的
  • 花费12KB内存,可以计算接近2^64个不同元素的基数
  • 因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素
  • 底层使用的是String数据类型

7.2.1 什么是基数

  • 数据集中不重复的元素个数

7.2.2 基本用法

命令描述
PFadd key element1 element2…添加一个/多个元素到Hyperloglog中
PFcount key1 key2…返回给定一个/多个Hyperloglog的基数估算值(所有元素不重复个数)
PFmerge 新key key1 key2…将多个Hyperloglog合并为一个新Hyperloglog,相同的去除
  • 实例
----------PFADD--PFCOUNT---------------------
# 添加元素
127.0.0.1:6379> PFADD myelemx a b c d e f g h i j k
(integer) 1
# hyperloglog底层使用String
127.0.0.1:6379> type myelemx
string
# 估算myelemx的基数
# 包含不存在的key也不会报错 
127.0.0.1:6379> PFCOUNT myelemx a 
(integer) 11
127.0.0.1:6379> PFCOUNT myelemx
(integer) 11

127.0.0.1:6379> pfadd myelems a c d j k m n o p q
(integer) 1
# 估算两个元素中的基数个数 相同的不纳入计算
127.0.0.1:6379> PFCOUNT myelemx myelems
(integer) 16
127.0.0.1:6379> PFCOUNT myelems
(integer) 10
# 其实就是字符串
127.0.0.1:6379> get myelemx
"HYLL\x01\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x80DE\x8cB&\x80@\x89\x88H_\x84@\xfc\x80EV\x94F\xca\x80D<\x848\x80B=\x80K\x83\x80B\xed\x84A\xfc\x8cC\x93\x84C\xf9\x80Bm\x80BZ"

----------------PFMERGE-----------------------
# 合并 相同的去除
127.0.0.1:6379> PFMERGE myelemz myelemx myelemy # 合并myelemx和myelemy 成为myelemz
OK
127.0.0.1:6379> PFCOUNT myelemz # 估算基数
(integer) 17
  • 允许容错的情况下,可以使用Hyperloglog
  • 不允许容错的情况下,用Set或自己的数据类型

7.2.3 Hyperloglog应用场景

  • 网站的UV,一个人访问一个网站多次,仍然算作一个人

7.3 BitMaps(位图)

  • 使用位存储,信息状态只有0和1
  • BitMaps是一串连续的二进制数字,每一位所在的位置位偏移(offset),再BitMaps上执行

7.3.1 基本用法

命令描述
SETBIT key offset value为指定key的第offset位设置值
GETBIT key offset获取指定第offset位的值
BITcount key n1 n2统计字符串被设置为1的个数,可以按[n1,n2]区间进行统计
BITtop operration 新key key1 key2…对一个/多个保存二进制字符串key进行位元操作。并将结果保存到新key中
BITpos key bit n1 n2返回该字符串中第一个设置位1或0的位数,[n1,n2]区间只能安字节,不能按位
  • 实例
------------setbit--getbit--------------
# 设置sign的第0位为 1 
127.0.0.1:6379> setbit sign 0 1 
(integer) 0
# 设置sign的第2位为 1  不设置的默认为0
127.0.0.1:6379> setbit sign 2 1 
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> type sign
string
# 获取第2位的数值
127.0.0.1:6379> getbit sign 2 
(integer) 1
127.0.0.1:6379> getbit sign 3
(integer) 1
# 未设置默认是0
127.0.0.1:6379> getbit sign 4 
(integer) 0

-----------bitcount----------------------------
# 统计这周的打卡记录,就可以看到是否有全勤
# 统计sign中为1的位数
127.0.0.1:6379> BITCOUNT sign 
(integer) 4
127.0.0.1:6379> get sign
"\xb4"

7.3.2 BitMaps应用场景

  • 打卡记录
  • 统计数据
  • 有两个相对状态的事务,可以用BitMaps来统计
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:37:48  更:2022-03-24 00:38:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:25:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码