前言
基于内存操作 的字典型数据库 ,查询时间复杂度为o(1)
数据类型
String
最基本的数据类型,可以包含任何数据,例如:jpg图片或者序列化的对象 最大存储512MB
set key value ex 1000 nx
get key value
incr key
incrby key 2
decy key
decyby key 2
通过bit(1b = 8bit)来存储数据,每个value只能为0或1
插入元素的时间复杂度为O( 1 ) ,无论插入的数据量怎么变化,插入元素的耗时、耗空间都是一样的
查询元素的时间复杂度为O( N) ,随着数据量的增大,查询的时间越久
List 列表(存储String类型元素的列表)(重复+有序)
lpush stuNos 310110 310111 310112 310113
llen stuNos
lrange stuNos 0 3
rpop stuNos
brpop stuNos 1000
lpop stuNos
blpop stuNos 1000
Set集合(存储String类型元素的集合)(不重复+无序)
smembers key
sadd key value
srem key value
scard key
srandmember key
spop key
Zset 集合(存储String类型元素的集合)(不重复+有序)
zadd key score value
zincrby key 1 value
zrevrange key 0 -1 withscores
Hash
键值对集合,适合用于存储对象
Hyperloglogs(基数统计)
一种概率型数据结构,用于统计一组数据中不重复元素的个数 ,具有内存占用极小 (固定 12KB/键)和计算高效 特点 应用场景
UV 统计:日活、月活
流量监控:页面的独立 IP 访问数、广告的独立曝光用户数
用户行为分析:商品被不同用户浏览的次数、搜索关键词的去重搜索量
特点
网站UV统计
pfadd uv:0726 "u001" "u002"
pfadd uv:0726 "u001"
pfcount uv:0726
pfadd uv:0727 "u003" "u004"
pfcount uv:0727
pfmerge uv:072627 uv:0726 uv:0727
pfcount uv:072627
Geospatial 地理位置
用于存储和操作地理位置数据,支持存储经纬度坐标,并提供了丰富的查询能力(如附近点查询、距离计算、矩形区域检索等) 特点
存储高效:每个地理位置仅需存储经纬度(双精度浮点数,占 16 字节)和关联数据(如地点名称),内存占用低
查询快速:利用 ZSET 的有序性,通过几何计算快速筛选符合条件的位置(如“附近 1 公里内的餐厅”)
功能丰富:支持距离计算、范围查询、地理哈希(Geohash)编码等操作
添加地理位置
geoadd cities 116.4074 39.9042 beijing
geoadd cities 121.4737 31.2304 shanghai
geoadd cities 113.2644 23.1291 guangzhou
查询地理位置
geopos cities beijing
计算地理位置之间的直线距离
geodist cities beijing shanghai km
查询附近地点:GEORADIUS 和 GEORADIUSBYMEMBER
附近的人/商家:如外卖 App 中“附近的餐厅”、社交 App 中“附近的用户”
物流追踪:实时查询配送车辆是否在目标区域(如仓库周边 5 公里内)
地理围栏:监控设备是否进入/离开指定矩形或圆形区域(如车辆越界报警)
位置签到:记录用户签到位置,并统计某区域内的签到人数
withcoord:返回地点的经纬度
withdist:返回地点到中心的距离
withhash:返回地点的 Geohash 编码
asc| desc:按距离升序/降序排序
count ${count} :限制返回的结果数量
georadiusbymember cities beijing 10000 km asc withhash withcoord withdist
georadius cities 121.4737 31.2304 50 km asc withcoord withdist
zrem cities beijing