文章目录
一、Redis 数据库常用命令
1.SET 与 GET
#set: 存放数据,命令格式为 set key value
#get: 获取数据,命令格式为get key
[root@localhost ~]# redis-cli -h 192.168.126.15 -p 6379
192.168.126.15:6379> set teacher wanger
OK
192.168.126.15:6379> get teacher
"wanger"
2.KEYS
#KEYS 命令可以取符合规则的键值列表,通常情况可以结合"*、?"等选项来使用
192.168.126.15:6379> set k1 1
OK
192.168.126.15:6379> set k2 2
OK
192.168.126.15:6379> set k3 3
OK
192.168.126.15:6379> set v1 4
OK
192.168.126.15:6379> set v5 5
OK
192.168.126.15:6379> set v22 5
OK
192.168.126.15:6379> KEYS * #查看当前数据库中所有键
192.168.126.15:6379> KEYS v* #查看当前数据库中以v开头的数据
192.168.126.15:6379> KEYS v? #查看当前数据库中以v开头后面包含任意一位的数据
192.168.126.15:6379> KEYS v?? #查看当前数据库中以v开头v开头后面包含任意两位的数据
3.EXISTS
#exists 命令可以判断键值是否存在
192.168.126.15:6379> exists teacher #返回值为 1 表示存在
(integer) 1
192.168.126.15:6379> exists tea #返回值为 0 表示不存在
(integer) 0
#del命令可以删除当前数据库的指定 key
192.168.126.15:6379> KEYS *
192.168.126.15:6379> del v5
(integer) 1
192.168.126.15:6379> get v5
(nil)
192.168.126.15:6379> type k1 #type 命令可以获取 key 对应的 value 值类型
string
4.RENAME
# rename 命令是对已有key进行重命名(覆盖)
命令格式:rename 源key 目标key
#使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值
#在实际使用过程中,建议先用 exists 命令查看目标 key 是否存在,然后再决定是否执行 rename 命令,以避免覆盖重要数据
192.168.126.15:6379> KEYS v*
1) "v1"
2) "v22"
192.168.126.15:6379> rename v22 v2
OK
192.168.126.15:6379> KEYS v*
1) "v2"
2) "v1"
192.168.126.15:6379> get v1
"4"
192.168.126.15:6379> get v2
"5"
192.168.126.15:6379> RENAME v1 v2
OK
192.168.126.15:6379> get v1
(nil)
192.168.126.15:6379> get v2
"4"
5.RENAMENX
# renamenx 命令的作用是对已有key进行重命名,并检测新名是否存在,如果目标key存在则不进行重命名(不覆盖)
命令格式: renamenx 源key 目标key
192.168.126.15:6379> KEYS *
1) "v2"
2) "k3"
3) "teacher"
4) "k1"
5) "k2"
192.168.126.15:6379> GET teacher
"wanger"
192.168.126.15:6379> GET v2
"4"
192.168.126.15:6379> RENAMENX v2 teacher
(integer) 0
192.168.126.15:6379> KEYS *
192.168.126.15:6379> GET teacher
192.168.126.15:6379> get v2
6.DBSIZE
#dbsize命令的作用是查看当前数据库中key的数目。
192.168.126.15:6379> DBSIZE
(integer) 5
192.168.126.15:6379> KEYS *
192.168.126.15:6379> CONFIG SET requirepass 123123 #设置密码为 123123
OK
192.168.126.15:6379> auth 123123 #一旦设置密码,必须先验证通过密码,否则无法进行任何操作
OK
192.168.126.15:6379> CONFIG GET requirepass #查看密码
1) "requirepass"
2) "123123"
二、Redis 多数据库常用命令
- Redis 支持多数据库,Redis 默认情况下包含 16 个数据库,数据库名称是用数字 0-15 来依次命名的
- 多数据库相互独立,互不干扰
1.多数据库间切换
命令格式: select 序号
使用 redis-cli 连接Redis数据库后,默认使用的是序号为 0 的数据库
192.168.126.15:6379> SELECT 10 #切换至序号为10的数据库
OK
192.168.126.15:6379[10]> SELECT 15 #切换至序号为15的数据库
OK
192.168.126.15:6379[15]> KEYS *
(empty list or set)
192.168.126.15:6379[15]> SELECT 0 #切换至序号为0的数据库
OK
192.168.126.15:6379> KEYS *
2.多数据库间移动数据
格式: move 键值 序号
192.168.126.15:6379> set k1 100
OK
192.168.126.15:6379> get k1
"100"
192.168.126.15:6379> SELECT 1
OK
192.168.126.15:6379[1]> get k1
(nil)
192.168.126.15:6379[1]> SELECT 0 #切换至目标数据库0
OK
192.168.126.15:6379> get k1 #查看目标数据是否存在
"100"
192.168.126.15:6379> move k1 1 #将数据库0中k1移动到数据库1中
(integer) 1
192.168.126.15:6379> SELECT 1 #切换至目标数据库1
OK
192.168.126.15:6379[1]> GET k1 #查看被移动数据
"100"
192.168.126.15:6379[1]> select 0
OK
192.168.126.15:6379> GET k1 #在数据库0中无法查看到k1的值
(nil)
3.清除数据库内数据
FLUSHDB:清空当前数据库数据
FLUSHALL:清空所有数据库的数据,慎用!
三、Redis 高可用
- 在 web 服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)
- 但是在 Redis 语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展,数据安全不会丢失等
在 Redis 中,实现高可用的技术主要包括持久化、主从复制、哨兵和集群,下而分别说明它们的作用,以及解决了什么样的问题:
1.持久化
- 持久化是最简单的高可用方法(有时甚至不被归为高可用的手段)
- 主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失
2.主从复制
- 主从复制是高可用 Redis 的基础,哨兵和集群都是在主从复制基础上实现高可用的
- 主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复
- 缺陷在于故障恢复无法自动化,写操作无法负载均衡,以及存储能力受到单机的限制
3.哨兵
- 在主从复制的基础上,哨兵实现了自动化的故障恢复
- 缺陷在于写操作无法负载均衡,以及存储能力受到单机的限制
4.集群
- 通过集群, Redis 解决了写操作无法负载均衡,以及存储能力受到单机限制的问题
- 实现了较为完善的高可用方案
四、Redis 持久化
1.持久化的功能
- Redis是内存数据库,数据都是存储在内存中,为了避免服务器断电等原因导致 Redis 进程异常退出后数据的永久丢失,需要定期将 Redis 中的数据以某种形式(数据或命令)从内存保存到硬盘
- 当下次 redis 重启时,利用持久化文件实现数据恢复
- 除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置
2.Redis 提供两种方式进行持久化
- RDB 持久化 :原理是将 Reids 在内存中的数据库记录定时保存到磁盘上
- AOF 持久化(append only file):原理是将Reids的操作日志以追加的方式写入文件,类似于 MySQL 的 binlog
- 由于 AOF 持久化的实时性更好,即当进程意外退出时丢失的数据更少,因此 AOF 是目前主流的持久化方式,不过 RDB 持久化仍然有其用武之地