Redis之三种特殊数据类型

该笔记大部分搬运B站遇见狂神说的Redis,顺便把图文合并记录,便于回顾,仅用于学习!
视频地址:https://www.bilibili.com/video/BV1S54y1R7SB?t=250 作者真的非常好,记得三连
如有侵权,请联系删除!

1. Geospatial(地理位置)

  • 查询经纬度工具:http://www.jsons.cn/lngcode/
  • 这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作
  • GEO底层的实现原理其实就是Zset!

1.1 相关命令

  • GEOADD
  • GEODIST
  • GEOHASH
  • GEOPOS
  • GEORADIUS
  • GEORADIUSBYMEMBER

1.2 geoadd

  • geoadd:添加地理位置
  • 规则:
    • 两级无法直接添加,我们一般会下载城市数据,直接通过Java程序一次性导入
命令 描述 示例
geoadd key longitude latitude member [longitude latitude member …] 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。 127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqi 114.05 22.52 shenzheng
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hanzhou 108.96 34.26 xian
(integer) 2

1.3 geopos

命令 描述 示例
geopos key member [member …] 从key里返回所有给定位置元素的位置(经度和纬度)。 127.0.0.1:6379> geopos china:city beijing
1) 1) “116.39999896287918091”
2) "39.90000009167092543"
127.0.0.1:6379> geopos china:city beijing shanghai
1) 1) “116.39999896287918091”
2) "39.90000009167092543"
2) 1) “121.47000163793563843”
2) “31.22999903975783553”

1.4 geodist

命令 描述 示例
geodist key member1 member2 [unit] 返回两个给定位置之间的距离。
如果两个位置之间的其中一个不存在, 那么命令返回空值。指定单位的参数 unit 必须是
以下单位的其中一个:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
127.0.0.1:6379> geodist china:city beijing shanghai km
"1067.3788"

1.5 georadius

  • 获取附近的人
命令 描述 示例
georadius key longitude latitude radius m|km|ft|mi [WITHCOORD][WITHDIST] [WITHHASH] [COUNT count] 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
范围可以使用以下其中一个单位:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqi"
2) "xian"
3) "shenzheng"
4) “hanzhou”

1.6 georadiusbymember

命令 描述 示例
georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] 找出位于指定元素周围的其他元素 127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
1) "beijing"
2) “xian”

1.7 geohash(了解即可)

命令 描述 示例
geohash key member [member …] 返回一个或多个位置元素的 Geohash 表示。 127.0.0.1:6379> geohash china:city beijing chongqi
1) "wx4fbxxfke0"
2) “wm5xzrybty0”

2. Hyperloglog(基数统计)

2.1 简介

  • Redis HyperLogLog 是用来做基数统计的算法。
  • 花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。
  • 因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
  • 其底层使用string数据类型。

2.2 相关命令

命令 描述 示例
pfadd key element[element…] 添加指定元素到 HyperLogLog 中 127.0.0.1:6379> pfadd myset a b c d e f g h
(integer) 1
127.0.0.1:6379> pfadd myset2 q w e a s d z x c e r g h
(integer) 1
pfcount key[key…] 返回给定 HyperLogLog 的基数估算值。 127.0.0.1:6379> pfcount myset
(integer) 8
127.0.0.1:6379> pfcount myset2
(integer) 12
pfmerge destkey sourcekey[sourcekey] 将多个 HyperLogLog 合并为一个 HyperLogLog 127.0.0.1:6379> pfmerge myset3 myset myset2
OK
127.0.0.1:6379> pfcount myset3
(integer) 14

2.3 应用场景

应用场景:
网页的访问量(UV):一个用户多次访问,也只能算作一个人。

3.BitMaps(位图)

3.1 简介

  • 使用位存储,信息状态只有 0 和 1
  • Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR,NOT以及其它位操作。

3.2 相关命令

命令 描述 示例
setbit key offset value 为指定key的offset位设置值 127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0
getbit key offset 获取offset位的值 127.0.0.1:6379> getbit sign 5
(integer) 0
bitcount key [start end] 统计字符串被设置为1的bit数,也可以指定统计范围按字节 127.0.0.1:6379> bitcount sign 0 6
(integer) 3
bitop operration destkey key[key…] 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。(处理不同长度的字符串)
operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种
bitpos key bit [start] [end] 返回字符串里面第一个被设置为1或者0的bit位。start和end只能按字节,不能按位

3.3 应用场景

应用场景:

  • 签到统计、状态统计
上一篇:Redis操作


下一篇:四、六级翻译常用句型归纳汇总