首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis 应用与原理(一)

DB 读:从 cache 读取数据,读取到直接返回,否则查 DB 后写入到 cache,之后返回数据 双写一致性解决方案 以上三种经典读写策略在一定条件下都会产生缓存和数据库数据不一致问题,这里给出两种解决方案...计算两个位置之间距离: 在某个集合获取其中两个位置直线距离:GEODIST location-set location-x location-y [unit] 其中 unit 可选参数为 m |...,添加则在返回匹配位置时会将该位置纬度一并返回 WITHDIST:可选参数,添加则在返回匹配位置时会将该位置与中心点之间距离一并返回 ASC|DESC:可选参数,添加 ASC 将返回匹配位置根据距离从近到远排序...112.927076 28.235653 (长沙) 500km 以内位置信息,查找结果应包含不超过 5 个位置坐标信息,距离信息,并按距离由近到远排序:GEORADIUS hubeiCities...hubeiCities 存在位置,而不能指定位置坐标),查找结果应包含不超过 2 个位置坐标信息,距离信息,并按距离由远到近排序:GEORADIUSBYMEMBER hubeiCities wuhan

12210

Java面试考点7之MySQL调优

可以给出分类进行记忆,不一一罗列。 引擎 介绍 MySQL 主要存储引擎。...Hash 是使用散列表来对数据进行索引,Hash 方式不像 B-Tree 那样需要多次查询才能定位到记录,因此 Hash 索引效率高于 B-Tree,但是不支持范围查找排序等功能。...一个纬度是针对数据库设计、结构设计以及索引设置纬度进行优化; 第二个纬度是对我们业务中使用 SQL 语句进行优化,例如调整 where 查询条件; 第三个纬度是对 MySQL 服务配置进行优化...,例如对链接数管理,对索引缓存、查询缓存、排序缓存等各种缓存大小进行优化; 第四个纬度是对硬件设备操作系统设置进行优化,例如调整操作系统参数、禁用 swap、增加内存、升级固态硬盘等等。...对于研发人员来说,两个纬度与业务息息相关,因此需要重点掌握,后两个纬度更适合 DBA 进行深入学习,简单了解就好。 那么,重点来看两个纬度,要点如下图所示。

57410
您找到你想要的搜索结果了吗?
是的
没有找到

一文了解geohash原理,实践实战设计思路

“附近的人” 核心思想如下: ① “自己”为中心,搜索附近用户 ② “自己”当前地理位置为准,计算出别人和 “我” 之间距离“自己”与别人距离远近排序,筛选出离我最近用户或者商店等...(不推荐使用了) 基于mysql + GeoHash实现附近人查询 ① 设计思路 在原本存储用户经纬度:入库时计算经纬度对应geohash字符串存储到;那么存储时需要我们明确字符串长度。...获取指定key里返回所有指定名称位置(经度纬度);时间复杂度O(log(n)),n是排序集中元素数 注意事项: ① geopos命令返回是一个数组,每个数组都由两个元素组成:第一个是位置经度...② [m|km|ft|mi]尾部参数: m :米,默认单位 km :千米 mi :英里 ft :英尺 ③ 计算出距离双精度浮点数形式返回;位置不存在,则返回...④ withcoord: 将位置元素经度维度也一并返回。 ⑤ withhash: 52 位有符号整数形式返回位置元素经过原始geohash编码有序集合分值。

2.9K20

一口气说出 4种 LBS “附近的人” 实现方式,面试官笑了

