NotSQL 之 Redis(二)(Redis 的数据库常用命令与多数据库常用命令,Redis 高可用及持久化)


一、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"

mark

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开头后面包含任意两位的数据

mark
mark

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

mark
mark

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"

mark

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

mark

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"

mark


二、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 *

mark

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)

mark

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 持久化仍然有其用武之地

猜你喜欢

转载自blog.csdn.net/weixin_51486343/article/details/114004877