千家信息网

redis中的三种特殊数据类型

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇内容主要讲解"redis中的三种特殊数据类型",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"redis中的三种特殊数据类型"吧!redis 三种特殊的数
千家信息网最后更新 2025年02月03日redis中的三种特殊数据类型

本篇内容主要讲解"redis中的三种特殊数据类型",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"redis中的三种特殊数据类型"吧!

redis 三种特殊的数据类型

  • Geospatial 地理位置

  • Hyperloglog 基数统计

  • Bitmap 位图场景

Geospatial 地理位置

redis 3.2 版本就推出了 Geospatial

官方文档上可以详细的看到用法:

https://www.redis.net.cn/order/3685.html

Geospatial 可以使用在如下场景:

  • 附近的人

  • 打车计算距离

  • 朋友定位

  • 等一系列跟定位有关的场景

Geospatial 只有 六个命令

  • GEOADD

  • GEODIST

  • GEOHASH

  • GEOPOS

  • GEORADIUS

  • GEORADIUSBYMEMBER

GEOADD

添加地理位置

  • 有效的经度从-180度到180度。

  • 有效的纬度从-85.05112878度到85.05112878度。

当坐标位置超出上述指定范围时,该命令将会返回一个错误。

  • GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]

添加经纬度,城市名

127.0.0.1:6379> GEOADD city 113.087559 28.251818 changsha(integer) 1127.0.0.1:6379> GEOADD city 114.064552 22.548457 shenzhen(integer) 1127.0.0.1:6379> GEOADD city 104.087045 30.666416 chengdu(integer) 1127.0.0.1:6379> GEOADD city 118.802422 32.064653 nanjing(integer) 1127.0.0.1:6379> GEOADD city 106.558434 29.568996 chongqing(integer) 1127.0.0.1:6379> GEOADD city 121.463615 31.195908 shanghai(integer) 1127.0.0.1:6379> GEOADD city 117.208093 39.091103 tianjin(integer) 1

GEOPOS

  • GEOPOS key member [member ...]

获取指定城市的经纬度信息

127.0.0.1:6379> GEOPOS city changsha1) 1) "113.08755666017532349"   2) "28.25181827470789386"127.0.0.1:6379> GEOPOS city tianjin1) 1) "117.20809489488601685"   2) "39.0911021322545551"

GEODIST

  • GEODIST key member1 member2 [m|km|ft|mi]

其中有如下 4 个单位:

m :米

km:公里

ft:英尺

mi:英里

获取两个城市之间的距离

127.0.0.1:6379> GEODIST city changsha tianjin"1264101.6876"127.0.0.1:6379> GEODIST city changsha tianjin km"1264.1017"127.0.0.1:6379> GEODIST city changsha shenzhen km"641.9034"

GEOHASH

  • GEOHASH key member [member ...]

返回一个或者多个GEOHASH 表示的元素, 返回 11 个字符 Geohash 字符串

127.0.0.1:6379> GEOHASH city changsha1) "wt02tr5fg00"127.0.0.1:6379> GEOHASH city changsha beijing1) "wt02tr5fg00"2) (nil)127.0.0.1:6379> GEOHASH city changsha beijing tianjin chongqing1) "wt02tr5fg00"2) (nil)3) "wwgq7hk64t0"4) "wm7b0yc7zk0"

GEORADIUS

  • GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOR

指定经纬度作为原点,指定半径,查询在指定范围内的城市,这些城市都是在我们自己的集合里面

127.0.0.1:6379> GEORADIUS city 110 30 500 m(empty array)127.0.0.1:6379> GEORADIUS city 110 30 500 km1) "chongqing"2) "changsha"127.0.0.1:6379> GEORADIUS city 110 30 1000 km1) "chongqing"2) "chengdu"3) "shenzhen"4) "changsha"5) "nanjing"127.0.0.1:6379> GEORADIUS city 110 30 700 km withcoord1) 1) "chongqing"   2) 1) "106.55843228101730347"      2) "29.56899626404301529"2) 1) "chengdu"   2) 1) "104.08704489469528198"      2) "30.6664164635846177"3) 1) "changsha"   2) 1) "113.08755666017532349"      2) "28.25181827470789386"127.0.0.1:6379> GEORADIUS city 110 30 700 km withdist1) 1) "chongqing"   2) "335.6530"2) 1) "chengdu"   2) "572.3911"3) 1) "changsha"   2) "357.4711"127.0.0.1:6379> GEORADIUS city 110 30 700 km withhash1) 1) "chongqing"   2) (integer) 40260594356999312) 1) "chengdu"   2) (integer) 40261378317985063) 1) "changsha"   2) (integer) 4050903792284309

GEORADIUSBYMEMBER

  • GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]

找出位于指定元素周围的城市

