5.1.4 NoSQL数据库

您所在的位置:网站首页 redis的三种特殊类型 5.1.4 NoSQL数据库

5.1.4 NoSQL数据库

2023-10-26 11:35| 来源: 网络整理| 查看: 265

目录

1.Geospatial(地理位置)

2.Hyperloglog(基数统计)

3.BitMaps(位图)

1.Geospatial(地理位置)

使用经纬度定位地理坐标并用一个有序集合zset保存,可以使用Zset命令来操作。Redis 的 Geo 在Redis3.2 版本就推出了! 这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!

命令描述举例geoadd key longitud(经度) latitude(纬度) member [..]

将具体经纬度的坐标存入一个有序集合

 

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

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

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

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

geoadd china:city 116.40 39.90 beijinggeopos key member [member..]获取集合中的一个/多个成员坐标GEOPOS china:city beijing # 获取指定的城市的经度和纬度!geodist key member1 member2 [unit]

返回两个给定位置之间的距离。默认以米作为单位。

 

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

m 表示单位为米。

km 表示单位为千米。

mi 表示单位为英里。

ft 表示单位为英尺。

GEODIST china:city beijing shanghai km # 查看上海到北京的直线距离georadius key longitude latitude radius m|km|mi|ft [WITHCOORD][WITHDIST] [WITHHASH] [COUNT count]

以给定的经纬度为中心, 返回集合包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

 

关于GEORADIUS的参数

通过georadius就可以完成 附近的人功能

withcoord:带上坐标

withdist:带上距离,单位与半径单位相同

COUNT n : 只显示前n个(按距离递增排序)

GEORADIUS china:city 110 30 1000 km # 以110,30 这个经纬度为中心,寻找方圆1000km内的城市

GEORADIUS china:city 110 30 500 km withdist # 显示到中间距离的位置

GEORADIUS china:city 110 30 500 km withdist withcoord count 1 # 筛选出指定的结果!

GEORADIUSBYMEMBER key member radius...功能与GEORADIUS相同,只是中心位置不是具体的经纬度,而是使用结合中已有的成员作为中心点。GEORADIUSBYMEMBER china:city beijing 1000 km # 找出位于指定元素周围的其他元素!geohash key member1 [member2..]返回一个或多个位置元素的Geohash表示。使用Geohash位置52点整数编码。该命令将返回11个字符的Geohash字符串!

geohash china:city beijing chongqi

1) "wx4fbxxfke0"

2) "wm5xzrybty0"

----------------georadius--------------------- 127.0.0.1:6379> GEORADIUS china:city 120 30 500 km withcoord withdist # 查询经纬度(120,30)坐标500km半径内的成员 1) 1) "hangzhou" 2) "29.4151" 3) 1) "120.20000249147415" 2) "30.199999888333501" 2) 1) "shanghai" 2) "205.3611" 3) 1) "121.40000134706497" 2) "31.400000253193539" ------------geohash--------------------------- 127.0.0.1:6379> geohash china:city yichang shanghai # 获取成员经纬坐标的geohash表示 1) "wmrjwbr5250" 2) "wtw6ds0y300" 2.Hyperloglog(基数统计)

什么是基数?

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

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

应用场景:

网页的访问量(UV):一个用户多次访问,也只能算作一个人。

传统实现,存储用户的id,然后每次进行比较。当用户变多之后这种方式及其浪费空间,而我们的目的只是计数,Hyperloglog就能帮助我们利用最小的空间完成。

命令描述PFADD key element1 [elememt2..]添加指定元素到 HyperLogLog 中PFCOUNT key [key]返回给定 HyperLogLog 的基数估算值。PFMERGE destkey sourcekey [sourcekey..]将多个 HyperLogLog 合并为一个 HyperLogLog ----------PFADD--PFCOUNT--------------------- 127.0.0.1:6379> PFADD myelemx a b c d e f g h i j k # 添加元素 (integer) 1 127.0.0.1:6379> type myelemx # hyperloglog底层使用String string 127.0.0.1:6379> PFCOUNT myelemx # 估算myelemx的基数 (integer) 11 127.0.0.1:6379> PFADD myelemy i j k z m c b v p q s (integer) 1 127.0.0.1:6379> PFCOUNT myelemy (integer) 11 ----------------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或者自己的数据类型即可 !

3.BitMaps(位图)

使用位存储,信息状态只有 0 和 1

Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR,NOT以及其它位操作。

应用场景

签到统计(到了1,未到0)、状态统计(每天打卡,打卡了1,未打卡0)

命令描述setbit key offset value为指定key的offset位设置值getbit key offset获取offset位的值bitcount key [start end]统计字符串被设置为1的bit数,也可以指定统计范围按字节bitop operration destkey key[key..]对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。BITPOS key bit [start] [end]返回字符串里面第一个被设置为1或者0的bit位。start和end只能按字节,不能按位 ------------setbit--getbit-------------- 127.0.0.1:6379> setbit sign 0 1 # 设置sign的第0位为 1 (integer) 0 127.0.0.1:6379> setbit sign 2 1 # 设置sign的第2位为 1 不设置默认 是0 (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 127.0.0.1:6379> getbit sign 2 # 获取第2位的数值 (integer) 1 127.0.0.1:6379> getbit sign 3 (integer) 1 127.0.0.1:6379> getbit sign 4 # 未设置默认是0 (integer) 0 -----------bitcount---------------------------- 127.0.0.1:6379> BITCOUNT sign # 统计sign中为1的位数 (integer) 4

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3