首页 > 数据库 >你说啥?Redis中除了五大数据类型,还有特殊数据类型!

你说啥?Redis中除了五大数据类型,还有特殊数据类型!

时间:2023-05-23 12:06:29浏览次数:44  
标签:位置 数据类型 元素 Redis 指令 key 格式 所示 五大

一、geospatial地理位置

1.1> 概述

可以用于基于地理位置的业务场景。比如:查询两地之间的距离,方圆几里存在的地理位置等等。

Redis提供了geospatial相关的8个指令,操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_redis

1.2> GEOADD(v3.2.0)

指令格式:GEOADD key longitude latitude member [longitude latitude member ...]

指令含义:将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。

这些数据将会存储到Zset,这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。

该命令以采用标准格式的参数x,y,所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。

具体的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下:

  • 有效的经度-180度到180度
  • 有效的纬度-85.05112878度到85.05112878度。
  • 当坐标位置超出上述指定范围时,该命令将会返回一个错误。

操作如下图所示:(经纬度查询 jingweidu.bmcx.com):

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_redis_02

1.3> GEODIST(v3.2.0)

指令格式:GEODIST key member1 member2 [unit]

指令含义:返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。

指定单位的参数unit必须是以下单位的其中一个:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_redis_03

如果用户没有显式地指定单位参数, 那么GEODIST默认使用作为单位。

GEODIST命令在计算距离时会假设地球为完美的球形,在极限情况下,这一假设最大会造成0.5%的误差。

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_后端_04

1.4> GEOHASH(v3.2.0)

指令格式:GEOHASH key member [member ...]

指令含义:返回一个或多个位置元素的Geohash表示。通常使用表示位置的元素使用不同的技术,使用Geohash位置52点整数编码。由于编码和解码过程中所使用的初始最小和最大坐标不同,编码的编码也不同于标准。

该命令将返回11个字符Geohash字符串,所以没有精度Geohash。返回的Geohash具有以下特性:

  • 他们可以缩短从右边的字符。它将失去精度,但仍将指向同一地区。
  • 它可以在geohash.org网站使用,网址 geohash.org/。查询例子:geohash.org/sqdtr74hyu0

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_字符串_05

1.5> GEOPOS(v3.2.0)

指令格式:GEOPOS key member [member ...]

指令含义:从key里返回所有给定位置元素的位置(经度和纬度)

因为GEOPOS命令接受可变数量的位置元素作为输入,所以即使用户只给定了一个位置元素,命令也会返回数组回复。

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_后端_06

1.6> GEORADIUS(v3.2.0)

指令格式:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

指令含义:以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素。范围可以使用以下其中一个单位:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_后端_07

在给定以下可选项时,命令会返回额外的信息:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_指令格式_08

命令默认返回未排序的位置元素。通过以下2个参数,用户可以指定被返回位置元素的排序方式:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_字符串_09

在默认情况下,GEORADIUS命令会返回所有匹配的位置元素。虽然用户可以使用COUNT <count>选项去获取前N个匹配元素,但是因为命令在内部可能会需要对所有被匹配的元素进行处理, 所以在对一个非常大的区域进行搜索时,即使只使用COUNT选项去获取少量元素,命令的执行速度也可能会非常慢。 但是从另一方面来说,使用COUNT选项去减少需要返回的元素数量,对于减少带宽来说仍然是非常有用的。

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_后端_10

1.7> GEORADIUSBYMEMBER(v3.2.0)

指令格式:GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

指令含义:这个命令和GEORADIUS命令一样,都可以找出位于指定范围内的元素,但是GEORADIUSBYMEMBER的中心点是由给定的位置元素决定的,而不是像GEORADIUS那样,使用输入的经度和纬度来决定中心点指定成员的位置被用作查询的中心。

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_算法_11

二、hyperloglog预估集合的基数

2.1> 概述

hyperloglog常用的使用场景,一般是非精准性的统计计数。比如:统计访问网站的UV数,商品评论数或点击量等等。

hyperloglog是一种用于计算唯一事物的概率数据结构(从技术上讲,这称为预估集合的基数)

它占用的空间很小,只需要12KB的内存,可以存储2^64不同的元素数量。但是它的统计是有小于1%的误差,所以并不适合精准统计使用场景

Redis提供了hyperloglog相关的3个指令,如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_redis_12

2.2> PFADD(v2.8.9)

官方文档:www.redis.cn/commands/pf…

指令格式:PFADD key element [element ...]

指令含义:将element集合存储到以key为变量名的HyperLogLog结构中.

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_字符串_13

2.3> PFCOUNT(v2.8.9)

官方文档:www.redis.cn/commands/pf…

指令格式:PFCOUNT key [key ...]

指令含义:获得指定key为变量名的HyperLogLog结构中中元素的个数

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_redis_14

2.4> PFMERGE(v2.8.9)

官方文档:www.redis.cn/commands/pf…

指令格式:PFMERGE destkey sourcekey [sourcekey ...]

指令含义:将多个HyperLogLog合并(merge)为一个新的HyperLogLog,合并后的HyperLogLog的基数接近于所有输入HyperLogLog的可见集合(observed set)的并集。合并得出的HyperLogLog会被储存在目标变量(第一个参数)里面,如果该键并不存在,那么命令在执行之前, 会先为该键创建一个空的

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_redis_15

