当前位置: 首页 > news >正文

建站公司有哪些服务平面设计网站制作

建站公司有哪些服务,平面设计网站制作,附近广告公司,浏览器大全网址前言 前面#xff0c;介绍了 Redis 的 5 大基本数据类型#xff1a;String、List、Hash、Set、Sorted Set#xff0c;它们可以满足绝大多数的数据存储需求#xff0c;但是在面对海里数据统计时#xff0c;它们的内存开销很大。所以对于一些特殊的场景#xff0c;它们是无…前言 前面介绍了 Redis 的 5 大基本数据类型String、List、Hash、Set、Sorted Set它们可以满足绝大多数的数据存储需求但是在面对海里数据统计时它们的内存开销很大。所以对于一些特殊的场景它们是无法支持的。所以Redis 还提供了 3 种扩展数据类型分别是 Bitmap、HyperLogLog、GEO。今天再介绍下 GEO。 1.面向 LBS 应用的 GEO 数据类型 日常生活中“附近停车场”、打车软件的叫车这些都离不开基于位置信息服务LBS的应用。LBS 应用访问的数据是和人或物关联的一组经纬度信息且要能查询相邻的经纬度范围Redis 的 GEO 就非常适合应用在 LBS 服务的场景中。 1.1 GEO 底层结构 在设计一个数据类型的底层结构时首先要知道要处理的数据有什么访问特点。所以需要先搞清楚位置信息到底是怎么存取的。 以叫车服务为例来分析下 LBS 应用中经纬度的存取特点 每辆网约车都有一个编号如 1001网约车需要将自己的经纬度信息如 117.273521 , 39.884737发给叫车应用。用户在叫车的时候叫车应用会根据用户的经纬度信息 117.273521 , 39.884740查找用户附件的车辆并进行匹配。等把位置相近的用户和车辆匹配上以后叫车应用就会根据车辆的编号获取车辆的信息并返回给用户。 可以看到一辆车或一个用户对应一组经纬度并且随着车或用户的位置移动相应的经纬度也会变化。 这种数据属于一个 key 例如车辆 ID 对应一个 value一组经纬度。当有很多车辆信息需要保存时就需要有一个集合来保存一系列的 key 和 value。Hash 集合类型可以快速存取一系列 key 和 value正好可以记录一系列车辆 ID 和经纬度的对应关系如下所示 此外Hash 类型的 HSET 操作可以快速的更新车辆变化的经纬度信息。 目前看来Hash 类型是一个不错的选择。但是一个 LBS 应用除了记录经纬度信息外还需要根据用户经纬度信息在车辆的 Hash 集合中进行范围查找。一旦涉及到范围查询就意味着集合中的数据是有序的但 Hash 类型是无需的不能满足要求。 Sorted Set 类型也支持一个 key 对应一个 value 的记录模式其中key 就是 Sorted Set 中的元素而 value 则是元素的权重分数。此外Sorted Set 可以根据元素的权重分数排序支持范围查询。这就能满足 LBS 服务中查找相邻位置的需求了。 而 GEO 类型的底层数据结构就是用 Sorted Set 来实现的。咱们还是接着叫车应用例子用 Sorted Set 来保存车辆的经纬度信息时Sorted Set 的元素是车辆 ID元素的权重分数是经纬度信息如下图所示 此时问题是Sorted Set 元素的权重分数是一个浮点数float 类型而一组经纬度包含的精度和纬度两个值是没法直接保存为一个浮点数。这就要用到 GEO 类型中的 GeoHash 编码了。 1.2 GeoHash 编码方法 Redis 采用了 GeoHash 编码方法这个方法的基本原理就是“二分区间区间编码”。当我们要对一组经纬度进行 GeoHash 编码时要先对经度和纬度分别编码然后把经纬度各自的编码组合成一个最终编码。 首先看下经度和纬度的单独编码过程。 对于一个地理位置来说经度范围是 [-180, 180]。GeoHash 编码会把一个经度值编码成一个 N 位的二进制值我们来对经度范围 [-180, 180] 做 N 次的二分区操作其中 N 可以自定义。在进行第一次区分时经度范围 [-180, 180] 会被分成两个子区间[-180, 0) 和 [0, 180]。此时看一下编码的经度值是落在了左分区还是右分区。 如果是落在做分区我们就用 0 表示如果落在右分区就用 1 表示。这样一来每做完一次二分区我们就可以得到 1 位编码值。再对经度值所属的分区再做一次二分区同时再次查看经度落在了新二分区的做分区还是右分区按照刚才的规则再做 1 位编码。当做完 N次的二分区后经度值就可以用一个 N bit 的数来表示了。 举个例子假设我们要编码的经度值是 117.273521 我们用 5 位编码值也就是 N 5做 5 次分区。 5. 先做第一次二分区操作把经度区间 [-180, 180] 分成两个子区间[-180, 0) 和 [0, 180]此时经度值 117.273521 是属于右分区 [0, 180]所以我们用 1 表示第一次二分区后的编码值。 6. 再做第二次二分区把经度值 117.273521 所属分区 [0, 180] 区间分成 [0, 90) 和 [90, 180]。此时经度值 117.273521 还是属于右分区 [90, 180]编码值仍为 1。 7. 第三次二分区经度值 117.273521 落在了左分区 [90, 135) 中所以第三次分区后的编码值就是 0。 8. 第四次二分区经度值 117.273521 落在了右分区 [112.5, 135]中所以第四次编码值就是 1。 9. 第五次二分区经度值 117.273521 落在了左分区 [112.5, 123.75) 中所以第五次次编码值就是 0。 最终做完 5 次分区后我们把经度值 117.273521 的 GeoHash 编码值为 11010。 对维度的编码方式和对经度一样只是经度的范围是 [-90, 90]GeoHash 编码的值为 10111下标展示了对纬度值 39.884737 的编码过程。 分区次数最小维度值二分区中间值最大维度值维度39.884737所在区间维度的GeoHash编码第一次-90090[0, 90]1第二次04590[0, 45)0第三次022.545[22.5, 45]1第四次22.533.7545[33.75, 45]1第五次33.7539.37545[39.375, 45)1 我们再把一组经纬度值都编完码后再把它们组合在一起组合的规则是 最终编码值的偶数位上依次是经度的编码值奇数位上依次是纬度的编码值其中偶数位从 0 开始奇数位从 1 开始。 我们把刚刚计算的经纬度117.273521, 39.884737的各自编码值 11010 和 10111 组合之后 第 0 位 经度的第 0 位 为 1第 1 位纬度度的第 0 位为 1第 2 位经度的第 1 位为 1依次类推就能得到最终的编码值 1 1 1 0 0 1 1 1 0 1加粗的为经度编码值其他是纬度编码值 用了 GeoHash 编码后原本无法表示权重的经纬度就可以用 1110011101 这个值来表示就可以保存为 Sorted Set 的权重分数了。 其实使用 GeoHash 编码后就相当于把整个地理空间划分成一个个放个每个放个对应了一个 GeoHash 中的一个分区。举个例子。 我们把经度区间 [-180,180] 做一次二分区把维度区间 [-90,90] 做一次二分区间就会得到 4 个分区。我们看看经度和纬度范围及对应的 GeoHash 组合编码 分区一[-180, 0) 和 [-90, 0)编码 00分区二[-180, 0) 和 [0, 90)编码 01分区三[0, 180) 和 [-90, 0)编码 10分区三[0, 180) 和 [0, 90)编码 11 这 4 个分区对应了 4 个方格每个方格覆盖了一定范围内的经纬度分区越多每个方格能覆盖到的地理位置就越小也就越精准。我们把所有方格的编码值映射到一维空间内相邻方格的 GeoHash 编码值基本也是接近的如下所示 所以我们使用 Sorted Set 范围查询得到的相近编码值在实际的地理空间上也是相邻的方格这就可以实现 LBS 应用搜索附件人或物的功能了。 不过需要注意的是有的编码值虽然在大小上接近但实际对应的方格确距离比较远。例如我们用 4 魏来做 GeoHash 编码把经度区间 [-180,180] 和纬度区间 [-90,90] 分成了 4 个分区一共 16 个分区。编码值为 0111 和 1000 的两个方格就离的比较远如下所示 所以为了避免查询不准确问题我们可以同时查询给定经纬度所在的方格周围的 4 个或 8 个方格。 好了现在我们知道 GEO 类型是把经纬度所在区间编码作为 Sorted Set 中元素的权重分数把和经纬度相关的车辆 ID 作为 Sorted Set 中元素本身的值保存下来这样相邻经纬度的查询就可以通过编码值的大小范围来实现了。 1.3 如何操作 GEO 类型 在使用 GEO 类型的时我们经常会用到两个命令分别是 GETADD 和 GEORADIUS。 GETADD把一组经纬度和相对应的一个 ID 记录到 GEO 类型集合中GEORADIUS会根据输入的经纬度未知查找这个纬度为中心的一定范围内的其他元素。 假设车辆 ID 是 1001经纬度位置是 117.273521, 39.884737我们可以用一个 GEO 集合保存所有车辆的经纬度集合 key 是 cars:locations。执行下面的这个命令就可以把 ID 号为 1001 的车辆的当前经纬度位置存入 GEO 集合中 GEOADD cars:locations 117.273521 39.884737 1001当用户想要查看自己附近的网约车是LBS 应用就可以使用 GEORADIUS 命令。例如LBS 应用执行下面的命令时Redis 会根据输入的用户的经纬度信息 117.273521 , 39.884740查找这个经纬度为中心的 5 公里内的车辆信息并返回给 LBS 应用。 GEORADIUS cars:locations 117.273521 39.884740 5 km ASC COUNT 10当然你可以修改 “5” 这个参数来返回更大或更小范围内的车辆信息。此外还可以进一步限定返回的车辆信息。 比如我们可以使用 ASC 选项让返回的车辆按照距离这个中心位置从近到源的方式来排序以边防选择最近的车辆还可以使用 COUNT 选项指定返回的车辆信息的数量。毕竟5 公里内的车辆可能有很多如果返回全部信息会占用比较多的数据带宽这个选项可以帮助控制返回的数据量节省带宽。 可以看到使用 GEO 数据类型可以非常轻松地操作经纬度这种信息。
http://www.dnsts.com.cn/news/18891.html

