Redis---类型补充,渐进式遍历,数据库管理命令
类型补充
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当前执行流消耗时间过长,容易导致出现其它更严重的问题
更多推荐




所有评论(0)