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版本开始可用。

相关推荐
九皇叔叔21 分钟前
【7】PostgreSQL 事务
数据库·postgresql
kk在加油23 分钟前
Mysql锁机制与优化实践以及MVCC底层原理剖析
数据库·sql·mysql
Kookoos40 分钟前
ABP VNext + Cosmos DB Change Feed:搭建实时数据变更流服务
数据库·分布式·后端·abp vnext·azure cosmos
hello 早上好1 小时前
MsSql 其他(2)
数据库·mysql
高压锅_12201 小时前
SQLAlchemy数据库连接密码特殊字符处理完全指南
数据库·mysql·django·sqlalchemy
Hello.Reader6 小时前
Redis 延迟监控深度指南
数据库·redis·缓存
ybq195133454316 小时前
Redis-主从复制-分布式系统
java·数据库·redis
好奇的菜鸟9 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
tan180°9 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
满昕欢喜10 小时前
SQL Server从入门到项目实践(超值版)读书笔记 20
数据库·sql·sqlserver