相关文章:

  • 网站导航做外链wordpress添加og
  • 凡科网做网站收费吗做网站的学校有哪些
  • 免费模板简历网站上海网站建设联系
  • 益保网做推广网站吗咸阳个人兼职网站建设
  • 大学生创新创业网站建设申报书可以网站可以做免费的文案广告语
  • 人才交流中心招聘网站建设方案物流管理网站怎么做
  • 福州专业网站建设网络公司网站建设的开发程序
  • 视频教学网站开发西安网站建设工程
  • 类似于滴滴的网站商城建设快站优惠券app
  • 利津网站定制京东网上商城和京东有什么区别
  • 网站制作论文参考文献百度授权代理商
  • 海南省住房和城乡建设局网站做企业网站服务商
  • 做网站的设计流程greentree wordpress
  • wordpress文404贺州网站seo
  • 网站特效代码html网站设计师需要学什么
  • 贝贝网网站开发背景建站之星最新版本
  • 南京江宁 网站建设网站建设的合理建议
  • 网站不兼容怎么办优秀的软文广告案例
  • 免费做公司网站做wordpress模板赚钱
  • 手机站点桂林论坛网
  • 网站开发 前端 后端 如何结合品牌网站设计网站
  • 兰州 网站建设网页制作基础及html
  • 免费贴图素材网站什么样的网站适合推广
  • 网站首页开发wordpress demo iframe
  • 做网站的人还能做什么视频网站会员系统怎么做
  • 阿里巴巴网站网络营销的平台discuz网站建设教学视频教程
  • 网站建设费算广告费吗个人主页模版
  • 塘厦东莞网站建设中铁建工集团有限公司官网
  • wordpress可以做电影网站吗樟树市建设局网站
  • 中国城乡建设部证件查询网站seo快速优化软件网站