首页 > 其他分享 >三个特殊数据类型

三个特殊数据类型

时间:2023-08-27 13:44:11浏览次数:43  
标签:city 特殊 0.1 数据类型 127.0 6379 三个 china integer

三个特殊数据类型

geospatial(地理位置)

朋友的定位 附近的人

查询地理信息数据:城市经纬度查询-国内城市经度纬度在线查询工具 (jsons.cn)

这个功能在3.2版本就推出了

添加城市位置

 

 

#geoadd 添加地理位置
#规则 地球两极是无法直接添加的,一般我们会下载城市数据 利用Java程序一次性导入
#填写规则是纬度经度 不要写反 但是redis会检查输入的经纬度的值 如果超出限制会出现错误
127.0.0.1:6379> GEOADD china:city 116.405285 39.904989 beijing
(integer) 1
127.0.0.1:6379> GEOADD china:city 121.472644 31.231706 shanghai
(integer) 1
127.0.0.1:6379> GEOADD china:city 125.3245 43.886841 jilin
(integer) 1
127.0.0.1:6379> GEOADD china:city 114.085947 22.547 shenzhen
(integer) 1
127.0.0.1:6379> GEOADD china:city 126.642464 45.756967 haerbin 117.190182  39.125596 tianjin
(integer) 2
127.0.0.1:6379>


查询一个地方的经度纬度 一定是一组坐标值

127.0.0.1:6379> GEOPOS china:city beijing
1) 1) "116.40528291463851929"
  2) "39.9049884229125027"
127.0.0.1:6379> GEOPOS china:city beijing shanghai
1) 1) "116.40528291463851929"
  2) "39.9049884229125027"
2) 1) "121.47264629602432251"
  2) "31.23170490709807012"
127.0.0.1:6379>

计算两个地理位置之间的绝对距离

如果两个位置之间的其中一个不存在, 那么命令返回空值。

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

  • m 表示单位为米。

  • km 表示单位为千米。

  • mi 表示单位为英里。

  • ft 表示单位为英尺。

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

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

127.0.0.1:6379> GEODIST china:city beijing shanghai km
"1067.5980"
127.0.0.1:6379>

我附近的人(获得周围所有人的定位) 通过半径来查 还可以通过指定的count来反回一定数量的数据

127.0.0.1:6379> GEORADIUS china:city 123 44 500 km
1) "jilin"
2) "haerbin"
127.0.0.1:6379>

GEORADIUSBYMEMBER

通过一个元素的位置来进行搜索

比如搜索北京1000公里内的所有城市


127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "tianjin"
2) "beijing"
3) "jilin"
127.0.0.1:6379>

geohash

该命令将返回11个字符的Geohash字符串

127.0.0.1:6379> GEOHASH china:city beijing
1) "wx4g0b7xrt0"
127.0.0.1:6379>

geo的底层原理其实就是zset 我们可以使用zset命令来操作geo

127.0.0.1:6379> ZRANGE china:city 0 -1
1) "shenzhen"
2) "shanghai"
3) "tianjin"
4) "beijing"
5) "jilin"
6) "haerbin"
127.0.0.1:6379>

 

Hyperloglog

什么是基数

A{1,3,5,7,8,9} B{1,3,5,7,8}

基数指的是 不重复的元素 比如这里面的元素 不重复的元素 是 1 3 5 7 8 那么基数就是 5

统计网站的访问量 (一个人多次访问 算成一个人)

传统方式 使用set集合 利用其唯一的特性 来保存访问的数量

这个方法如果保存大量的用户id 就会格外的麻烦 我们只是为了计数 而不是为了保存用户id

采用hyperloglog的优点就是 占用内存是固定的 采用2的64次方进行计数 只需要12kb的内存

如果要从内存角度来比较的话 那么这个方法应该是首选的

但是这个方法有着0.81%的错误率 如果对数据的精准性要求不是很高的情况

127.0.0.1:6379> PFADD mypf1 a b c d e f g h i 
(integer) 1
127.0.0.1:6379> PFADD mypf2 h g i m k l u t r
(integer) 1
127.0.0.1:6379> PFCOUNT mypf1
(integer) 9
127.0.0.1:6379> PFCOUNT mypf2
(integer) 8
127.0.0.1:6379> PFMERGE mypf3 mypf2 mypf1
OK
127.0.0.1:6379> PFCOUNT mypf3
(integer) 14
127.0.0.1:6379>

 

