基于.Net Core的Redis实现查询附近的地理信息
1、使用的Redis客户端为:ServiceStack.Redis
2、Redis 中的 GEO
Redis是我们最为熟悉的K-V数据库,它常被拿来作为高性能的缓存数据库来使用,大部分项目都会用到它。从3.2版本开始它开始提供了GEO能力,用来实现诸如附近位置(e.g.某小区附近的篮球场 )、计算距离等这类依赖于地理位置信息的功能。
本次实例Demo中用到的GEO命令有:
| Redis命令 | 描述 |
| GEOADD key longitude latitude member [longitude latitude member …] | 将指定的地理空间位置(纬度、经度、名称)添加到指定的 key 中 |
| GEODIST key member1 member2 [unit] | 返回两个给定位置之间的距离 |
| GEORADIUS key longitude latitude radius | 以给定的经纬度为中心, 找出某一半径内的元素 |
3、实例Demo

using ServiceStack.Redis;
using System;
using System.Collections.Generic;
using System.Text; namespace RedisDemo
{
class NearByDemo
{
public static void Start()
{
var redisMangement = new RedisManagerPool("127.0.0.1:6379");
var client = redisMangement.GetClient(); //---写入地理信息---
RedisGeo[] redisGeos = new RedisGeo[]
{
new RedisGeo()
{
Longitude=117.12,
Latitude=39.08,
Member="tianjin"
},
new RedisGeo()
{
Longitude=114.29,
Latitude=38.02,
Member="beijing"
}
};
//GEOADD key longitude latitude member [longitude latitude member ...]
//summary: Add one or more geospatial items in the geospatial index represented using a sorted set
client.AddGeoMembers("geo", redisGeos); //---获取两个地理位置之间的距离---
//GEODIST key member1 member2 [unit]
//summary: Returns the distance between two members of a geospatial index
double distance = client.CalculateDistanceBetweenGeoMembers("geo", "tianjin", "beijing", "km");
Console.WriteLine(distance); //---获取某城市方圆多少公里内的其他城市(狭义)---
//GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
//summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point
List<RedisGeoResult> geoResults = client.FindGeoResultsInRadius("geo", 115.03, 38.44, , "km");
foreach (var item in geoResults)
{
Console.WriteLine($"{item.Member}--{item.Distance}--{item.Unit}");
}
}
}
}
基于.Net Core的Redis实现查询附近的地理信息的更多相关文章
- .NET Core 实现 Redis 批量查询指定格式的Key
一. 问题场景 Redis 作为当前最流行的内存型 NoSQL 数据库,被许多公司所使用,作为分布式缓存.我们在实际使用中一般都会为 key 带上指定的前缀或者其他定义的格式.当由于我们程序出现bug ...
- 基于.Net Core的Redis:基本数据类型及其应用场景与命令行操作
参考自:https://blog.csdn.net/only_yu_yy/article/details/78873735 https://blog.csdn.net/fenghuoliuxing99 ...
- asp.net core 使用 Redis 和 Protobuf
asp.net core 使用 Redis 和 Protobuf 前言 上篇博文介绍了怎么样在 asp.net core 中使用中间件,以及如何自定义中间件.项目中刚好也用到了Redis,所以本篇就介 ...
- C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入
C# 嵌入dll 在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...
- ASP.NET Core 使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis
ASP.NET Core 使用 Redis 实现分布式缓存:Docker.IDistributedCache.StackExchangeRedis 前提:一台 Linux 服务器.已安装 Docker ...
- .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存
注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- 基于EF Core的Code First模式的DotNetCore快速开发框架
前言 最近接了几个小单子,因为是小单子,项目规模都比较小,业务相对来说,也比较简单.所以在选择架构的时候,考虑到效率方面的因素,就采取了asp.net+entity framework中的code f ...
- asp.net core系列 32 EF查询数据 必备知识(1)
一.查询的工作原理 Entity Framework Core 使用语言集成查询 (LINQ) 来查询数据库中的数据. 通过 LINQ 可使用 C#(或你选择的其他 .NET 语言)基于派生上下文和实 ...
随机推荐
- JavaScript基础函数的声明(014)
1.函数的重要地位 函数(functions)在JavaScript里有着重要的地位,其原因有二: 它们是一种特殊的对象 它们提供作用域 说函数在JavaScript里是特殊的对象,因为: 程序的执行 ...
- Nginx 从入门到放弃(四)
前面我们学习了nginx的基本操作和日志管理,今天我们学习一下生产环境经常会用到的路由定位location设置,在工作中,经常可能会出现怎么设置的路由访问不到网页呀?总是出现404错误啊,这些都很有可 ...
- 每日一题 - 剑指 Offer 32 - III. 从上到下打印二叉树 III
题目信息 时间: 2019-06-25 题目链接:Leetcode tag:双端队列 难易程度:中等 题目描述: 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右 ...
- Windows 10 搭键开源IDS-Snort,简单过滤注入
关于Snort snort有三种工作模式:嗅探器.数据包记录器.网络入侵检测系统.嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上.数据包记录器模式把数据包记录到硬盘上.网路入侵检测模 ...
- 关于CSS自文档的思考_css声明式语言式代码注释
obert C. Martin写的<Clean Code>是我读过的最好的编程书籍之一,若没有读过,推荐你将它加入书单. 注释就意味着代码无法自说明 —— Robert C. Martin ...
- 前段人员必藏的7 个 CSS 好用的属性绝对干货
学习CSS是构建好看网页的一种方式. 但是,在学习过程中,我们倾向于(大部分时间)限制自己,一遍又一遍地使用相同的属性. 毕竟,我们是一种习惯性的动物,我们会使用自己习惯且熟悉的东西. 因此,在这篇文 ...
- ShuffleNetV1/V2简述 | 轻量级网络
ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大 ...
- Uni-app实战项目注意事项
注意: (1)本地开启端口 App running at: Local: http://localhost:8080/ Network: http://192.168.31.43:8080/ 后台人员 ...
- JAVASE经典面试问题(必须熟背),你Get到了吗?
JAVASE经典面试问题(必须熟背) 1. 编译java程序使用什么命令?运行java使用什么命令? javac *.java java 类名 2. 什么是JDK,什么是JRE,JDK与JRE有什么区 ...
- ES6入门(二)
目录 ES6入门(二) es6之解构赋值 数组的解构赋值 对象的解构赋值 字符串的解构赋值 数值和布尔值的解构赋值 函数参数的解构赋值 圆括号问题 ES6入门(二) es6之解构赋值 数组的解构赋值 ...