前文

简单介绍一下CEO。

正文

Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信 息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需 要实现这些功能的开发者来说是一大福音。

longitude、latitude、member分别是该地理位置的经度、纬度、成员。

1.增加地理位置信息

geoadd key longitude latitude member [longitude latitude member ...]

longitude、latitude、member分别是该地理位置的经度、纬度、成员.

cities:locations是上面5个城市地理位置信息的集合,现向其添加北京 的地理位置信息:

geoadd cities:locations 116.28 39.55 beijing

返回结果代表添加成功的个数,如果cities:locations没有包含beijing,那么返回结果为1,如果已经存在则返回0.

如果需要更新地理位置信息,仍然可以使用geoadd命令,虽然返回结果 为0。geoadd命令可以同时添加多个地理位置信息:

geoadd cities:locations 117.12 39.08 tianjin 114.29 38.02 shijiazhuang 118.01 39.38 tangshan 115.29 38.51 baoding
  1. 获取地理位置信息
geopos key member [member ...]

例如:

 geopos cities:locations tianjin

3.获取两个地理位置的距离

geodist key member1 member2 [unit]

其中unit代表返回结果的单位,包含以下四种: ·m(meters)代表米。 ·km(kilometers)代表公里。 ·mi(miles)代表英里。·ft(feet)代表尺。

geodist cities:locations tianjin beijing km

4.获取指定位置范围内的地理信息位置集合

georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key] georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]

georadius和georadiusbymember两个命令的作用是一样的,都是以一个地 理位置为中心算出指定半径内的其他地理信息位置,不同的是georadius命令 的中心位置给出了具体的经纬度,georadiusbymember只需给出成员即可。其 中radiusm|km|ft|mi是必需参数,指定了半径(带单位),这两个命令有很多 可选参数,如下所示:

·withcoord:返回结果中包含经纬度。

·withdist:返回结果中包含离中心节点位置的距离。

·withhash:返回结果中包含geohash,有关geohash后面介绍。

·COUNT count:指定返回结果的数量。

·asc|desc:返回结果按照离中心节点的距离做升序或者降序。

·store key:将返回结果的地理位置信息保存到指定键。

·storedist key:将返回结果离中心节点的距离保存到指定键。

下面操作计算五座城市中,距离北京150公里以内的城市:

georadiusbymember cities:locations beijing 150 km

5.获取geohash

geohash key member [member ...]

Redis使用geohash[3]将二维经纬度转换为一维字符串,下面操作会返回 beijing的geohash值

geohash cities:locations beijing

geohash有如下特点:

·GEO的数据类型为zset,Redis将所有地理位置信息的geohash存放在zset 中。

type cities:locations

字符串越长,表示的位置更精确

·两个字符串越相似,它们之间的距离越近,Redis利用字符串前缀匹配 算法实现相关的命令。

·geohash编码和经纬度是可以相互转换的。 Redis正是使用有序集合并结合geohash的特性实现了GEO的若干命令。

  1. zrem key member

GEO没有提供删除成员的命令,但是因为GEO的底层实现是zset,所以 可以借用zrem命令实现对地理位置信息的删除。

总结

1)慢查询中的两个重要参数slowlog-log-slower-than和slowlog-max- len。

2)慢查询不包含命令网络传输和排队时间。

3)有必要将慢查询定期存放。

4)redis-cli一些重要的选项,例如--latency、–-bigkeys、-i和-r组合。

5)redis-benchmark的使用方法和重要参数。

6)Pipeline可以有效减少RTT次数,但每次Pipeline的命令数量不能无节 制。

7)Redis可以使用Lua脚本创造出原子、高效、自定义命令组合。

8)Redis执行Lua脚本有两种方法:eval和evalsha。

9)Bitmaps可以用来做独立用户统计,有效节省内存。

10)Bitmaps中setbit一个大的偏移量,由于申请大量内存会导致阻塞。

11)HyperLogLog虽然在统计独立总量时存在一定的误差,但是节省的 内存量十分惊人。

12)Redis的发布订阅机制相比许多专业的消息队列系统功能较弱,不 具备堆积和回溯消息的能力,但胜在足够简单。

