Redis位图和地理空间GEO介绍与使用

1、位图

应用场景

在很多互联网应用中,我们会存在签到送积分、签到领取奖励等这样的需求,比如:

签到1天送10积分,连续签到2天送20积分,3天送30积分,4天以上均送50积分等。
如果连续签到中断,则重置计数,每月初重置计数。
显示用户某个月的签到次数。
在日历控件上展示用户每月签到情况,可以切换年月显示。

BitMaps常用指令

命令功能参数
SETBIT指定偏移量bit位置设置值key offset value 【 0=<offset<2^32】
GETBIT查询指定偏移位置的bit值key offset
BITCOUNT统计指定字节区间bit为1的数量key [start end]【@LBN】
BITFIELD操作多字节位域key [GET type offset] [SET type offset value] [INCRBY type offsetincrement] [OVERFLOW WRAP/SAT/FAIL]
BITPOS查询指定字节区间第一个被设置成1的bit位的位置key bit [start] [end]【@LBN】

考虑到每月初需要重置连续签到次数,最简单的方式是按用户每月存一条签到数据(也可以每年存一条数据)。Key的格式为

u :sign:userid :yyyyNM,Value则采用长度为4个字节(32位)的位图(最大月份只有31天)。位图的每一位代表一天的签到,1表示已签,0表示未签。从高位插入,也就是说左边位算是开始日期。

例如user:sign:98:202883表示用户id=98的用户在2020年3月的签到记录。

2、Redis GEO

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

geoadd:添加地理位置的坐标。
geopos:获取地理位置的坐标。
geodist:计算两个位置之间的距离。
georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
geohash:返回一个或多个位置对象的 geohash 值。

geodist
geodist 用于返回两个给定位置之间的距离。

geodist 语法格式如下:

GEODIST key member1 member2 [m|km|ft|mi]

member1 member2 为两个地理位置。

最后一个距离单位参数说明:

  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。

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

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

georadius 与 georadiusbymember 语法格式如下:

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

参数说明:

  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。
  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
  • WITHCOORD: 将位置元素的经度和纬度也一并返回。
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
  • COUNT 限定返回的记录数。
  • ASC: 查找结果根据距离从近到远排序。
  • DESC: 查找结果根据从远到近排序。

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

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

相关文章

伯克希尔·哈撒韦:“股神”的“登神长阶”

股价跳水大家见过不少&#xff0c;但一秒跌掉62万美元的你见过吗&#xff1f; 今天我们来聊聊“股市”巴菲特的公司——伯克希尔哈撒韦 最近&#xff0c;由于纽交所技术故障&#xff0c;伯克希尔哈撒韦A类股股价上演一秒归“零”&#xff0c;从超过62万美元跌成185.1美元&…

关于main函数参数列表的那些事

写在最前面&#xff1a; 本篇博客所写代码&#xff0c;全部都依赖于Linux环境。 在开始之前&#xff0c;我们先问自己几个问题&#xff1a; main函数可以传参吗?如果main函数可以传参&#xff0c;最多可以传几个参数。main函数传递的参数具体作用是什么&#xff1f; 一.是否…

C++之类与类之间的关系

1、UML 2、继承&#xff08;泛化&#xff09; 3、关联 一个类对象与另一个类对象存在一个固定关系。他们的关系不是暂时的&#xff0c;而是固定的。 一个类对象作为另一个类对象的成员。例如订单&#xff0c;是用户的一个成员。用户关联订单。 4、聚合 聚合其实是特殊的一种…

渗透测试之内核安全系列课程:Rootkit技术初探(二)

今天&#xff0c;我们来讲一下内核安全&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 目前&#xff0c;在渗透测试领域&#xff0c;主要分为了两个发展方向&#xff0c;分别为Web攻防领域和PWN&#xff08;二进制安全&#xff09;攻防领域。在…

[office] 16种常见的COUNTIF函数公式设置 #笔记#职场发展

