场景:

根据IP地址判断用户所在地,虽然网上有好多篇了,但我记录一个一看就懂的,不用看超长文字再自己理解了。

我们有城市和IP地址段的对应关系,如:

上海: 202.127.0.0 ~ 202.127.4.255

北京: 122.200.64.0 ~ 122.207.255.255

此时如果用户的IP地址为122.202.2.0,我们就能根据这个表知道他的地址位于北京。

方法:

使用有序集合记录这个表,每个城市存储两条数据,一条是城市名对应的分数为最大IP地址。另一条是“#”加上城市名对应的分数为最小IP地址。

分析:

取大于当前IP的最近的上一个分数值,如果值是#开头,说明是某一个城市的最小IP,就是当前IP不在任何城市范围内,如果不是#开头,那IP就属于这个城市。

|----上海最大IP(80=>sh)
|----上海最小IP(50=>#sh)
|----北京最大IP(30=>bj)
|----北京最小IP(20=>#bj)

代码实现:

//先用ip2long把IP地址转为对应的十进制数,这里为了方便直接使用虚拟数字表示
$redis->zAdd('zset', 20, '#bj'); //最小IP加#
$redis->zAdd('zset', 30, 'bj');
$redis->zAdd('zset', 50, '#sh'); //最小IP加#
$redis->zAdd('zset', 80, 'sh'); //获取IP对应的城市
$cityIp = 34;
$b = $redis->zRangeByScore('zset', $cityIp, '+inf', array( 'limit'=>array(0,1) )); if ($b) {
if (strpos($b[0], '#') === 0) {
echo '城市不在';
} else {
echo '城市是',print_r($b);
}
} else {
echo '城市不存在';
}

redis技巧--IP地址查询对应城市的更多相关文章

  1. 基于redis的IP地址快速查询

    在一些大数据处理中,我们需要用到IP地址查询,一般为了查询一个IP属于哪个地址,我们通常需要根据一个IP数据库来查询,网络上比较常用的IP库是纯真IP数据库.IP数据库里面的记录一般存储方式为IP的开 ...

  2. API之IP地址查询---权威的IP地址查询接口集合

    原文地址:http://yushine.iteye.com/blog/1717586 推荐实用IP138 http://www.baidu.com/s?wd=IP&rsv_spt=1& ...

  3. 微信小程序开发-IP地址查询-例子

    微信小程序开发  小程序搜索框  IP地址查询  搜索查询  样例 微信小程序 开发 参考   https://mp.weixin.qq.com/debug/wxadoc/dev/component/ ...

  4. IP地址查询接口及调用方法

    1.查询地址 搜狐IP地址查询接口(IP):http://pv.sohu.com/cityjson 1616 IP地址查询接口(IP+地址):http://w.1616.net/chaxun/ipto ...

  5. [1]IP地址查询

    今天起开始玩百度APIStore里面的免费API.以前用过的有12306的:数据.接口,有时间整理出来,12306的有点乱就是了.还有扇贝以及有道的API,之前用在留言板里自动翻译,公司用过百度地图以 ...

  6. IP地址查询接口

    新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 新浪多地域测试方法:http://int.dpool. ...

  7. 根据IP地址查询所在地

    using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Tex ...

  8. Android中由IP地址查询经纬度坐标的实例

    大家都知道,根据IP地址就可以知道它所在的具体位置,在Android中同样可以由IP地址得到它的位置,即具体的地理经纬度坐标. 本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的 ...

  9. 齐全的IP地址查询接口及调用方法(转)

    设计蜂巢IP地址查询接口:http://www.hujuntao.com/api/ip/ip.php 腾讯IP地址查询接口:http://fw.qq.com/ipaddress 新浪IP地址查询接口: ...

随机推荐

  1. yum安装php,php-fpm

    1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 yum remove php.x86_64 php-cli.x86_64 ph ...

  2. WPF 自定义DateControl DateTime控件

    自定义日期控件,月份选择.如下是日期的一些效果图. 具体的样式.颜色可以根据下面的代码,自己调节即可    1.日期控件的界面 <UserControl x:Class="WpfApp ...

  3. 特殊文件: /dev/null和/dev/tty

    转自:http://www.cnblogs.com/stephen-liu74/archive/2011/11/10/2240461.html Linux系统提供了两个对Shell编程非常有用的特殊文 ...

  4. HDOJ 1326. Box of Bricks 纯水题

    Box of Bricks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. 项目游戏开发日记 No.0x000002

    14软二杨近星(2014551622) 项目开发的开始, 到现在已经很久了, 软件工程的课也上了很久了, 不过, 我们的游戏现在依然还没有影子, 只能说...还是啥也不会... 从一开始, 兴致勃勃地 ...

  6. java基础学习02(简单的java程序)

    简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...

  7. xcode8权限以及相关设置

    我们需要打开info.plist文件添加相应权限的说明,否则程序在iOS10上会出现崩溃. 具体如下图: QQ20160914-0.png 注意,添加的时候,末尾不要有空格麦克风权限:Privacy ...

  8. js form 表达关于onpress 的一个问题

    <form id="search-form" method="get" action="/search"> <fields ...

  9. [LeetCode] Non-overlapping Intervals 非重叠区间

    Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...

  10. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...