一、使用的Redis客戶端爲:ServiceStack.Redis
二、Redis 中的 GEO
Redis是咱們最爲熟悉的K-V數據庫,它常被拿來做爲高性能的緩存數據庫來使用,大部分項目都會用到它。從3.2版本開始它開始提供了GEO能力,用來實現諸如附近位置(e.g.某小區附近的籃球場 )、計算距離等這類依賴於地理位置信息的功能。
本次實例Demo中用到的GEO命令有:git
Redis命令 | 描述 |
GEOADD key longitude latitude member [longitude latitude member …] | 將指定的地理空間位置(緯度、經度、名稱)添加到指定的 key 中 |
GEODIST key member1 member2 [unit] | 返回兩個給定位置之間的距離 |
GEORADIUS key longitude latitude radius | 以給定的經緯度爲中心, 找出某一半徑內的元素 |
三、實例Demoredis
1 using ServiceStack.Redis; 2 using System; 3 using System.Collections.Generic; 4 using System.Text; 5 6 namespace RedisDemo 7 { 8 class NearByDemo 9 { 10 public static void Start() 11 { 12 var redisMangement = new RedisManagerPool("127.0.0.1:6379"); 13 var client = redisMangement.GetClient(); 14 15 //---寫入地理信息--- 16 RedisGeo[] redisGeos = new RedisGeo[] 17 { 18 new RedisGeo() 19 { 20 Longitude=117.12, 21 Latitude=39.08, 22 Member="tianjin" 23 }, 24 new RedisGeo() 25 { 26 Longitude=114.29, 27 Latitude=38.02, 28 Member="beijing" 29 } 30 }; 31 //GEOADD key longitude latitude member [longitude latitude member ...] 32 //summary: Add one or more geospatial items in the geospatial index represented using a sorted set 33 client.AddGeoMembers("geo", redisGeos); 34 35 //---獲取兩個地理位置之間的距離--- 36 //GEODIST key member1 member2 [unit] 37 //summary: Returns the distance between two members of a geospatial index 38 double distance = client.CalculateDistanceBetweenGeoMembers("geo", "tianjin", "beijing", "km"); 39 Console.WriteLine(distance); 40 41 //---獲取某城市方圓多少千米內的其餘城市(狹義)--- 42 //GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key] 43 //summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point 44 List<RedisGeoResult> geoResults = client.FindGeoResultsInRadius("geo", 115.03, 38.44, 200, "km"); 45 foreach (var item in geoResults) 46 { 47 Console.WriteLine($"{item.Member}--{item.Distance}--{item.Unit}"); 48 } 49 } 50 } 51 }