Bitmap

位存储

统计用户信息 登录 未登录 打卡 未打卡 活跃 不活跃

两种状态的 都可以使用这个

bitmap 位图 数据结构 使用二进制 只有两个状态

测试 使用bitmap 来记录一周的打卡


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
127.0.0.1:6379>

查看某一天是否打卡

127.0.0.1:6379> GETBIT sign 6
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> GETBIT sign 5
(integer) 0
127.0.0.1:6379>

统计打卡天数

127.0.0.1:6379> BITCOUNT sign 0 -1
(integer) 4
127.0.0.1:6379>
 

标签:city,特殊,0.1,数据类型,127.0,6379,三个,china,integer
From: https://www.cnblogs.com/AnJiaYu/p/17660202.html

相关文章

  • java 正则表达式 非捕获组(特殊构造)
    针对JavaAPI文档中的正则表达式关于特殊构造(非捕获组)的说明,例如:1.(?:X)X,asanon-capturinggroup2.(?idmsux-idmsux) Nothing,butturnsmatchflagson-off3.(?idmsux-idmsux:X)  X,asanon-capturinggroupwiththegivenflagson-off4.(?=......
  • hibernate——继承关系以及三个subclass标签的区别
    Java类中有继承关系,相应的在hibernate中,也有继承关系,子类反应到数据库中,就有多种实现形式了,子类和父类可以映射到同一张表中,子类也可以单独映射成一张表,但是用不同的标签实现,子类表和父类表的关系也不同。在映射文件中,有三个标签可以实现继承关系,分别是:subclass、joined-subclass、......
  • redis的五大数据类型
    String(字符串)string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M......
  • 变量和数据类型java练习
    1.①packagecom.company;publicclassHomeWork8_19{publicstaticvoidmain(String[]args){Stringname="小明";intage=25;intseniority=3;intage1=5;Stringsubject="java";......
  • Python数据类型
    Python数据类型字符串(str)字符串是Python中最常用的数据类型。我们可以使用引号('或"或''')来创建字符串。创建字符串很简单,只要为变量分配一个值即可。var1='HelloWorld!'var2="PythonRunoob"字符串的截取的语法格式:变量[头下标:尾下标]str='Runoo......
  • 引用数据类型的坑
    Integer2!= Integer2巨坑 最近遇到一个奇怪的问题,存到user中的某个key的数据类型变了下面这段代码,本来是图方便获取了map,然后将list转成string,然后put回到这个map,然后使用这个map却不成想,类型也跟着变了。 这就是引用类型使用的风险 importjava.util.ArrayLis......
  • java基础数据类型-int类型-day02
    目录1.变量的命名2.常量3.变量4.进制4.1进制转换4.2整型数据类型1.变量的命名记住一点:不可以以数字开头类名:首字母大写的驼峰体变量名,方法名:首字母小写的驼峰体包的名字:与python语言一样全部小写2.常量整形:123实数型:3.14字符:‘a’字符串:"abc"布尔值:truefalse......
  • 数据类型
    数据类型字符类型​char(signed)charc='a';signedcharc='a';分配1个字节存储区,打了个标签为c,将字符'a'对应的数字放到该字节中int-4字节-%dchar-1字节-halfhalf%d-%hhd整型shortintlong转义字符:'''n''\n'-换行符​......
  • 变量常量与垃圾回收机制及数据类型
    内容概要pycharm的简单使用1.如何修改主题 File|Settings|Appearance&Behavior|Appearance|Theme2.如何切换解释器 File|Settings|Project:django_lock|PythonInterpreter3.如何创建python文件 #1.如何创建项目 文件一定是存在于项目中......
  • 中间件学习 - Rabbit MQ 概念及特殊MQ实现
    RabbitMQ官方文档介绍RabbitMQ是一个消息队列组件,使用Erlang开发,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题安装使用安装Erlang(RabbitMQ基于Erlang开发)Downloads-Erlang/OTP配置Erlang环境erl-version验证安装rabbitMQDownl......