“附近的人” 核心思想如下: “我” 为中心,搜索附近用户 “我” 当前地理位置为准,计算出别人和 “我” 之间距离 “我” 与别人距离远近排序,筛选出离我最近用户或者商店等 [在这里插入图片描述...GEOADD:将给定位置对象(纬度、经度、名字)添加到指定key; GEOPOS:从key里面返回所有给定位置对象位置(经度纬度); GEODIST:返回两个给定位置之间距离; GEOHASH...:返回一个或多个位置对象Geohash表示; GEORADIUS:给定纬度为中心,返回目标集合与中心距离不超过给定最大距离所有位置对象; GEORADIUSBYMEMBER:给定位置对象为中心...WITHDIST:在返回位置对象同时,将位置对象与中心之间距离也一并返回距离单位用户给定范围单位保持一致。 WITHCOORD:将位置对象经度维度也一并返回。...WITHHASH: 52 位有符号整数形式返回位置对象经过原始 geohash 编码有序集合分值。这个选项主要用于底层应用或者调试,实际作用并不大。

1.3K30

一口气说出 4种 “附近的人” 实现方式,面试官笑了!

“附近的人” 核心思想如下: “我” 为中心,搜索附近用户 “我” 当前地理位置为准,计算出别人和 “我” 之间距离 “我” 与别人距离远近排序,筛选出离我最近用户或者商店等 二、...GEOADD:将给定位置对象(纬度、经度、名字)添加到指定key; GEOPOS:从key里面返回所有给定位置对象位置(经度纬度); GEODIST:返回两个给定位置之间距离; GEOHASH...:返回一个或多个位置对象Geohash表示; GEORADIUS:给定纬度为中心,返回目标集合与中心距离不超过给定最大距离所有位置对象; GEORADIUSBYMEMBER:给定位置对象为中心...WITHDIST:在返回位置对象同时,将位置对象与中心之间距离也一并返回距离单位用户给定范围单位保持一致。 WITHCOORD:将位置对象经度维度也一并返回。...WITHHASH: 52 位有符号整数形式返回位置对象经过原始 geohash 编码有序集合分值。这个选项主要用于底层应用或者调试,实际作用并不大。

1.9K20

微信附近的人,用redis也能实现?(GEO)

用关系型数据库(mysql)方式解决问题 我们先把问题简化,假如我附近的人都是不动,也就是说他们位置是固定,按照咱们传统思路,就是把每个人纬度存起来,然后遍历这些经纬度,我们可以通过某种方法获取我各个经纬度之间距离...遍历数据,自己对比,获得每个人和自己距离 把数据库所有记录都遍历一遍,把每一条记录纬度自己纬度做个对比,就能获取到各个记录离自己距离。...用关系型数据库(mysql)存在问题 其实用 mysql 方式表面上看着是可以解决问题,其实不然 首先遍历数据就是遍历所有的数据,而且是在一个需要及时返回结果接口中,这样做是非常不科学,用户量非常多的话根本不现实...WITHDIST: 在返回位置元素同时, 将位置元素与中心之间距离也一并返回。 WITHCOORD: 将位置元素经度维度也一并返回。...WITHHASH: 52 位有符号整数形式返回位置元素经过原始 geohash 编码有序集合分值。这个选项主要用于底层应用或者调试, 实际作用并不大。 COUNT 限定返回记录数。

60110

腾讯云直播开发日记 (二)附近直播-直播礼物-直播回放

要做这个附近的人,首先要收集用户纬度存放到数据库,也就是我们数据会变成这样 参数名 说明 id 自增主建 user_id 用户ID live_url 播放地址 obs_url 推流地址 avatar...常见附近的人处理方式有: Mysql实现附近的人 mysql 实现附近的人也分2种方案 每次都通过函数计算 这种就需要计算,消耗大一点,但是数据量小直径忽略,业务最大,开发效率最大 这里给出一点代码,...空间函数 ST_Distance_Sphere 进行计算得出距离, 米为单位 利用GeoHash 减少计算 GeoHash算法将二维纬度数据映射到一维整数,这样所有的元素都将挂载到一条线上,...我们使用对经纬度进行 geohash 算法计算得出hash值, 存入数据库使用like查询, 查出附近的人进行二次计算得出距离即可 Redis Redis处理这些地理位置坐标点思想是: Redis中经纬度使用..., 例如: 礼物、礼物类别、直播间礼物打赏日志、其他用户消费日志等等 这里我说一下礼物, 基本字段 参数名 说明 id 自增主建 title 礼物名称 image 礼物图片 svga SVGAURL

9.1K52

Redis之GEO类型解读

geopos 从key里返回所有给定位置元素位置(经度纬度) geodist 返回两个给定位置之间距离 georadius 给定纬度为中心, 找出某一半径内元素 georadiusbymember...:计算出距离双精度浮点数形式返回。...如果给定位置元素不存在, 那么命令返回空值。 georadius 命令 给定纬度为中心, 返回键包含位置元素当中, 与中心距离不超过给定最大距离所有位置元素。...WITHCOORD: 将位置元素经度维度也一并返回。 WITHHASH: 52 位有符号整数形式返回位置元素经过原始 geohash 编码有序集合分值。...这个选项主要用于底层应用或者调试, 实际作用并不大。 命令默认返回排序位置元素。

24540

Redis之GEO类型解读

geopos 从key里返回所有给定位置元素位置(经度纬度) geodist 返回两个给定位置之间距离 georadius 给定纬度为中心, 找出某一半径内元素 georadiusbymember...:计算出距离双精度浮点数形式返回。...如果给定位置元素不存在, 那么命令返回空值。 georadius 命令 给定纬度为中心, 返回键包含位置元素当中, 与中心距离不超过给定最大距离所有位置元素。...WITHCOORD: 将位置元素经度维度也一并返回。 WITHHASH: 52 位有符号整数形式返回位置元素经过原始 geohash 编码有序集合分值。...这个选项主要用于底层应用或者调试, 实际作用并不大。 命令默认返回排序位置元素。

404110

数据库相关知识总结

,而不是逐行删除数据 创建数据 为利用CREATE TABLE创建,必须给出下列信息: 新名字,在关键字CREATE TABLE之后给出 表列名字定义,用逗号分隔。...视图可返回与底层表示格式不同数据 视图本身不包含数据,因此它们返回数据是从其他检索出来。...MySQL支持IN(传递给存储过程)、OUT(从存储过程传出,如这里所用)INOUT(对存储过程传入传出)类型参数并通过指定INTO关键字来将处理结果保存在对应变量 为调用上述存储过程,使用下面方法...注:MYSQL5以后,不允许触发器返回任何结果,因此使用into @变量名,将结果赋值到变量,用select调用即可 触发器每个每个事件每次地定义,每个每个事件每次只允许一个触发器。...事务处理块可以使用这两条语句,但如果你执行回退,它们不会被撤销。 一般MySQL语句都是直接针对数据库执行编写

3.3K10

Redis 实战篇:Geo 算法教你邂逅附近女神

附近的人核心思想如下: “我” 为中心,搜索附近 Ta; “我” 当前地理位置为准,计算出别人和 “我” 之间距离 “我” 与别人距离远近排序,筛选出离我最近用户。...MySQL 实现 “计算「附近的人」,通过一个坐标计算这个坐标附近其他数据,按照距离排序,如何下手呢?...为了满足高性能矩形区域算法,数据需要在经纬度坐标加上复合索引 (longitude, latitude),这样可以最大优化查询性能。...” Hash看起来好像可以实现,但是 LBS 应用除了记录经纬度以外,还需要对 Hash 集合数据进行范围查询,根据经纬度换算成距离排序。 而 Hash 集合数据是无序,显然不可取。...km ASC COUNT 10 ASC可以实现让「女神」信息按照这个距离自己纬度由近到远排序

1.6K10

Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

附近的人核心思想如下: “我” 为中心,搜索附近 Ta; “我” 当前地理位置为准,计算出别人和 “我” 之间距离 “我” 与别人距离远近排序,筛选出离我最近用户。...MySQL 实现 “计算「附近的人」,通过一个坐标计算这个坐标附近其他数据,按照距离排序,如何下手呢?...” 用户为中心,给定一个 1000 米作为半径画圆,那么圆形区域内用户就是我们想要邂逅「附近的人」。 将经纬度存储到 MySQL: ?...“可是总不能遍历所有的「女神」经纬度与自己纬度数据计算在根据距离排序,这个计算量也太大了。...Hash看起来好像可以实现,但是 LBS 应用除了记录经纬度以外,还需要对 Hash 集合数据进行范围查询,根据经纬度换算成距离排序。 而 Hash 集合数据是无序,显然不可取。

1.3K20

Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

附近的人核心思想如下: “我” 为中心,搜索附近 Ta; “我” 当前地理位置为准,计算出别人和 “我” 之间距离 “我” 与别人距离远近排序,筛选出离我最近用户。...MySQL 实现 “计算「附近的人」,通过一个坐标计算这个坐标附近其他数据,按照距离排序,如何下手呢?...为了满足高性能矩形区域算法,数据需要在经纬度坐标加上复合索引 (longitude, latitude),这样可以最大优化查询性能。...Hash看起来好像可以实现,但是 LBS 应用除了记录经纬度以外,还需要对 Hash 集合数据进行范围查询,根据经纬度换算成距离排序。 而 Hash 集合数据是无序,显然不可取。...km ASC COUNT 10 ASC可以实现让「女神」信息按照这个距离自己纬度由近到远排序

1.1K50

Redis实现附近的人

字符串越长,表示范围越精确。 ? GEOPOS 从key里返回所有给定位置元素位置(经度纬度)。...距离单位用户给定范围单位保持一致 WITHCOORD: 将位置元素经度维度也一并返回 WITHHASH: 52 位有符号整数形式返回位置元素经过原始 geohash 编码有序集合分值...这个选项主要用于底层应用或者调试, 实际作用并不大。 命令默认返回排序位置元素。...通过以下两个参数, 用户可以指定被返回位置元素排序方式: ASC 根据中心位置, 按照从近到远方式返回位置元素。 DESC 根据中心位置, 按照从远到近方式返回位置元素。...工作原理 sorted set 使用一种称为 Geohash 技术进行填充。经度纬度位是交错形成一个独特 52 位整数.

71020

利用RedisGeo功能实现查找附近

GEO相关命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素 Geohash 表示 GEOPOS 从 key 里返回所有给定位置元素位置(经度纬度) GEODIST 返回两个给定位置之间距离...WITHCOORD 将位置元素经度维度也一并返回,非必选。 WITHDIST 在返回位置元素同时, 将位置元素与中心点距离也一并返回距离单位查询单位一致,非必选。...比如返回 10 个,以避免出现符合结果太多而出现性能问题。 ASC|DESC 排序方式,非必选。默认情况下返回排序,但是大多数我们需要进行排序。...例如,我们在 cities:locs 查找(115.03,38.44)为中心,方圆200km城市,结果包含城市名称、对应坐标距离中心点距离(km),并按照从近到远排列。...,参见章节 2.2WITHCOORD、COUNT、ASC等,例如我们需要在返回结果包含坐标、中心距离、由近到远排序 5 条数据: RedisGeoCommands.GeoRadiusCommandArgs

1.4K30

用 Redis 查询 “附近的人” !妙啊!

: 返回两个给定位置之间距离; GEOHASH: 返回一个或多个位置对象Geohash表示; GEORADIUS: 给定纬度为中心,返回目标集合与中心距离不超过给定最大距离所有位置对象;...GEORADIUSBYMEMBER: 给定位置对象为中心,返回与其距离不超过给定最大距离所有位置对象。...在Redis源码geo.c文件注释,只说明了该文件为GEOADD、GEORADIUSGEORADIUSBYMEMBER实现文件(其实在也实现了另三个命令)。从侧面看出其他三个命令为辅助命令。...,返回目标集合与中心距离不超过给定最大距离所有位置对象。...WITHHASH: 52 位有符号整数形式返回位置对象经过原始 geohash 编码有序集合分值。这个选项主要用于底层应用或者调试,实际作用并不大。

22740

利用RedisGeo功能实现查找附近位置

GEO相关命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素 Geohash 表示 GEOPOS 从 key 里返回所有给定位置元素位置(经度纬度) GEODIST 返回两个给定位置之间距离...WITHCOORD 将位置元素经度维度也一并返回,非必选。 WITHDIST 在返回位置元素同时, 将位置元素与中心点距离也一并返回距离单位查询单位一致,非必选。...比如返回 10 个,以避免出现符合结果太多而出现性能问题。 ASC|DESC 排序方式,非必选。默认情况下返回排序,但是大多数我们需要进行排序。...例如,我们在 cities:locs 查找(115.03,38.44)为中心,方圆200km城市,结果包含城市名称、对应坐标距离中心点距离(km),并按照从近到远排列。...,参见章节 2.2WITHCOORD、COUNT、ASC等,例如我们需要在返回结果包含坐标、中心距离、由近到远排序 5 条数据: RedisGeoCommands.GeoRadiusCommandArgs

2.3K50

使用Redis实现附近的人及打车服务

这就要用到GEO类型GeoHash编码。 工作原理 sorted set 使用一种称为 Geohash 技术进行填充。经度纬度位是交错形成一个独特 52 位整数....距离单位用户给定范围单位保持一致 WITHCOORD: 将位置元素经度维度也一并返回 WITHHASH: 52 位有符号整数形式返回位置元素经过原始 geohash 编码有序集合分值...这个选项主要用于底层应用或者调试, 实际作用并不大。 命令默认返回排序位置元素。...通过以下两个参数, 用户可以指定被返回位置元素排序方式: ASC 根据中心位置, 按照从近到远方式返回位置元素。 DESC 根据中心位置, 按照从远到近方式返回位置元素。...5 km ASC COUNT 10 进一步限定返回车辆信息: ASC,让返回车辆信息距离中心位置从近到远排序,以方便选择最近车辆 COUNT,指定返回车辆信息数量 可能5公里范围内车辆很多

1.2K20

面试遇到 Redis,我作为小白是这么被“刁难”!|还可以学到什么(1)?

前言:针对“附近的人”这一位置服务领域应用场景,常见可使用PG、MySQLMongoDB等多种DB空间索引进行实现。...假设地图上会显示自己为圆心,5公里为半径,这个范围内车。如何实现呢?最直观想法就是去数据库里面查表,计算并查询车距离用户小于等于5公里,筛选出来,把数据返回给客户端。...这样即使每一块里面的每条数据都计算一次相对距离,也比之前全都计算一次要快很多。 我们也都知道,现在用比较多数据库 MySQL、PostgreSQL 都原生支持 B+ 树。...同类问题: 我不知道mysql 查询那个记录,我怎么做加锁查询。索引是全部记录做排序 我不知道用户查询那个位置,我怎么对全部位置进行排序!地理位置本身有序,我怎么存储起来呀。...(integer) 2 //02 geopos命令:从key里返回所有给定位置元素位置(经度纬度) 127.0.0.1:6379> geopos china:city beijing 1) 1)

47630
领券