Redis常用命令
Redis数据库
但无论是字符串键、散列键还是列表键,都会被存储到一个名为数据库的容器中。因为Redis是一个键值对数据库服务器,所以它的数据库与之前介绍过的散列键一样,都可以根据键的名字对数据库中的键值对进行索引。
Redis为数据库提供了非常丰富的操作命令,通过这些命令,用户可以:
- 指定自己想要使用的数据库。
- 一次性获取数据库包含的所有键,迭代地获取数据库包含的所有键,或者随机地获取数据库中的某个键。
- 根据给定键的值进行排序。
- 检查给定的一个或多个键,看它们是否存在于数据库当中。
- 查看给定键的类型。
- 对给定键进行重命名。
- 移除指定的键,或者将它从一个数据库移动到另一个数据库。
- 清空数据库包含的所有键。
- 交换给定的两个数据库。
SELECT:切换至指定的数据库
一个Redis服务器可以包含多个数据库。在默认情况下,Redis服务器在启动时将会创建16个数据库:这些数据库都使用号码进行标识,其中第一个数据库为0号数据库,第二个数据库为1号数据库,而第三个数据库则为2号数据库,以此类推。
Redis虽然不允许在同一个数据库中使用两个同名的键,但是由于不同数据库拥有不同的命名空间,因此在不同数据库中使用同名的键是完全没有问题的,而用户也可以通过使用不同数据库来存储不同的数据,以此来达到重用键名并且减少键冲突的目的。
比如,如果我们将用户的个人信息和会话信息都存放在同一个数据库中,那么为了区分这两种信息,程序就需要使用user::
当用户使用客户端与Redis服务器进行连接时,客户端一般默认都会使用0号数据库,但是通过使用SELECT命令,用户可以从当前正在使用的数据库切换到自己想要使用的数据库:
SELECT db
SELECT命令在切换成功之后将返回OK。
举个例子,当我们以默认方式启动redis-cli客户端时,redis-cli将连接至服务器的0号数据库:如果我们想要从0号数据库切换至3号数据库,那么只需要执行以下命令即可:
redis> SELECT 3
OK
redis[3]>
客户端提示符末尾的[3]
表示客户端现在正在使用3号数据库。注意,redis-cli
在使用默认的0号数据库时不会打印出数据库号码。
KEYS:获取所有与给定匹配符相匹配的键
KEYS命令接受一个全局匹配符作为参数,然后返回数据库中所有与这个匹配符相匹配的键作为结果:
KEYS pattern
举个例子,如果我们想要获取数据库包含的所有键,那么可以执行以下命令:
redis> KEYS *
1) "fruits"
2) "user::12312::profile"
3) "user::ip"
4) "user::id"
如果我们想要获取所有以user::为前缀的键,那么可以执行以下命令:
redis> KEYS user::*
1) "user::12312::profile"
2) "user::ip"
3) "user::id"
如果数据库中没有任何键与给定的匹配符相匹配,那么KEYS命令将返回一个空值:
redis> KEYS article::*
(empty list or set) -- 数据库中没有任何以article::为前缀的键
SCAN:以渐进方式迭代数据库中的键
因为KEYS命令需要检查数据库包含的所有键,并一次性将符合条件的所有键全部返回给客户端,所以当数据库包含的键数量比较大时,使用KEYS命令可能会导致服务器被阻塞。
为了解决这个问题,Redis从2.8.0版本开始提供SCAN命令,该命令是一个迭代器,它每次被调用的时候都会从数据库中获取一部分键,用户可以通过重复调用SCAN命令来迭代数据库包含的所有键:
SCAN cursor
SCAN命令的cursor参数用于指定迭代时使用的游标,游标记录了迭代的轨迹和进度。在开始一次新的迭代时,用户需要将游标设置为0: