服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - Redis中的三种特殊类型

Redis中的三种特殊类型

2023-10-13 09:11未知服务器之家 Redis

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

前言

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


延伸 · 阅读

精彩推荐
  • RedisRedis的配置、启动、操作和关闭方法

    Redis的配置、启动、操作和关闭方法

    今天小编就为大家分享一篇Redis的配置、启动、操作和关闭方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    大道化简5312019-11-14
  • Redisredis中如何使用lua脚本让你的灵活性提高5个逼格详解

    redis中如何使用lua脚本让你的灵活性提高5个逼格详解

    这篇文章主要给大家介绍了关于redis中如何使用lua脚本让你的灵活性提高5个逼格的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具...

    一线码农5812019-11-18
  • RedisRedis 事务知识点相关总结

    Redis 事务知识点相关总结

    这篇文章主要介绍了Redis 事务相关总结,帮助大家更好的理解和学习使用Redis,感兴趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis如何实现数据库读写分离详解

    Redis如何实现数据库读写分离详解

    Redis的主从架构,能帮助我们实现读多,写少的情况,下面这篇文章主要给大家介绍了关于Redis如何实现数据库读写分离的相关资料,文中通过示例代码介绍...

    罗兵漂流记6092019-11-11
  • RedisRedis全量复制与部分复制示例详解

    Redis全量复制与部分复制示例详解

    这篇文章主要给大家介绍了关于Redis全量复制与部分复制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis爬虫具有一定的参考学习...

    豆子先生5052019-11-27
  • Redisredis实现排行榜功能

    redis实现排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用来实现排行榜功能,本文就来简单的介绍一下如何使用,具有一定的参考价值,感兴趣的小伙伴们...

    乘月归5022021-08-05
  • Redis详解Redis复制原理

    详解Redis复制原理

    与大多数db一样,Redis也提供了复制机制,以满足故障恢复和负载均衡等需求。复制也是Redis高可用的基础,哨兵和集群都是建立在复制基础上实现高可用的...

    李留广10222021-08-09
  • Redisredis 交集、并集、差集的具体使用

    redis 交集、并集、差集的具体使用

    这篇文章主要介绍了redis 交集、并集、差集的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    xiaojin21cen10152021-07-27