127.0.0.1:6379> GEORADIUSBYMEMBER city tianjin 1000 km1) "nanjing"2) "tianjin"3) "shanghai"127.0.0.1:6379> GEORADIUSBYMEMBER city tianjin 500 km1) "tianjin"127.0.0.1:6379> GEORADIUSBYMEMBER city tianjin 5000 km1) "chongqing"2) "chengdu"3) "shenzhen"4) "changsha"5) "shanghai"6) "nanjing"7) "tianjin"

Geospatial 底层的原理就是使用 Zset 有序集合来实现的,我们可以使用 Zset 有序集合的命令来操作 Geo ,咱们是用 Zset 的指令来感受一波

127.0.0.1:6379> ZRANGE city 0 -11) "chongqing"2) "chengdu"3) "shenzhen"4) "changsha"5) "shanghai"6) "nanjing"7) "tianjin"127.0.0.1:6379> ZCARD city(integer) 7

Hyperloglog 基数统计

基数是个啥?

基数,就是不重复的数,例如:

A = {1,2,3,4,5}

B = {2,3,4,5,6}

那么 A 和 B 的取并集的基数就是 6

简介

Hyperloglog 是 redis 2.8.9 版本开始有的这种数据结构

redis hyperloglog 基数统计也是一种算法

例如有这样的应用场景:

  • 网页访问人数统计,同一个用户多次访问网站,也是只算作 1

    传统的方式是使用 set 集合的方式来保存 id,统计 set 里面 id 的个数,来计算人数

    这种方式也没有问题,但是若数据量很大的时候,就会非常麻烦,因为我们拿 id 是没有用的,我们只需要计数而已

优点

Hyperloglog 占用的内存空间是固定的,2^16 次方,只需要占用 12 KB 内存,从内存的角度来技术选型,Hyperloglog 是首选哦

  • PFADD key element [element ...]

向 Hyperloglog 中添加一个或者多个元素

  • PFMERGE destkey sourcekey [sourcekey ...]

将多个 Hyperloglog 取并集,得到一个结果 Hyperloglog ,里面的数据是不会重复的

127.0.0.1:6379> PFADD myhash  1 2 3 4 5 6 7 8(integer) 1127.0.0.1:6379> pfadd myhash3 3 4 5 6 7 8 9 0 88 99(integer) 1127.0.0.1:6379> PFMERGE res myhash myhash3OK127.0.0.1:6379> PFCOUNT res(integer) 12127.0.0.1:6379> PFCOUNT myhash(integer) 8127.0.0.1:6379> PFCOUNT myhash3(integer) 10

Bitmaps 位图场景

Bitmaps 位图,位存储

一般用于,统计用户信息,活跃,不活跃,

登录,不登录

打卡,不打卡 等等,两种状态

Bitmaps 位图,也是一种数据结构,是操作二进制的方式来进行记录的,只有 0 和 1 两种状态

例如我们举个例子,来记录着一周每天的心情,1 是开心,0 是沮丧

  • SETBIT key offset value

设置 bit 位的值

  • GETBIT key offset

获取 bit 位的值

127.0.0.1:6379> SETBIT week 0 1(integer) 0127.0.0.1:6379> SETBIT week 1  1(integer) 0127.0.0.1:6379> SETBIT week 2 1(integer) 0127.0.0.1:6379> SETBIT week 3 0(integer) 0127.0.0.1:6379> SETBIT week 4 0(integer) 0127.0.0.1:6379> SETBIT week 5 1(integer) 0127.0.0.1:6379> SETBIT week 6 1(integer) 0127.0.0.1:6379> GETBIT week 6(integer) 1127.0.0.1:6379> GETBIT week 5(integer) 1

到此,相信大家对"redis中的三种特殊数据类型"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

数据 城市 基数 统计 场景 特殊 类型 位图 位置 方式 元素 内存 命令 地理 地理位置 多个 就是 经纬 经纬度 有序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安ibm服务器 晋城亚羽网络技术服务有限公司 软件开发是个怎样的过程 连云港江苏大容量服务器公司 固原软件开发公司电话 沙坪坝区常规软件开发流程特点 天津河东区网络安全竞赛总决赛 互联网网络技术咨询口碑推荐 工程数据库由几部分组成 学软件开发在哪里学好 净化网络安全图片 芯片行业内的通信软件开发 军用计算机网络安全系统 长沙爱站互联网科技有限公司 market数据库表 淄川办公自动化软件开发 网络安全顾问百科 自动售货机软件开发系统 华创互联网科技有限公司 如何管理dns服务器 杭州喆彦网络技术有限公司 网络安全对我国国防教育 数据库dba都干什么 应用互联网 科技工作总结 国标数据库改造 服务器可以做路由吗 软件开发教程书 声光电道德与法治展馆软件开发 成都琅启网络技术有限公司 青浦区方便软件开发费用是多少
0