1.切换数据库
redis提供了几个面向redis数据库的操作,他们分别是dbsize,select ,flushdb,
flushall;
--切换数据库
redis是用数字作为多个数据库的实现。redis的默认配置中是16个数据库。
databases 16
select 0:表示切换到第一个数据库。
select 15:表示切换到第16个数据库。
我们默认连接进来是0号数据库。
--通过-n连接到1号数据库。
[root@oracle1 ~]# redis-cli -h 192.168.1.7 -p 6380 -n 1
192.168.1.7:6380[1]>
为什么要废弃掉redis的多数据库功能呢。
redis是单线程的。如果使用多个数据库,那么这些数据库仍然是使用一个CPU,
彼此直接还是会收到影响。
多个数据库的使用方式,会让调试和运维不同业务的数据库变得困难,假如有一个
慢查询存在,依然会影响其他数据库,定位问题较为困难。
部分redis客户端不支持多数据库方式。再一个来回切换,容易混淆。
不建议使用多数据库功能。而是建议在同一台机器部署多个实例。
每个实例使用不同的CPU;
2.清除数据库
flushdb,flushall 命令用于清除数据库,两者的区别是flushdb只清除当前数据库。
flushall会清除所有的数据库。
--flushdb 仅删除当前数据库的键。
192.168.1.7:6380[1]> select 1
OK
192.168.1.7:6380[1]> keys *
1) "b"
192.168.1.7:6380[1]> select 0
OK
192.168.1.7:6380> keys *
1) "python"
2) "java"
3) "user:ranking:20240619"
4) "hashkey1"
192.168.1.7:6380> flushdb
OK
192.168.1.7:6380> keys *
(empty list or set)
192.168.1.7:6380> select 1
OK
192.168.1.7:6380[1]> keys *
1) "b"
--flushall,删除所有数据库里面的键。
192.168.1.7:6380> keys *
1) "a"
2) "b"
3) "d"
4) "e"
5) "c"
6) "f"
192.168.1.7:6380> select 1
OK
192.168.1.7:6380[1]> keys *
1) "c"
2) "b"
192.168.1.7:6380[1]> flushall
OK
192.168.1.7:6380[1]> keys *
(empty list or set)
192.168.1.7:6380[1]> select 0
OK
192.168.1.7:6380> keys *
(empty list or set)
flushdb,flushall命令可以非常方便的清理数据。
flushdb,flushal命令会将所有的数据清除,一旦误操作后果不堪设想。
如果当前数据库键值数量比较多,flushdb/flushall存在阻塞redis的可能。
3.重点回顾
(1)redis提供五种数据结构,每种数据结构都有多种内部编码实现。
(2)纯内存存储,IO多路复用技术,单线程架构造就redis高性能的三个因素。
(3)由于redis的单线程架构,所以需要每个命令都能被快速执行完成,
否则会存在阻塞redis的可能,理解redis单线程命令处理机制是开发和运维
redis的核心之一。
(4)批量操作(mget,mset,hmset)能够有效提供命令执行效率,但是要注意
每次批量操作的个数和字节数。
(5)了解每个命令的时间复杂读在开发中至关重要,例如在使用keys,hgetal,
smembers,zrange等时间复杂度较高的命令时,需要考虑规模对于redis的影响。
(6)persist:命令可以删除任意类型键的过期时间,但是set命令会删除字符串类型
的键的过期时间。
(7)move,dump+restore,migrate是redis发展过程中三种迁移键的方式,
其中move命令基本废弃,migrate命令用原子的方式实现了dump+restore,并且
支持批量操作,是rediscluster实现水平扩容的重要工具。
(8)scan命令可以解决keys命令可能带来的阻塞问题,同时redis还提供了hscan,
sscan,zscan渐进式遍历hash,set,zset;