• redis-操作数据库


    0 序言

           一个Redis服务器可以包含多个数据库。在默认情况下,Redis服务器在启动时将会创建16个数据库:这些数据库都使用号码进行标识,其中第一个数据库为0号数据库,第二个数据库为1号数据库,而第三个数据库则为2号数据库,以此类推。

            Redis虽然不允许在同一个数据库中使用两个同名的键,但是由于不同数据库拥有不同的命名空间,因此在不同数据库中使用同名的键是完全没有问题的,而用户也可以通过使用不同数据库来存储不同的数据,以此来达到重用键名并且减少键冲突的目的。

    存储值命名空间

    redis的key的命名规范
    1.建议全部大写

    2.key不能太长也不能太短,键名越长越占资源,太短可读性太差

    3.key 单词与单词之间以  : 分开

    1 select 切换至指定数据库

    1. // db 代表 0-15
    2. SELECT db

     2 KEYS:获取所有与给定匹配符相匹配的键

    因为KEYS命令需要检查数据库包含的所有键,并一次性将符合条件的所有键全部返回给客户端,所以当数据库包含的键数量比较大时,使用KEYS命令可能会导致服务器被阻塞。

            KEYS pattern

    示例:

     3 SCAN:以渐进方式迭代数据库中的键

    该命令是一个迭代器,它每次被调用的时候都会从数据库中获取一部分键,用户可以通过重复调用SCAN命令来迭代数据库包含的所有键:

            SCAN cursor

    SCAN命令的cursor参数用于指定迭代时使用的游标,游标记录了迭代的轨迹和进度。在开始一次新的迭代时,用户需要将游标设置为0:

            SCAN 0

    SCAN命令的执行结果由两个元素组成:

    ●第一个元素是进行下一次迭代所需的游标,如果这个游标为0,那么说明客户端已经对数据库完成了一次完整的迭代。

    ●第二个元素是一个列表,这个列表包含了本次迭代取得的数据库键;如果SCAN命令在某次迭代中没有获取到任何键,那么这个元素将是一个空列表。

    关于SCAN命令返回的键列表,有两点需要注意:

    ●SCAN命令可能会返回重复的键,用户如果不想在结果中包含重复的键,那么就需要自己在客户端中进行检测和过滤。

    ●SCAN命令返回的键数量是不确定的,有时甚至会不返回任何键,但只要命令返回的游标不为0,迭代就没有结束。

    SCAN命令的迭代保证针对数据库的一次完整迭代(full iteration)以用户给定游标0调用SCAN命令开始,直到SCAN命令返回游标0结束。SCAN命令为完整迭代提供以下保证:

    ●从迭代开始到迭代结束的整个过程中,一直存在于数据库中的键总会被返回。

    ●如果一个键在迭代的过程中被添加到数据库中,那么这个键是否会被返回是不确定的。

    ●如果一个键在迭代的过程中被移除了,那么SCAN命令在它被移除之后将不再返回这个键,但是这个键在被移除之前仍然有可能被SCAN命令返回。

    ●无论数据库如何变化,迭代总是有始有终的,不会出现循环迭代或者其他无法终止迭代的情况。

    完整迭代示例:只要返回的游标不为0,迭代就没有结束,返回的游标是下一次迭代要用的

    指定返回键的期望数量:

            SCAN cursor [COUNT number]

    迭代与给定匹配符相匹配的键

            SCAN cursor [MATCH pattern]

    HSCAN、SSCAN、ZSCAN这3个命令可以用于迭代散列,集合,有序集合。

    4 SORT:对键的值进行排序

    执行SORT命令对列表元素、集合元素或者有序集合成员进行排序。

            SORT key

     指定排序方式 

            SORT key [ASC|DESC]

     对字符串值进行排序

            SORT key [ALPHA]

     

    只获取部分排序结果

            SORT key [LIMIT offset count]

     

    5 EXISTS:检查给定键是否存在 

    可以通过使用EXISTS命令,检查给定的一个或多个键是否存在于当前正在使用的数据库中:

            EXISTS key [key ...]

    只有2个键是存在的 

     

    6 DBSIZE:获取数据库包含的键值对数量 

    DBSIZE

    7 TYPE:查看键的类型 

            TYPE key

    8 RENAME、RENAMENX:修改键名

            RENAME origin new

     

    9 MOVE:将给定的键移动到另一个数据库 

            MOVE key db

    当目标数据库存在与给定键同名的键时,MOVE命令将放弃执行移动操作。

    10 DEL:移除指定的键 

    DEL命令允许用户从当前正在使用的数据库中移除指定的一个或多个键,以及与这些键相关联的值:

            DEL key [key ...]

    11 UNLINK:以异步方式移除指定的键 

    因为DEL命令会以同步方式执行移除操作,所以如果待移除的键非常庞大或者数量众多,那么服务器在执行移除操作的过程中就有可能被阻塞。比如,移除一个包含上百万个元素的集合,移除一个包含数十万个键值对的散列,或者一次移除成千上万个键,都有可能引起服务器阻塞。

    UNLINK命令与DEL命令一样,都可以用于移除指定的键,但它与DEL命令的区别在于,当用户调用UNLINK命令去移除一个数据库键时,UNLINK只会在数据库中移除对该键的引用(reference),而对键的实际移除操作则会交给后台线程执行,因此UNLINK命令将不会造成服务器阻塞。

            UNLINK key [key ...]

    UNLINK命令从Redis 4.0版本开始可用

    12 FLUSHDB:清空当前数据库

    通过使用FLUSHDB命令,用户可以清空当前正在使用的数据库:

            FLUSHDB
            

    与DEL命令一样,FLUSHDB命令也是一个同步移除命令,并且因为FLUSHDB移除的是整个数据库而不是单个键,所以它常常会引发比DEL命令更为严重的服务器阻塞现象。

    为了解决这个问题,Redis 4.0给FLUSHDB命令新添加了一个async选项:

            FLUSHDB async
           

    13 FLUSHALL:清空所有数据库 

    使用FLUSHALL命令,用户可以清空Redis服务器包含的所有数据库:

    FLUSHALL

    与FLUSHDB命令一样,以同步方式执行的FLUSHALL命令也可能会导致服务器阻塞,因此Redis 4.0也给FLUSHALL命令添加了同样的async选项:

            FLUSHALL async

    14 SWAPDB:互换数据库

    SWAPDB命令接受两个数据库号码作为输入,然后对指定的两个数据库进行互换,最后返回OK作为结果:

            SWAPDB x y

    SWAPDB命令从Redis 4.0版本开始可用。

  • 相关阅读:
    数商云采购系统对账结算功能介绍 | 缩短汽配企业结算周期,提高资金周转效率
    9_分类算法—决策树
    智能公交监控调度系统技术方案,等车不再等到心碎
    pytorch中对nn.BatchNorm2d()函数的理解
    React 组件实例的三大核心—props
    现货白银书籍那个好
    speedoffice(Word)文档中如何插入图片
    【项目开发 | C语言项目 | C语言病人管理系统】
    Cent OS 7下部署zabbix5.0
    算法leetcode|18. 四数之和(rust重拳出击)
  • 原文地址:https://blog.csdn.net/qq_34690079/article/details/136674224