16种常见的COUNTIF函数公式设置 1、返回包含值12的单元格数量 COUNTIF(A:A,12) 2、返回包含负值的单元格数量 COUNTIF(A:A,"<0") 3、返回不等于0的单元格数量 COUNTIF(A:A,"<>0") 4、返回大于5的单元格数量 COUNTIF(A:A,">5"…

中国新闻网怎么投稿 新闻稿件文章如何发布到中国新闻网上,附中国新闻网价格明细

中国新闻网是中国最具影响力和权威性的新闻门户网站之一。作为广大作者和媒体从业者&#xff0c;怎样向中国新闻网投稿一直是一个备受关注的话题。在这篇文章中&#xff0c;我们将着重介绍媒介库网发稿平台&#xff0c;并分享如何在该平台上成功投稿至中国新闻网。 媒介库网发稿…

深度学习中tensorflow和pytorch框架有什么不同,该如何选择

Tensorflow与Pytorch的选择 1. 编程风格和易用性2. 社区和生态系统3. 性能和优化4. 选择建议 TensorFlow 和 PyTorch 是两种流行的深度学习框架&#xff0c;各有优缺点和特定的使用场景。以下是它们的主要区别以及选择时需要考虑的因素&#xff1a; 1. 编程风格和易用性 Tenso…

IDEA 2022

介绍 【尚硅谷IDEA安装idea实战教程&#xff08;百万播放&#xff0c;新版来袭&#xff09;】 jetbrains 中文官网 IDEA 官网 IDEA 从 IDEA 2022.1 版本开始支持 JDK 17&#xff0c;也就是说如果想要使用 JDK 17&#xff0c;那么就要下载 IDEA 2022.1 或之后的版本。 公司…

二叉树的非递归后序遍历

二叉树的后序遍历是一种深度优先遍历算法&#xff0c;其遍历顺序为&#xff1a;左子树 -> 右子树 -> 根节点。非递归实现后序遍历通常使用一个辅助栈来模拟递归过程。 以下是使用C实现二叉树非递归后序遍历的示例代码&#xff1a; #include <iostream> #include …

C语言.数据结构.双向链表

数据结构.双向链表 1.双向链表的结构1.1链表的简单介绍1.2图文分析 2.实现双向链表2.1链表的初始化2.1.1初始化2.1.2节点的申请 2.2链表的打印2.2.1代码实现2.2.2图文分析 2.3链表的尾插2.3.1代码实现2.3.2图文分析 2.4链表的头插2.4.1代码实现2.4.2图文分析 2.5链表的尾删2.5.…

CMMI软件能力成熟度评估标准

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl CMMI概述 CMMI&#xff0c;全称为Capability Maturity Model Integration&#xff0c;即能力成熟度模型集成&#xff0c;是在原有的CMM&#xff08;Capability Maturity Mo…

一文吃透!如何在鸿蒙上开发Unity游戏的方法!

实际效果&#xff1a; 使用 Webview 在鸿蒙设备上运行 Unity 游戏需要几个步骤&#xff1f; 用 Webview 在鸿蒙上运行 Unity 游戏 ①创建鸿蒙全屏工程 在 DevEco 中创建一个新工程&#xff0c;模板选择 Full Screen Ability。 ②添加 Webview 这个工程的布局很简单&#xf…

JavaScript中获取时间戳的方法

在 JavaScript 中获取时间戳的方法有多种&#xff0c;具体如下&#xff1a; 1.使用 Date 对象的 getTime() 方法获取当前时间的时间戳&#xff1a; var timestamp new Date().getTime(); 2.使用 Date 对象的 valueOf() 方法获取当前时间的时间戳&#xff1a; var timestamp n…

esp32-c6所有配套教程

1.介绍 本文是esp32-c6所有资料的介绍 如果需要详细代码的话请访问下面这个链接 esp32-c6使用教程wifi&#xff08;espidf修改成arduino&#xff09;附带代码websocket&#xff0c;舵机&#xff0c;点灯【2024年】-CSDN博客 配置环境 视频教程 0-2设置开发环境_哔哩哔哩_bi…

策略模式+简单工厂

&#x1f347;工厂模式 &#x1f348;工厂模式向策略模式过度——工厂加一个保安 &#x1f34f;策略模式 &#x1f350;策略模式简单工厂 声明本文需要理解多态的基础上才能来学习 欢迎前来学习——继承和多态 学习记录 工厂模式 需要什么就生成什么 // 工厂模式 class Fact…

Flink任务如何跑起来之 1.DataStream和Transformation

Flink任务如何跑起来之 1.DataStream和Transformation 1. 滥觞 在使用Flink完成业务功能之余&#xff0c;有必要了解下我们的任务是如何跑起来的。知其然&#xff0c;知其所以然。 既然重点是学习应用程序如何跑起来&#xff0c;那么应用程序的内容不重要&#xff0c;越简单…

好家风短视频:成都鼎茂宏升文化传媒公司

好家风短视频&#xff1a;传承与发扬家庭美德的新载体 在数字时代的浪潮中&#xff0c;短视频以其简短、生动、直观的特点&#xff0c;成为了人们获取信息、传递情感的重要渠道。成都鼎茂宏升文化传媒公司而在这个多元化的内容生态中&#xff0c;好家风短视频以其独特的价值和…

5.透明效果

实时渲染中要实现透明效果&#xff0c;通常会在渲染模型时控制它的透明通道&#xff08;Alpha channel&#xff09;。 当一个物体被渲染到屏幕上时&#xff0c;每个片元除了颜色和深度值之外&#xff0c;它还有另一个属性—透明度。 当透明度为1时&#xff0c;表示该像素是完…

Dvws靶场

文章目录 一、XXE外部实体注入二、No-SQL注入三、Insecure Direct Object Reference四、Mass Assignment五、Information Disclosure六、Command Injection七、SQL注入 一、XXE外部实体注入 访问http://192.168.92.6/dvwsuserservice?wsdl&#xff0c;发现一个SOAP服务。在SO…

MySQL 存储过程(二)

本篇继续介绍MySQL存储过程的相关内容。 目录 一、if语句 二、case 三、循环语句 while loop repeat 一、if语句 在存储过程中&#xff0c;可以使用if语句进行条件判断&#xff0c;其语法结构如下&#xff1a; if 判断语句 then 逻辑语句..... elseif 判断语句 then 逻…