• Redis——渐进式遍历和数据库管理命令


    介绍

    如果使用keys * 这样的操作,将Redis中所有的key都获取到,由于Redis是单线程工作,这个操作本身又要消耗很多时间,那么就会导致Redis服务器阻塞,后续的操作无法正常执行

    而渐进式遍历,通过多次执行遍历命令,化整为零,就既可以获取所有的key,又不会阻塞服务器。

    scan

    在这里插入图片描述

    参数含义
    cursor光标,代表当前指向的位置,为0时,表示遍历从头开始
    match用通配符描述要匹配的key的样子
    count要获取key的个数,默认是10,并且这里只是对服务器的建议个数,实际返回个数可能和count不同
    type指定要获取的key的类型
    返回值包含两个部分,前半部分是告诉程序员下次遍历时光标从哪里开始,后半部分是此次遍历的key的内容

    通配符类型:

    通配符作用
    匹配任意一个字符
    *匹配0个或多个任意字符
    [a,b,c,d]匹配a,b,c,d中的字符,其他的不可以
    [^a]只有a不能被匹配
    [a-z]匹配a-z之间的任意字符,包含a和z

    需要注意,光标并不是下标,光标不是一组连续的整数,而是一组字符串

    例如:
    在这里插入图片描述
    第一次返回的是1,那么第二条指令就让光标指向1,第二次返回7,那么第三条指令就让光标指向7,返回0代表所有的key都被遍历完了

    例如加上通配符:
    在这里插入图片描述
    可以看到,count虽然为2,返回的个数是1个
    并且,Redis可能返回empty list or set

    Redis的渐进性遍历,不会在服务器存储状态信息,因此遍历是可以随时终止的,不会对服务器产生任何副作用

    但是需要注意,渐进式遍历虽然解决了服务器阻塞的问题,但是如果遍历过程中有key的增删查改,可能会导致遍历的重复或者遗漏

    数据库管理命令

    MySQL中有database的概念,每个database中有若干个table,而Redis中也有16个database,编号0-15,这16个database的数据相互隔离,并且用户不能创建或者删除database,默认情况下使用0号database

    一开始设置的key在0号数据库,而切换到1号数据库就获取不到key了
    在这里插入图片描述

    select

    切换数据库,index是对应数据库的编号,从0到16
    在这里插入图片描述

    dbsize

    获取当前数据库key的个数
    在这里插入图片描述

    flushdb和flushall

    flushdb是删除当前数据库中所有的key,而flushall是删除所有数据库中所有的key

    可以添加ASYNC或者SYNC参数,代表异步操作或者同步操作
    在这里插入图片描述

  • 相关阅读:
    【JavaGuide学习笔记】Day.4
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    JavaScript:实现Fedwick树算法(附完整源码)
    分布式Session如何存储
    2022-08-18 第六小组 瞒春 学习笔记
    牛客网刷题 | BC62 统计数据正负个数
    【有趣分享】火柴人VS数学
    第六章 图 二、图的存储结构(邻接矩阵法)
    java计算机毕业设计物流企业健康管理系统源代码+数据库+系统+lw文档
    云原生Docker网络管理
  • 原文地址:https://blog.csdn.net/m0_60867520/article/details/132848766