001_Redis 数据类型

前言

  • 基于内存操作字典型数据库,查询时间复杂度为o(1)

数据类型

String

  • 最基本的数据类型,可以包含任何数据,例如:jpg图片或者序列化的对象
  • 最大存储512MB
set key value ex 1000 nx # 同时包含以下2个操作(可以用作简单的分布式锁)
# setnx key value # key不存在时才可以添加
# setex key 1000 value # 添加key并指定value并设置过期时间为1秒
get key value # 查询指定key对于的value
incr key # 将 key 中储存的数字值增1
incrby key 2# 将 key 中储存的数字值增2
# 
decy key # 将 key 中储存的数字值减1
decyby key  2# 将 key 中储存的数字值减2
  • Bitmap(特殊String类型)
通过bit(1b = 8bit)来存储数据,每个value只能为0或1
插入元素的时间复杂度为O(1),无论插入的数据量怎么变化,插入元素的耗时、耗空间都是一样的
查询元素的时间复杂度为O(N),随着数据量的增大,查询的时间越久

List 列表(存储String类型元素的列表)(重复+有序)

lpush stuNos 310110 310111 310112 310113 # 4【依次从左侧添加数据】
llen stuNos # 4
lrange stuNos 0 3 # [310113, 310112, 310111, 310110]
  • 队列操作
# 【从右边开始:移除列表的最后一个元素并返回,如果列表没有元素则返回null】
rpop stuNos # 310110
# 【从右边开始:移除列表的最后一个元素并返回,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止】
brpop stuNos 1000 # 310111
  • 栈操作
# 【从左边开始:移除列表的最后一个元素并返回,如果列表没有元素则返回null】
lpop stuNos # 310113
# 【从左边开始:移除列表的最后一个元素并返回,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止】
blpop stuNos 1000 # 310111

Set集合(存储String类型元素的集合)(不重复+无序)

smembers key # 查询集合列表
  • 场景1:商品点赞和取赞
sadd key value # 添加元素(对商品进行点赞)
srem key value # 删除元素(对商品进行取赞)
scard key # 查询集合大小 (获取商品的点赞数量)
  • 场景2:获取随机数
srandmember key # 随机获取1个元素并返回
  • 场景3:抽奖
spop key # 随机删除1个元素并返回

Zset 集合(存储String类型元素的集合)(不重复+有序)

zadd key score value # 添加元素
  • 场景1:排行榜
zincrby key 1 value # 为集合key中成员value的score自增1
zrevrange key 0 -1 withscores # 按照score倒序排列(按照score倒序排列元素,门店销售量排行榜)

Hash

  • 键值对集合,适合用于存储对象
    在这里插入图片描述

Hyperloglogs(基数统计)

  • 一种​​概率型数据结构,用于统计一组数据中​​不重复元素的个数​​,具有内存占用极小​​(固定 12KB/键)和​计算高效​​特点
  • 应用场景
​​UV 统计​​:日活、月活
​​流量监控​​:页面的独立 IP 访问数、广告的独立曝光用户数
​​用户行为分析​​:商品被不同用户浏览的次数、搜索关键词的去重搜索量
  • 特点
    在这里插入图片描述
    在这里插入图片描述

网站UV统计

  • 添加【0726号】的用户UV
pfadd uv:0726 "u001" "u002" # 1表示添加成功
pfadd uv:0726 "u001" # 0表示添加失败,已存在该元素
pfcount uv:0726 # 2表示基数
  • 添加【0727号】的UV
pfadd uv:0727 "u003" "u004" # 1表示添加成功
pfcount uv:0727 # 2表示基数
  • 合并【0726号】和【0727号】的用户UV
pfmerge uv:072627 uv:0726 uv:0727 # OK表示合并成功(合并uv:0726和uv:0727到uv:072627)
pfcount uv:072627 # 4表示基数

Geospatial 地理位置

  • 用于存储和操作地理位置数据,支持存储经纬度坐标,并提供了丰富的查询能力(如附近点查询、距离计算、矩形区域检索等)
  • 特点
​​存储高效​​:每个地理位置仅需存储经纬度(双精度浮点数,占 16 字节)和关联数据(如地点名称),内存占用低
​​查询快速​​:利用 ZSET 的有序性,通过几何计算快速筛选符合条件的位置(如“附近 1 公里内的餐厅”)
​​功能丰富​​:支持距离计算、范围查询、地理哈希(Geohash)编码等操作

添加地理位置

geoadd cities 116.4074 39.9042 beijing   # 北京(经度 116.4074,纬度 39.9042)
geoadd cities 121.4737 31.2304 shanghai  # 上海
geoadd cities 113.2644 23.1291 guangzhou # 广州

查询地理位置

geopos cities beijing

计算地理位置之间的直线距离

geodist cities beijing shanghai km  # 返回约 1067.376 km

查询附近地点:GEORADIUS 和 GEORADIUSBYMEMBER

  • 使用场景
​​附近的人/商家​​:如外卖 App 中“附近的餐厅”、社交 App 中“附近的用户”
​​物流追踪​​:实时查询配送车辆是否在目标区域(如仓库周边 5 公里内)
​​地理围栏​​:监控设备是否进入/离开指定矩形或圆形区域(如车辆越界报警)
​​位置签到​​:记录用户签到位置,并统计某区域内的签到人数
  • 参数说明
withcoord:返回地点的经纬度
withdist:返回地点到中心的距离
withhash:返回地点的 Geohash 编码
asc|desc:按距离升序/降序排序
count ${count}:限制返回的结果数量
  • 以北京为中心,查询 10000 公里内的城市
georadiusbymember cities beijing 10000 km asc withhash withcoord withdist
  • 以固定经纬度为中心,查询 50 公里内的城市
georadius cities 121.4737 31.2304 50 km asc withcoord withdist
  • 删除指定坐标
zrem cities beijing
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大能嘚吧嘚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值