Redis的地理位置(GEO)+Hypterloglog+事务测试

news2024/10/6 10:38:48

GEOADD 命令 - 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中,这些数据将会存储到sorted set

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

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

基本语法是:

geoadd 键名 值  经度 纬度  键名 值  经度 纬度

GEODIST 命令 - 返回两个给定位置之间的距离

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

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

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。

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

基本语法是:

geodist 键名 值1  值2  [单位]

GEORADIUS 命令 - 以给定的经纬度为中心, 找出某一半径内的元素

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

  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 
  • WITHCOORD: 将位置元素的经度和维度也一并返回。
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。
  • ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。
  • DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。

基本语法是:georadius 键名 经度 纬度 范围 [单位] [WITHDIST|WITHCOORD|WITHHASH|ASC|DESC]

127.0.0.1:6379> geoadd city 120.52 30.44 "shanghai" 120.20 30.26667 "hangzhou" 
106.45 29.56667 "chongqin" 118.1 24.45557 "xiamen" 113 28.21667 "changsha"
(integer) 5
127.0.0.1:6379> geodist city chongqin xiamen
"1285840.6066"

127.0.0.1:6379> georadius city 120 30 200 km
1) "hangzhou"
2) "shanghai"
127.0.0.1:6379> georadius city 120 30 2000 km withdist asc   #返回与坐标(120,30)相距两千米内的城市,同时将结果由近到远返回
1) 1) "hangzhou"
   2) "35.3541"
2) 1) "shanghai"
   2) "69.9486"
3) 1) "xiamen"
   2) "644.6423"
4) 1) "changsha"
   2) "708.4320"
5) 1) "chongqin"
   2) "1308.1681"

GEORADIUSBYMEMBER 命令 - 找出位于指定范围内的元素,中心点是由给定的位置元素决定

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

指定成员的位置被用作查询的中心。

基本语法:

georadiusbymember 键名 值 范围 [单位]

GEOHASH 命令 - 返回一个或多个位置元素的 Geohash 表示

基本语法:

geohash 键名 值1 值2

哈希值的前缀越相似,说明两个地点越近

GEOPOS 命令 - 从key里返回所有给定位置元素的位置(经度和纬度)

基本语法:

geopos 键名 值1 值2

返回值

GEOPOS 命令返回一个数组, 数组中的每个项都由两个元素组成: 第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度

127.0.0.1:6379> georadiusbymember city chongqin 1200 km
1) "chongqin"
2) "changsha"

127.0.0.1:6379> geohash city hangzhou shanghai
1) "wtmkpjyuph0"
2) "wtmtnmrvze0"

127.0.0.1:6379> geopos city chongqin changsha shanghai
1) 1) "106.4500012993812561"
   2) "29.56666939001875249"
2) 1) "112.99999862909317017"
   2) "28.2166692963913377"
3) 1) "120.52000075578689575"
   2) "30.43999996130551011"

=========================================================================

Hypterloglog

Pfadd 命令 - 添加指定元素到 HyperLogLog 中。

Pgmerge 命令 - 将多个 HyperLogLog 合并为一个 HyperLogLog

 Pfcount 命令 - 返回给定 HyperLogLog 的基数估算值。

基数统计:如果允许容错(允许统计有误差),那么是一定可以使用Hyperloglog进行基数统计;如果不允许容错,那么可以使用set或者自己的数据类型

127.0.0.1:6379> pfadd mykey1 abd g h
(integer) 1
127.0.0.1:6379> pfadd mykey2 j k l mm
(integer) 1

127.0.0.1:6379> pfmerge mykey3 mykey1 mykey2 
OK
127.0.0.1:6379> pfcount mykey3
(integer) 7

 

=========================================================================

Redis事务

Multi 命令 - 标记一个事务块的开始。

Exec 命令 - 执行所有事务块内的命令。

Discard 命令 - 半路取消事务,放弃执行事务块内的所有命令。

Watch 命令 - 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

Unwatch 命令 - 取消 WATCH 命令对所有 key 的监视。