三、bitmap位图

3.1> 概述

我们可以利用bitmap指定其二进制位是01,来实现类似“”or“”的相关操作。它的特点也是占用内存空间特别的小。比如,我们要记录每个用户当天是否活跃(即:是否登录过系统),那么如果我们要记录他一年的是否登录的记录,只需要365个bit即可存储。

Redis提供了位图相关的7个指令,我们只针对其中常用的3个进行操作演示。如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_指令格式_16

3.2> SETBIT(v2.6.0)

官方文档:www.redis.cn/commands/se…

指令格式:SETBIT key offset value

指令含义:设置或者清空keyvalue(字符串)在offset处的bit值。那个位置的bit要么被设置,要么被清空,这个由value(只能是0或者1)来决定。当key不存在的时候,就创建一个新的字符串value。要确保这个字符串大到在offset处有bit值。参数offset需要大于等于0,并且小于2^32(限制bitmap大小为512MB)。当key对应的字符串增大的时候,新增的部分bit值都是设置为0

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_算法_17

3.3> GETBIT(v2.2.0)

指令格式:GETBIT key offset

指令含义:获取key中某个offset位置上的值

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_字符串_18

3.4> BITCOUNT(v2.6.0)

官方文档:www.redis.cn/commands/pf…

指令格式:BITCOUNT key [start end]

指令含义:获取key中从startend范围内1的个数

操作如下图所示:

你说啥?Redis中除了五大数据类型,还有特殊数据类型!_后端_19

今天的文章内容就这些了

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的点赞&分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯”(^o^)/~ 「干货分享,每周更新」

标签:位置,数据类型,元素,Redis,指令,key,格式,所示,五大
From: https://blog.51cto.com/u_15003301/6330466

相关文章

  • redis 02:Redis的持久化
    文章目录一、Redis的持久化机制二、Redis持久化2.1RDB快照(snapshot)2.2AOF(append-onlyfile)三、Redis4.0混合持久化四、redis启动加载持久化五、小总结:六、性能建议(这里只针对单机版redis持久化做性能建议):以下参考了图灵学院的学习总结,图灵学院挺好的,值得报班!一、Redis的持久......
  • redis专题六:redis 删除策略、淘汰策略、数据库与缓存数据一致性、事物、发布订阅
    文章目录一、删除策略二、淘汰策略三、数据库与缓存数据一致性四、redis事务五、redis发布订阅一、删除策略redis使用:惰性删除+定期删除1、定时删除–>以CPU内存换redis内存定时删除过期的缓存值2、惰性删除–>以redis内存换CPU内存查询到该key时如果过期,删除该过期的缓存值......
  • SpringBoot声明连接多个redis数据源配置模版
    在实际开发中,我们可能会用到2个不同的redis数据源;如何连接查询详情:文章目录一、依赖二、配置文件三、config类配置四、序列化问题五、封装工具类一、依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-dat......
  • Redis常见场景问题和解决方案
    缓存穿透(查不到数据)概述当用户想要查询一个数据,发现Redis中不存在,也就是所谓的缓存没有命中,于是这个数据请求就会打到数据库中。结果数据库中也不存在这条数据,那么结果就是什么都没查询出来。那么当用户很多时候的查询,缓存中都没有数据,请求直接打到数据库中,这样就会给数据库造成很......
  • Redis主从复制实现与原理
    一、概述主从复制,是指将一台Redis服务器的数据复制到其他的Redis服务器。前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower);数据是从主节点复制到从节点的。其中,主节点负责写数据(当然有读的权限),从节点负责读数据(它没有写数据的权限)。默认的配置下,每个Redis都是主节点。一......
  • 如何利用Redis进行事务处理呢?
    一、概述事务的本质,其实就是一组命令的集合。一个事务中的所有命令都会按照命令的顺序去执行,而中间不会被其他命令加塞。Redis提供了事务相关的5个指令,分别是:DISCARD、EXEC、MULTI、UNWATCH和WATCH。如下图所示:下面我们就对Redis的事务操作一一的进行介绍。二、MULTI(v1.2.0)指令格式......
  • redis,缓存雪崩,缓存穿透,缓存更新,缓存降级,缓存预热等问题
    一、缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成......
  • 【面试系列6】Redis
    redisredis是什么?内存数据库,一切数据操作都在内存中进行,所以速度很快,常被用来做缓存,消息队列,分布式锁。具有高效的数据结构,String、list、hash、set、zset,bitmaps、hyperloglog、geo、stream。redis还支持事务、持久化、多种集群方式、发布订阅模型、内存淘汰机制等等。re......
  • 数据类型——基本数据类型
    基本数据类型整数字符       ——char     (1个字节)短整型   ——short(2个字节)整型      ——int (取决于编译器(cpu)通常是一个字,4个字节)长整型   ——long(取决于编译器(cpu),32位是4个字节,64位是8个字节)longlong(C99)浮点数......
  • < Python全景系列-2 > Python数据类型大盘点
    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。Python作为一门强大且灵活的编程语言,拥有丰富......