常用命令
1.1 基本命令
- set key value
如下:设置kv键值对,存货时长为30秒
- get key
- mset key value [key value ...]
- mget key [key ...]
同时设置或者获取多个键值对
- getrange
获取指定区间范围内的值,类似between......and的关系
从零到负一表示全部
- setrange
设置指定区间范围内的值,格式是setrange key值 具体值
- setnx key value
- setex 设置带过期时间的键
- setex 键 秒 值
1.3 应用场景
2.1 简介
单key多value
2.2 常用命令
2.3 应用场景
3.1 简介
kv模式不变,但是v是一个键值对
3.2 常用命令
4.1 简介
单键多value且value无重复
4.2 常用命令
4.3 应用场景
5.1 简介
在set基础上添加一个score分数
之前是set k1 v1 v2 ...
现在是Zset k1 score1 v1 score2 v2 ...
5.2 常用命令
5.3 应用场景
6.1 简介
说明:用String类型作为底层数据结构实现的一种统计二值状态的数据类型
位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。
Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)
概括
位图就是由0和1状态表现的二进制位bit数组
6.2 需求场景
6.3 基本命令
- setbit
setbit key offset value
含义:将key位图偏移量为offset的数据设为value
key:要操作的位图键名
offset:操作该位图哪一位的数据(数据偏移量)
value:只能是0或者1
- getbit
getbit key offset
含义:获取key位图偏移量为offset上的value值
key:要操作的位图键名
offset:偏移量
- strlen
strlen key
含义:获取key位图所占用的字节大小
返回8的整数位,因为8bit等于1字节,位图按照字节进行扩容
如:此时该位图开辟到第九个bit位空间时,将返回2字节即该位图空间占用为2字节
- bitcount
bitcount key
含义:统计key位图上所有bit位值为1的总和进行返回
- bitop
bitop and key key1 [key2 ...]
含义:将key1、key2等等key中内容一样的值统计到key中,后通过bitcount可查到内容一样的值有多少
如下:将用户2001和2002中同一个bit位中值一样的数据统计到k2中,后通过bitcount命令返回k2存的值
127.0.0.1:6379> setbit 2001 0 1 (integer) 0 127.0.0.1:6379> setbit 2001 1 1 (integer) 0 127.0.0.1:6379> setbit 2001 2 1 (integer) 0 127.0.0.1:6379> setbit 2001 3 1 (integer) 0 127.0.0.1:6379> setbit 2002 2 1 (integer) 0 127.0.0.1:6379> setbit 2002 3 1 (integer) 0 127.0.0.1:6379> setbit 2002 4 1 (integer) 0 127.0.0.1:6379> bitop and k2 2001 2002 (integer) 1 127.0.0.1:6379> bitcount k2 (integer) 2
7.1 简介
基数统计:用于统计数据集中去重后剩余的元素个数
7.2 需求场景
uv:unique visitor独立访客,可理解为用户IP
为防止某些用户进行刷单或者刷访问量即可用到基数统计,将所有uv相同的去重后统计进行统计
7.3 基本命令
127.0.0.1:6379> pfadd p1 1 1 1 2 3 4 #将数据添加到类型为HyperLogLog的p1中 (integer) 1 #返回1为true 127.0.0.1:6379> pfadd p2 2 2 2 2 3 (integer) 1 127.0.0.1:6379> pfcount p1 #去重 (integer) 4 #去重后的实际个数 127.0.0.1:6379> pfcount p2 (integer) 2 127.0.0.1:6379> pfmerge destkey p1 p2 #将p1和p2结果集合并到名为destkey的结果集中 OK 127.0.0.1:6379> pfcount destkey (integer) 4
8.1 简介
移动互联网时代LBS应用越来越多,交友软件中附近的小姐姐、外卖软件中附近的美食店铺、高德地图附近的核酸检查点等等,那这种附近各种形形色色的XXX地址位置选择是如何实现的?
地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名取得他在地球的位置。
例如滴滴打车,最直观的操作就是实时记录更新各个车的位置,
然后当我们要找车时,在数据库中查找距离我们(坐标x0,y0)附近r公里范围内部的车辆
使用如下SQL即可:
select taxi from position where x0-r < x < x0 + r and y0-r < y < y0+r 但是这样会有什么问题呢?
1.查询性能问题,如果并发高,数据量大这种查询是要搞垮数据库的
2.这个查询的是一个矩形访问,而不是以我为中心r公里为半径的圆形访问。
3.精准度的问题,我们知道地球不是平面坐标系,而是一个圆球,这种矩形计算在长距离计算时会有很大误差
8.2 基本命令
- GEOADD
多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定key中
- GEOPOS
从键里面返回所有给定位置元素的位置(经度和纬度)
- GEODIST
返回两个给定位置之间的距离
- GEORADIUS
以给定经纬度为中心,返回与中心距离不超过最大指定距离的所有元素
- GEOHASH
weixinwei'xin
9.1 简介
Redis版的MQ消息中间件+阻塞队列
实现消息队列,支持消息队列持久化、支持自动生成全局唯一id、支持ack消息确认模式、支持消费组模式,让消息队列更加安全可靠
一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容
1 | Message Content | 消息内容 |
2 | Consumer group | 消费组,通过XGROUP CREATE 命令创建,同一个消费组可以有多个消费者 |
3 | Last_delivered_id | 游标,每个消费组会有个游标 last_delivered_id,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。 |
4 | Consumer | 消费者,消费组中的消费者 |
5 | Pending_ids | 消费者会有一个状态变量,用于记录被当前消费已读取但未ack的消息Id,如果客户端没有ack,这个变量里面的消息ID会越来越多,一旦某个消息被ack它就开始减少。这个pending_ids变量在Redis官方被称之为 PEL(Pending Entries List),记录了当前已经被客户端读取的消息,但是还没有 ack (Acknowledge character:确认字符),它用来确保客户端至少消费了消息一次,而不会在网络传输的中途丢失了没处理 |
9.2 基本命令
- 队列相关指令
- 消费组相关指令
四个特殊符号
- - + 表示最小和最大出现的id
- $ 表示只消费新的消息,当前流中最大id,可用于将要到来的消息
- > 表示从第一条尚未被消费的消息进行读取
- * 用于XADD命令中,自动生成id,类似于MySQL中的自增id
了解即可
常用命令