该笔记大部分搬运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 应用场景
应用场景:
- 签到统计、状态统计