Redis中的三种特殊类型
创始人
2025-07-03 18:11:07
0

前言

Redis中的这三个数据类型在很多开源的项目中都有使用到,除了日常开发中使用Java去实现某些功能外,还可以通过这些特殊的数据类型进行实现,本文也简单介绍了这三种数据类型使用的场景,可以帮助读者在开发中实现功能提供新的思路。

一、Geospatial(地理位置)

Geospatial类型Redis官方文档-Redis geospatial | Redis

Redis中的Geospatial是一个用于地理空间数据的功能模块,它可以存储和查询地理坐标、半径、矩形、多边形等地理空间对象。通过使用Geospatial,您可以对地理空间对象进行各种操作,例如计算两个地点之间的距离、查找位于给定半径内的地点、查找位于给定矩形或多边形内的地点等。

基础命令

  • GEOADD adds a location to a given geospatial index (note that longitude comes before latitude with this command).
  • GEOSEARCH returns locations with a given radius or a bounding box.

命令演示

1. 添加地理位置

Geospatial规则: 两级无法直接添加,我们一般会下载城市数据,直接通过java序一次性导入!

有效的经度从-180度到180度. 有效的纬度从-85.05112878度到85.05112878度。

参数:key 值:经度 纬度 名称

127.0.0.1:6379> GEOADD china:city 116.40 39.90 beijin
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> GEOADD china:city 106.50 29.53 chognqin 114.05 22.52 shenzheng
(integer) 2
127.0.0.1:6379> GEOADD china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2

2. 获取城市地理位置

127.0.0.1:6379> GEOPOS china:city beijin #获取城市的经度和纬度
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
127.0.0.1:6379> GEOPOS china:city shanghai
1) 1) "121.47000163793563843"
   2) "31.22999903975783553"

3. 计算两个城市之间的距离

127.0.0.1:6379> GEODIST china:city beijin shanghai
"1067378.7564"
127.0.0.1:6379> GEODIST china:city beijin shanghai km #单位有m、km、mi、ft
"1067.3788"

4. 以给定的经纬度为中心,找出某一半径内的元素

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km #经度110,纬度30为中心,寻找半径1000km以内的城市
1) "chognqin"
2) "xian"
3) "shenzheng"
4) "hangzhou"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km count 2 #限制查询的数量
1) "chognqin"
2) "xian"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord #显示经度纬度
1) 1) "chognqin"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) 1) "108.96000176668167114"
      2) "34.25999964418929977"
3) 1) "shenzheng"
   2) 1) "114.04999762773513794"
      2) "22.5200000879503861"
4) 1) "hangzhou"
   2) 1) "120.1600000262260437"
      2) "30.2400003229490224"

5. 以城市为中心寻找其它城市

127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijin 1000 km
1) "beijin"
2) "xian"

6. 将经纬度转化为字符串

127.0.0.1:6379> GEOHASH china:city beijin
1) "wx4fbxxfke0"

7. 使用Zset的命令来操作Geospatial

==Geospatial的底层实现原理就是Zset,可以用Zset命令来操作Geospatial==

127.0.0.1:6379> ZRANGE china:city 0 -1
1) "chognqin"
2) "xian"
3) "shenzheng"
4) "hangzhou"
5) "shanghai"
6) "beijin"
127.0.0.1:6379> ZREM china:city xian
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "chognqin"
2) "shenzheng"
3) "hangzhou"
4) "shanghai"
5) "beijin"

二、 HyperLogLog(基数统计)

HyperLogLog类型Redis官方文档-HyperLogLog | Redis

HyperLogLog常用于大数据量的统计,比如页面访问量统计或者用户访问量统计。其实现最多使用 12 KB,并提供 0.81% 的标准误差。

什么是基数?

基数在数学中是集合论中刻画任意集合大小的一个概念。它表示一个集合中不同元素的个数。例如,集合{1, 2, 3, 3, 4, 5, 5, 6, 6, 6}中有9个元素,但其中不重复的元素只有1、2、3、4、5、6,所以它的基数是6。

基础命令

  • PFADD adds an item to a HyperLogLog.
  • PFCOUNT returns an estimate of the number of items in the set.
  • PFMERGE combines two or more HyperLogLogs into one.

命令演示

1. 创建元素,并统计其中的个数

127.0.0.1:6379> PFADD mykey a b c d e f g h i j #创建一组元素
(integer) 1
127.0.0.1:6379> PFCOUNT mykey #统计基数数量
(integer) 10
127.0.0.1:6379> PFADD mykey2 i jz x c v b n m 
(integer) 1
127.0.0.1:6379> PFCOUNT mykey2
(integer) 8

2. 合并元素

127.0.0.1:6379> PFMERGE mykey3 mykey mykey2 #mykey 和mykey2合并为mykey3(并集)
OK
127.0.0.1:6379> PFCOUNT mykey3
(integer) 15

三、BitMaps

BitMaps类型Redis官方文档-Redis bitmaps | Redis

Redis中的BitMaps是一种基于位图的数据结构,它允许用户将位图存储为字符串,并对其进行位操作。

基础命令

  • SETBIT sets a bit at the provided offset to ==0 or 1==.
  • GETBIT returns the value of a bit at a given offset.
  • BITOP lets you perform bitwise operations against one or more strings.

命令演示

1. 使用BitMaps来记录状态

127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0

2. 查看状态

127.0.0.1:6379> GETBIT sign 1
(integer) 0
127.0.0.1:6379> GETBIT sign 3
(integer) 1

3. 统计状态

127.0.0.1:6379> BITCOUNT sign
(integer) 4


相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...