#正常执行事务
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr user_id
QUEUED
127.0.0.1:6379> incr user_id
QUEUED
127.0.0.1:6379> incr user_id
QUEUED
127.0.0.1:6379> get user_id
QUEUED
127.0.0.1:6379> ping
QUEUED
127.0.0.1:6379> exec
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) "3"
5) PONG
#编译时出现错误,整个事务所有语句不执行
127.0.0.1:6379> watch lock lock_times
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set money 1000
QUEUED
127.0.0.1:6379> incr money 100
(error) ERR wrong number of arguments for 'incr' command
127.0.0.1:6379> set m2 200
QUEUED
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
#运行时出现错误,除了有错语句其他语句正常执行
127.0.0.1:6379> set k1 "v1"
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr k1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> get k3
QUEUED
127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range
2) OK
3) OK
4) "v3"



前者事务监视变量同时开启事务要修改变量,当另一个事务也修改此变量时,前者事务必定失败

 上面事务执行失败了,要重新开启事务修改前需要先unwatch

 注意:这里事务如果没有加watch,那么其他事务更改了变量值的时候,另一个事务会获得变量值被修改的最新版本,然后对最新版本修改

 悲观锁:认为什么时候都会出问题,任何时候都要加锁

乐观锁:认为什么时候都不会出问题,所以不会上锁,但是更新的时候会判断一些,在此期间是否有人修改过这个数据

获取version 更新的时候(exec)比较version

我们在Redis可以通过watch实现乐观锁,如:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python中Numpy报错分析

Python中Numpy报错分析 Numpy是Python中重要的开源数值计算库,它提供了数组和矩阵的操作。在使用Numpy的过程中,有时候我们会遇到一些报错信息,本文将对常见的Numpy报错进行分析和解决方法的介绍。 NumPy报错信息 当我们在使用Numpy时出现…

融合PWA技术的小程序:为用户带来原生应用体验

PWA代表“渐进式网络应用”(Progressive Web Application)。它是一种结合了网页和移动应用程序功能的技术概念。PWA旨在提供类似于原生应用程序的用户体验,包括离线访问、推送通知、后台同步等功能,同时又具有网页的优势&#xff…

AIGC领域优秀的资源汇总(应用、论文、开源项目)

AIGC领域介绍,及一些比较优秀的应用,和论文,开源项目汇总。 AIGC大纲 一、AIGC概念 ​ AIGC,全名“AI generated content”,又称生成式AI,意为人工智能生成内容。例如AI文本续写,文字转图像的…

NRF52系列多个 base uuid 的问题,以client为例。

基础uuid知识 nordic的nrf sdk希望我们设置uuid的方式跟蓝牙技术联盟SIG的方式一样,也就是服务和特性的uuid是基于同一个base uuid修改产生的,比如base uuid是0x0000xxxx-0000-1000-8000-00805F9B34FB,那么服务和特性的128bit uuid就要基于此…

java8内部调用无法引用值的问题

问题:Variable used in lambda expression should be final or effectively final 具体原因: 这段代码试图将 20 赋给一个局部变量,它无法通过编译,但绝非编写错误。 这实际上是语言的设计者有意为之,用以鼓励用户使用…

优化版本 穿越火线(CF) FPS AI 自瞄 代码 权重 数据集(下面有链接)

更新初衷 本人在制作过程中,有一些爱钻研的朋友来问以及提出增加一些新的功能点回会更好,本着学习研究态度,在第一个版本上进行优化,增加一些内容 不喜欢看过程的小伙伴直接看最下面 界面 解决问题: 1、进入慢 2、无…

PyTorch-完整的模型训练套路

目录 1. 准备 1.1 使用Cifar10 1.2 item的用法 1.3 model的搭建 1.4 数据集、参数设置以及训练开始 1.5 测试集 1.6 使用tensorboard 1.7 保存每一轮的训练结果 2. 计算整体的正确率 3. 其他 3.1 train与eval 3.2 使用GPU训练 1. 准备 1.1 使用Cifar10 1.2 item的…

微信小程序授权登录

