redis-操作数据库

0 序言

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

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

存储值命名空间

redis的key的命名规范

1.建议全部大写

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

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

1 select 切换至指定数据库

// db 代表 0-15
 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版本开始可用。

相关推荐
夏小花花18 分钟前
postgresql 创建序列
数据库·postgresql
Allen Bright18 分钟前
Redis介绍
数据库·redis·缓存
engchina25 分钟前
Oracle ADB 导入 BANK_GRAPH 的学习数据
数据库·学习·oracle·graph
不爱学习的YY酱27 分钟前
【计网不挂科】计算机网络第二章< 物理层 >习题库(含答案)
java·数据库·计算机网络
CCSBRIDGE33 分钟前
sql文件
数据库·oracle
柯南二号35 分钟前
HarmonyOS ArkTS 下拉列表组件
前端·javascript·数据库·harmonyos·arkts
液态不合群1 小时前
Mysql篇-三大日志
数据库·mysql
喝醉酒的小白1 小时前
数据库参数备份
数据库
小徍1 小时前
MySQL 8.0特性-自增变量的持久化
数据库·mysql
糖豆大将军1 小时前
Mysql个人八股总结
数据库·oracle