当前位置:   article > 正文

深入学习 Redis - 渐进式遍历 scan 命令、数据库管理命令_redis scan命令遍历数据

redis scan命令遍历数据

目录

前言

一、scan 命令

二、数据库管理命令

select

dbsize

flushdb / flushall 


前言


之前我们所了解到的 keys * 是一次性把整个 redis 中所有的 key 都获取到,但是整个操作比较危险,可能会一下子的都太多的 key,阻塞 redis 服务器.

通过渐进式遍历,就可以做到,既能获取所有的 key ,同时又不会卡死服务器~

渐进式遍历不是一个命令就把所有 key 都拿到,而是每执行一次命令,只获取其中的一小部分,这样就保证了当前这一次操作不会太卡~

一、scan 命令


 scan 就是渐进式遍历的代表命令.

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

cursor:此处设计到一个光标的概念,光标就指向了当前遍历的位置(起初光标位置为 0),每次遍历都会产生一个光标位置,下次使用 scan 遍历时就需要接着上次光标产生的位置.

[MATCH pattern]:这里和之前介绍的 keys 命令是一样的.

[COUNT count]:限制一次遍历能过获取到多少元素(注意,这里的 count 只是给 redis 服务器的 “建议”,写入的 count 和实际返回的 key 的个数不一定完全相同,但是不会差很多).

[TYPE type]:redis 里的 key 都是 string ,但是 value 类型是不一样的.

假设目前有如下 keys 

通过渐进式遍历就可以得到如下结果:

Ps:渐进式遍历,在遍历的过程中,不会在服务器这边存储任何的状态信息,此处的遍历是随时可以终止的,解决了阻塞问题。

但是值得注意的是如果在遍历期间键有所变化(增加、修改、删 除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑。

二、数据库管理命令


在 mysql 上有个重要的概念——database,可以进行随心所欲的 创建/删除 数据库~

redis 也有 database 这样的概念,只不过不像 mysql 那样随意. redis 中的 database 是现成的,咱们不能创建新的数据库,也不能删除已有的数据库~

默认的 redis 给我们提供了 16 个数据库,编号为 0 - 15,这 16 个数据库之间的数据是隔离的,默认情况下使用数据库就是 0 号.

Ps:实际使用 redis 很少会关注数据库,一般都是使用 0 号就可以了.

select

select dbIndex

使用这个命令就可以进行数据库的切换

dbsize

获取当前数据库中的 key 的个数.

flushdb / flushall 

flushdb 用来删除当前数据库中所有的 key.

flushall 用来删除所有数据库中的 key.

Ps:永远不要在线上环境执⾏清除数据的操作,除⾮你想体验⼀把 “从删库到跑路” 的操作

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/658592
推荐阅读
相关标签
  

闽ICP备14008679号