第四节:Geo类型介绍以及Redis事务、分布式锁

一. Geo类型

1. 类型说明

  Geo 是 Redis 3.2 版本后新增的数据类型,用来保存兴趣点(POI,point of interest)的坐标信息。可以实现计算两 POI 之间的距离、获取一个点周边指定距离的 POI。

2. 常用Api

  (1).GeoAdd:添加POI点

  (2).GeoDistance:获取两点之间的最短距离

  (3).GeoPosition:获取某个点的坐标

  (4).GeoRadius:获取某个点(不一定是POI)周边xx米以外的点

  (5).GeoRemove:删除某个点

代码分享:

 1            //1. 添加所有商店的地理位置
 2             db.GeoAdd("ShopsGeo", new GeoEntry(116.34039, 39.94218, "name1"));
 3             db.GeoAdd("ShopsGeo", new GeoEntry(116.340934, 39.942221, "name2"));
 4             db.GeoAdd("ShopsGeo", new GeoEntry(116.341082, 39.941025, "name3"));
 5             db.GeoAdd("ShopsGeo", new GeoEntry(116.340848, 39.937758, "name4"));
 6             db.GeoAdd("ShopsGeo", new GeoEntry(116.342982, 39.937325, "name5"));
 7             db.GeoAdd("ShopsGeo", new GeoEntry(116.340866, 39.936827, "name6"));
 8 
 9             //2. 计算商店name1和name2之间的距离(单位m)
10             double? dist = db.GeoDistance("ShopsGeo", "name1", "name5", GeoUnit.Meters);
11 
12             //3. 获取name1商店的坐标
13             GeoPosition? pos = db.GeoPosition("ShopsGeo", "name1");
14 
15             //4. 获取一个 name2 周边的200内的点: 
16             GeoRadiusResult[] results = db.GeoRadius("ShopsGeo", "name2", 200, GeoUnit.Meters);
17             foreach (GeoRadiusResult result in results)
18             {
19                 Console.WriteLine("Id=" + result.Member + ",位置" + result.Position + ",距离" + result.Distance);
20             }
21 
22             //5.  获取一个坐标(116.34092, 39.94223)(这个坐标不一定是 POI)周边的 POI: 
23             GeoRadiusResult[] results2 = db.GeoRadius("ShopsGeo", 116.34092, 39.94223, 200, GeoUnit.Meters);
24             foreach (GeoRadiusResult result in results2)
25             {
26                 Console.WriteLine("Id=" + result.Member + ",位置" + result.Position + ",距离" + result.Distance);
27             }
28 
29             //6. 删除
30             bool d1 = db.GeoRemove("ShopsGeo", "name2");

3. 案例

  地图上点相关的操作,方圆xx米内有多少个商店,某两个商店间的距离

 

二. Redis事务

三. Redis分布式锁

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

猜你喜欢

转载自www.cnblogs.com/yaopengfei/p/11946747.html