类型补充

STREAM

stream作用:

stream就是一个消息队列(阻塞队列),是redis作为消息队列的重要支撑,属于是List bloop/brpop的升级版本

GEOSPATIAL

存储经纬度,支持范围查询,比如以当前坐标为圆心,查询半径为5km的满足要求的坐标,比如查半径为5km的美食

含有多种操作,比如:

添加坐标GEOADD ...

查询以当前为圆心半径为某某某的且被添加进来的坐标:GEOSEARCH ...

HyperLogLog

我们在学习SET时有一个场景,统计服务器UV(用户访问次数),假设SET存储userld,每个userld按照8字节来计算,那么1亿UV消耗大约8亿字节,也就是800MB,而HyperLogLog最多使用12KB空间

原因是HypeLogLog不存储元素内容,存储的是元素特征,再新增元素的时候,根据特征判断当前元素是否是崭新的元素,还是已经出现的元素,只用用来计数,但不能告诉你这个元素是什么

其实就是充分利用bit位的组合,来描述某一个字符串元素的特征,这样的描述存在一个问题,就是通过这种描述是存在误差的,误差大小约为%0.81

核心操作有:

添加成员:
PFADD key 123

查看当前计数:
PFCOUNT key

BITMAP

位图结构,属于SET类型针对整数的特化版本

可以判定某元素是否存在,如果是整数的话可以达到精确的遍历,并且可以知道存储的内容,字符串则不行

核心操作有:

设置某个比特位是1还是0:SETBIT key 1/0

获取该值的bit位:GET key

进行逻辑运算:BITOP <AND | OR | XOR | NOT> destkey key [key...]

<AND | OR | XOR | NOT>:按位与 | 按位或 | 按位异或 | 取反

destkey:将算出的结果存储在这个位置上

key:位图结构

大部分时候还是推荐SET,除非在一些特殊场景下,比如对空间大小有着极致的要求

BITFIELD

注意:这里面都是针对整数进行操作的

类似位于位域

#0:就是一个标签,相当于unsigned int32类型,#0相当于这个类型的对象,1000为对这个对象的初始值,相当于对位域中某个对象设置了值

INCRBY:增加

第二句的含义为:对标签0增加50,也就是变为1050,同时对标签1设为初始值为1

第二句的含义为:对标签0减少999,所以标签0变为51

渐进式遍历

SCAN

操作格式:

scan cursor [Match pattern] [Count count] [Type type]

cursor:光标,0表示从起始位置开始遍历,然后返回值会给你一个新光标。为下一次遍历的起始位置,这样进行多次遍历,即可完成遍历全部数据

注意:

这里的光标不是下标,仅仅是一个字符串,光标这个东西客户端是不认识的,redis服务器知道这个光标对应的元素位置

Match pattern:该处填写遍历规则,h?llo,h*llo,h[a-b]llo,h[^e]llo,h[ae]llo

count:表示一次要遍历几个元素,默认是10,此处的count并不是要求,而是建议,结果可能和你要的count数量不一样,但也不会差很多

Type type:填写value的类型,5个通用类型,5个特殊场景使用的类型

返回值:

第一部分内容,是下一次遍历的光标

第二部分内容,返回所有符合需求的key,没定义Match pattern的话。那么就将要求默认*,即没有要求,遍历全部存在的key

注意:

渐进式遍历,scan虽然解决了可能阻塞时间过长的问题,但如果在遍历期间有所变化(增加,修改,删除),可能导致遍历时键的重复遍历或遗漏,这点要在实际开发中考虑到。

数据库管理命令

在前面学习中,上来就进行key val操作,感觉并没有建库,那这些数据存储在哪呢?

其实redis也是有database这样的概念的,只不过redis的database是现成的,不需要用户创建新的数据库,用户也不能创建新的数据库。

默认redis给咱们提供了16个数据库,下标为0~15,这16个数据库中的数据是相互隔离的,不会进行相互的影响。

默认情况下,使用0号库

切换库的命令

select dbIndex(库的下标)

DBSIZE

获取库中key的个数

非常危险的两个命令!!!

FLUSHDB

清空当前库的内容

操作格式:

flushdb [async | sync]

async:异步的

sync:同步的

建议异步进行,同步致使当前redis当前执行流消耗时间过长,容易导致出现其它更严重的问题

FLUSHALL

清空所有库的内容

操作格式:

flushall [async | sync]

async:异步的

sync:同步的

建议异步进行,同步致使当前redis当前执行流消耗时间过长,容易导致出现其它更严重的问题

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