13)Redis3.2提供了GEO功能,用来实现基于地理位置信息的应用,但 底层实现是zset。

下一大节,客户端的使用。

redis 简单整理——CEO[十五]的更多相关文章

  1. Redis进阶实践之十五 Redis-cli命令行工具使用详解第二部分(结束)

    一.介绍           今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完成第二部分.话不多说,开始我们今天的讲解.如果要想看第一篇文章,地址如下:http: ...

  2. Redis学习笔记(十五)Sentinel(哨兵)(中)

    上一篇 我们模拟了单机器下哨兵模式的搭建,那么接下来我们看下哨兵模式的实现与工作. 为什么又分成两篇呢?因为篇幅太长(偷懒),再一个这篇主要说的是Sentinel的初始化以及信息交换,下一篇着重说下状 ...

  3. Vue-admin工作整理(十五):Ajax-跨域问题

    跨域的定义: 解决方法: 1.前端通过配置来解决跨域问题:自定义的vue.config.js配置文件来进行跨域处理:就是只要存在跨域现象 都会代理到一个指定的地址上 devServer: { prox ...

  4. 【leetcode 简单】 第九十五题 数字转换为十六进制数

    给定一个整数,编写一个算法将这个数转换为十六进制数.对于负整数,我们通常使用 补码运算 方法. 注意: 十六进制中所有字母(a-f)都必须是小写. 十六进制字符串中不能包含多余的前导零.如果要转化的数 ...

  5. 【leetcode 简单】第十五题 加一

    给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: ...

  6. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  7. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  8. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  9. 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

    孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...

  10. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

随机推荐

  1. 使用fastJson中的JSONObject对象简化POST请求传参-2022新项目

    一.业务场景 Java项目开发中,经常会用到远程调用,不管是POST请求,Feign远程调用,还是使用Resttemplate中的POST方法等等都需要传递参数. 可是如何更好的传递参数呢?之前自己开 ...

  2. mongo Payload document size is larger than maximum of 16777216. 如何处理

    MongoDB中的文档大小限制为16MB(即16777216字节).如果你遇到Payload document size is larger than maximum of 16777216的错误,意 ...

  3. 软件icon制作流程,就一张256-256的图即可,一键生成windows所有格式

    软件icon制作流程,就一张256-256的图即可,一键生成windows所有格式 好久不用这个都有些生疏了,还特意做了好几个尺寸的图,结果白弄了,软件会自动生成. 1.准备256-256px的图 2 ...

  4. 动态挂载指定vue组件 Vue.extend $mount('#aaa111')

    模板中要有定位 <template> <div id="aaa111"></div> </template> 指定某个函数执行 im ...

  5. 22_播放器之使用SDL显示YUV视频

    简介 使用SDL实现简单的YUV播放器. 这里还需要使用到像素格式和计算图片大小,这两个我们直接使用ffmpeg来实现,因此需要使用ffmpeg的libavutil/avutil.h和libavuti ...

  6. MD5算法:密码学中的传奇

    MD5算法起源: MD5(Message Digest Algorithm 5)算法是由MIT的计算机科学家Ronald Rivest于1991年设计的一种消息摘要算法.MD5算法最初被用于提供数据完 ...

  7. python基础八(迭代器、生成器、生成式、递归、匿名函数、面向过程编程)

    一 迭代器 1.什么是迭代器 迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而 继续的,单纯的重复并不是迭代2.为何要有迭代器 迭代器是用来迭代取值的工具,而涉及到把多 ...

  8. RabbitMQ集群运维实践

    一.RabbitMQ的集群模式 主要有两种:普通集群模式和镜像队列模式.下面分别介绍这两种模式的原理: 1.普通集群模式: 在普通集群模式下,RabbitMQ的集群节点之间主要同步元数据,而不同步存储 ...

  9. 记录--你不知道的Js高级方法

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在Js中有一些比较冷门但是非常好用的方法,我在这里称之为高级方法,这些方法没有被广泛使用或多或少是因为存在一些兼容性的问题,不是所有 ...

  10. JavaScript知识总结 闭包篇

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 对闭包的理解 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问 ...