微信小程序—授权登录 一、小程序登录 登录流程时序 说明: 1.小程序端调用 wx.login() 获取临时登录凭证code ,并回传到开发者服务器。 2.服务器调用 code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。 之后开发者服务器可以根…

2021年长三角高校数学建模竞赛A题Go!Fun游长三角解题全过程文档及程序

2021年长三角高校数学建模竞赛 A题 Go!Fun游长三角 原题再现: 又到一年毕业季,来自浙江杭州的一位大学生小李同学,家境良好,平时学习刻苦,在即将毕业之际,准备给自己安排一个毕业旅行,同时帮助…

Java 高级应用-多线程-实现 Runnable 接口与继承 Thread 类

1.1 程序、进程与线程 • 程序(program):为完成特定任务,用某种语言编写的一组指令的集合。即指一段 静态的代码,静态对象。 • 进程(process):程序的一次执行过程,或是正…

转变范式:如何使用 5 种新模式重塑 2023 年的实体店体验

在电商盛行的当下,线上购物已成为新零售的重要组成部分,实体零售业正处于两难境地。一方面,实体零售是绝对有必要的:美国约 85% 的销售额来自实体商店。 另一方面,尽管增长放缓,但电商收入占销售总额的比例…

chatgpt赋能python:Python中图形怎么整体下移?

Python中图形怎么整体下移? 在Python中,我们常常需要处理各种各样的图形,但是有时候我们需要将图形进行整体调整,比如将所有图形下移一定距离。那么在Python中,我们该如何实现这个操作呢? 介绍 在Python…

【Linux】3、iptables

文章目录 一、设置其他机器均无法访问 a、b、c 机器的 5432 端口二、设置 d、e 可访问 a、b、c 的 5432 端口三、检查业务是否受到影响 iptables 可在 tcp 协议栈层面限制访问,常用于解决现场的各漏洞。 场景:现场有 a、b、c 三个机器组成的 postgres 集…

经纬恒润AUTOSAR成功适配智芯科技国产车规级芯片

近日,经纬恒润AUTOSAR基础软件产品INTEWORK-EAS-CP成功适配智芯半导体的Z20K14x产品家族。同时,经纬恒润完成了对智芯半导体Z20K14X 产品MCAL软件适配和工程集成,为智芯半导体提供了全套AUTOSAR解决方案。 左图:经纬恒润AUTOSAR E…

iOS 创建组件库

索引库 repo 索引文件(.podspec文件) 1.搭建私有库之前必须要先创建索引库 1)首先检查当前电脑的索引库 pod repo 2)在gitlab上创建一个新的库,这个库用来保存私有库的podspec文件,所以我们一般起名字最好是 xxxSpec用以区分…

回归预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计学习总结参考资料 预测效果 基本介…

在虚拟机上部署hadoop集群(全流程)

一、单节点部署前置准备 这里一直下一步就好了 接下来需要为该节点固定ip并配置相关网关还有dns解析 这里配置了一个本机dns解析,也配置了一个公网dns解析(主要目的还是为了固定ip

知识变现:知识付费产品,怎么定价?

知识变现:知识付费产品,怎么定价? 定价,是知识博主或者培训机构、用户、竞争对手间博弈平衡后的结果。 200元以下: 只有产品,没有服务。 产品的特征是标准化、大批量。这样的知识产品,要卖给几千、几万…

CSS 实现一个动态水形波浪蒙版层

需求的最终实现效果&#xff0c;如下图&#xff0c;在盒子表面&#xff0c;绘制一个波浪形状的蒙版层&#xff08;动态的&#xff09;。 先定义一个&#xff0c;主体盒子块&#xff0c;等会儿的蒙版图层会覆盖到它的上面。 <div></div>图层采用&#xff0c;SVG进…

Spring Boot 如何自定义异常处理器

Spring Boot自定义异常处理器 在Spring Boot应用程序中&#xff0c;异常处理是一个非常重要的方面。如果您不处理异常&#xff0c;应用程序可能会崩溃或出现不可预料的行为。默认情况下&#xff0c;Spring Boot将未捕获的异常返回给客户端。这通常不是期望的行为&#xff0c;因…