每日一Go-43、Go+Redis实现附近的人和场馆
很多社交APP都有附近的人和附近的店铺、骑手等功能,那么这个功能是如何实现的呢?其实是利用Redis的GEO命令。

一、为什么选Redis?

Redis提供了GEO系列命令,底层基于GeoHash+ZSet,有如下优势:

  • 内存级别速度

  • 支持距离、范围、排序

  • 不用自己写复杂索引

特别适合的场景有:

  • 附近的人

  • 附近的店铺

  • 附近的司机/骑手

二、Redis GEO核心命令

命令
作用
GEOADD
添加位置
GEOPOS
查询坐标
GETDIST
计算距离
GEORADIUS
按坐标查附近半径内的人
GEORADIUSBYMEMBER
按某人查附近
GEOSEARCH
功能和GEORADIUS一样,但是可以知道查询范围为长方形区域

新版的redis推荐用GETSEARCH,而不是GEORADIUS。

三、直接写代码吧

3.1 准备全局Redis客户端

internal/global/redis.go

/* generated by comer,https://github.com/imoowi/comer Copyright © 2023 jun<simpleyuan@gmail.com> */packageglobalimport("github.com/redis/go-redis/v9""github.com/spf13/cast""github.com/spf13/viper""go.uber.org/zap")// 全局Redis客户端varRedis*redis.Client// 初始化redisfuncinitRedis(){addr:=viper.GetString("redis.addr")ifaddr==""{panic("请在配置文件里配置【redis.addr")}pass:=viper.GetString("redis.password")ifpass==""{panic(