Redis---三个特殊数据类型与命令

这三个特殊数据类型应用场景比较多

Genospatial 地理位置

此功能可以推算地理位置的信息,俩地之间的距离,方圆几里的人
一般都是通过java代码导入
只有六个命令

geoadd 添加指定的空间地理位置

  • geoadd k 经度 纬度 k1 经度 纬度 k2 …
  • 有效的纬=经度 -180 ~180 有效的纬度 -85.05 ~ 85.05

geopos 从k 里查询 具体地点(k2)的经纬度

  • geodist k k1

geolist 返回俩个给定位置之间的距离

  • geolist k k1 k2 单位
  • 如果俩个位置之间的其中一个不存在,则返回空
  • 单位
    • m 米
    • km 千米
    • mi 英里
    • ft 英尺

georadius 以给定的经纬度为中心,找出某一半径内的元素

  • georadius k 经度 纬度 半径 单位 [withdist] (显示到中心距离) [withcoord] (显示经纬度) [ count 1] (筛选出指定个数的元素)

georadiusByMember 以给定的元素为中心,找出某一个半径内的元素

  • georadiusByMember k k1 半径 单位

geohash 返回一个或多个位置元素的geohash表示

  • 该命令将返回11位的geohash字符串 一般用不到
  • geohash k k1 k2 …

geo 底层的实现原理就是 zset 我们可以通过Zset的命令来操作geo !

Hyperloglog 基于基数统计的算法的一种数据结构

什么是基数
根据对等这种关系对集合进行分类,凡是互相对等的集合就划入同一类。这样,每一个集合都被划入了某一类。任意一个集合A所属的类就称为集合A的基数(可以理解为不重复元素的个数),记作|A|(或cardA)。这样,当A 与B同属一个类时,A与B 就有相同的基数,即|A|=|B|。而当 A与B不同属一个类时,它们的基数也不同。

优点:占用的内存十分小,如果要从内存角度来比较的话 Hyperloglog首选 (但是有 0.81%的错误率,统计UV任务,可以忽略不计)
UV:访问某站点的用户数

  • 命令只有三个 pfadd pfcount pfmerge
  • pfadd k1 v1 v2 v3 … 创建添加元素
  • pfcount k1 计数
  • pfadd k2 v1 v2 v3 …
  • pfmerge newk k1 k2 合并俩组 k1和k2 (k1 k2 的并集)
  • pfcount newk 查看并集的数量
    在做 UV任务时,如果一个用户重复查看一篇文章,可以存入,在求访问量时,输出和作者的并集,会自动去重
    在做UV计数时,如果有容错,千万使用Hyperloglog

Bitmap 位图 采用位存储 操作二进制位来进行记录

统计用户信息,活跃 不活跃 | 登录 未登录 | 打卡 未打卡 俩个状态的都可以使用 bitmaps

  • 这里面的 v 只能取 0 1
  • setbit k k1 v
  • getbit k k1
  • bitcount k 统计k中 v是1的个数
用例 ---- 成员打卡功能
setbit  userid  1 1  //设置星期一打卡
setbit   userid  2 0  //星期二没打卡
.....
//查看某一天是否打卡
getbit  userid  1  //查看星期一是否打卡
// 统计打卡的天数
bitcount userid //统计打卡的天数  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值