redis主从复制、哨兵服务、持久化、数据类型

Top

NSD DBA DAY10

  1. 案例1:配置主从复制
  2. 案例2:配置带验证的主从复制
  3. 案例3:哨兵服务
  4. 案例4:使用RDB文件恢复数据
  5. 案例5:AOF
  6. 案例6:字符类型
  7. 案例7:列表类型
  8. 案例8:散列类型
  9. 案例9:集合类型

1 案例1:配置主从复制

1.1 问题

  1. 配置一主一从结构
  2. 配置一主多从结构
  3. 配置主从从结构

1.2 方案

准备3台新虚拟机,具体配置如表-1所示。

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:配置一主一从结构

1)配置host61为主服务器

 
  1. [root@host61 ~]# yum -y install redis
  2. [root@host61 ~]# vim /etc/redis.conf
  3. 69 bind 192.168.88.61 设置服务使用的Ip地址
  4. 92 port 6379 设置服务使用的端口号 使用默认端口即可
  5. :wq
  6. [root@host61 ~]# systemctl start redis
  7. [root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379
  8. 192.168.88.61:6379> info replication 查看复制信息
  9. # Replication
  10. role:master 默认就是主服务器
  11. connected_slaves:0 没有从服务器
  12. master_replid:0aebff37df915061ddf157cc33d8742f14e8773f
  13. master_replid2:0000000000000000000000000000000000000000
  14. master_repl_offset:0
  15. second_repl_offset:-1
  16. repl_backlog_active:0
  17. repl_backlog_size:1048576
  18. repl_backlog_first_byte_offset:0
  19. repl_backlog_histlen:0
  20. 192.168.88.61:6379>

2)配置host62为host61的从服务器

  1. [root@host62 ~]# yum -y install redis 安装软件
  2. [root@host62 ~]# vim /etc/redis.conf 修改配置文件
  3. 69 bind 192.162.88.62 设置服务的ip地址
  4. 92 port 6379 设置服务的端口号 默认即可
  5. :wq
  6. [root@host62 ~]# systemctl start redis 启动服务
  7. [root@host62 ~]# redis-cli -h 192.162.88.62 -p 6379 连接服务
  8. 192.162.88.62.:6379> replicaof 192.162.88.61 6379 指定主服务器ip和端口
  9. OK
  10. 192.162.88.62.:6379> config rewrite 永久保存配置
  11. OK
  12. 192.162.88.62.:6379> exit 退出服务
  13. [root@host62 ~]# tail -1 /etc/redis.conf 查看文件末尾
  14. replicaof 192.162.88.61 6379
  15. [root@host62 ~]# redis-cli -h 192.162.88.62 -p 6379 连接服务
  16. 192.162.88.62.:6379> info replication 查看复制信息
  17. # Replication
  18. role:slave 角色
  19. master_host:192.162.88.61 主服务器ip地址
  20. master_port:6379 主服务器端口号
  21. master_link_status:up 与主服务器连接状态 (up 正常 down 连接失败)
  22. master_last_io_seconds_ago:8
  23. master_sync_in_progress:0
  24. slave_repl_offset:14
  25. slave_priority:100
  26. slave_read_only:1
  27. connected_slaves:0
  28. master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
  29. master_replid2:0000000000000000000000000000000000000000
  30. master_repl_offset:14
  31. second_repl_offset:-1
  32. repl_backlog_active:1
  33. repl_backlog_size:1048576
  34. repl_backlog_first_byte_offset:1
  35. repl_backlog_histlen:14
  36. 192.162.88.62.:6379>

3)在主服务器host61查看复制信息

  1. [root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379
  2. 192.168.88.61:6379> info replication
  3. # Replication
  4. role:master 角色
  5. connected_slaves:1 一个从
  6. slave0:ip=192.168.88.62,port=6379,state=online,offset=322,lag=0 从服务器信息
  7. master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
  8. master_replid2:0000000000000000000000000000000000000000
  9. master_repl_offset:322
  10. second_repl_offset:-1
  11. repl_backlog_active:1
  12. repl_backlog_size:1048576
  13. repl_backlog_first_byte_offset:1
  14. repl_backlog_histlen:322
  15. 192.168.88.61:6379> mset x 1 y 2 z 3 存储数据
  16. OK
  17. 192.168.88.61:6379> keys * 查看变量
  18. 1) "z"
  19. 2) "y"
  20. 3) "x"

4)在从服务器查看是否同步数据

  1. [root@host62 ~]# redis-cli -h 192.168.88.62 -p 6379
  2. 192.168.88.62.:6379> keys *
  3. 1) "y"
  4. 2) "x"
  5. 3) "z"
  6. 192.168.88.62.:6379>

步骤二:配置一主多从结构

要求:把host63也配置为host61的从服务器

1)配置host63为host61的从服务器

  1. [root@host63 ~]# yum -y install redis 安装软件
  2. [root@host63 ~]# vim /etc/redis.conf 修改配置文件
  3. 69 bind 192.168.88.63
  4. 92 port 6379
  5. :wq
  6. [root@host63 ~]# systemctl start redis 启动服务
  7. [root@host63 ~]# redis-cli -h 192.168.88.63 -p 6379 连接服务
  8. 192.168.88.63:6379> replicaof 192.168.88.61 6379 指定主服务器ip和端口
  9. OK
  10. 192.168.88.63:6379> config rewrite 永久保存配置
  11. OK
  12. 192.168.88.63:6379> exit
  13. [root@host63 ~]# tail -1 /etc/redis.conf 保存到文件末尾
  14. replicaof 192.168.88.61 6379
  15. [root@host63 ~]# redis-cli -h 192.168.88.63 -p 6379 连接服务
  16. 192.168.88.63:6379> info replication 查看复制信息
  17. # Replication
  18. role:slave 角色
  19. master_host:192.168.88.61 主服务器IP
  20. master_port:6379 主服务器端口
  21. master_link_status:up 与主服务器连接状态 up 正常连接状态
  22. master_last_io_seconds_ago:9
  23. master_sync_in_progress:0
  24. slave_repl_offset:1171
  25. slave_priority:100
  26. slave_read_only:1
  27. connected_slaves:0
  28. master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
  29. master_replid2:0000000000000000000000000000000000000000
  30. master_repl_offset:1171
  31. second_repl_offset:-1
  32. repl_backlog_active:1
  33. repl_backlog_size:1048576
  34. repl_backlog_first_byte_offset:1158
  35. repl_backlog_histlen:14
  36. 192.168.88.63:6379> keys * 查看是否同步数据
  37. 1) "x"
  38. 2) "z"
  39. 3) "y"
  40. 192.168.88.63:6379>

在host61 查看到有2台从服务器

  1. [root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379
  2. 192.168.88.61:6379> info replication
  3. # Replication
  4. role:master
  5. connected_slaves:2
  6. slave0:ip=192.168.88.62,port=6379,state=online,offset=3027,lag=0
  7. slave1:ip=192.168.88.63,port=6379,state=online,offset=3013,lag=1
  8. master_replid:209b3b7ce20c708ab1b6b95a5d1becb2454b0941
  9. master_replid2:0000000000000000000000000000000000000000
  10. master_repl_offset:3027
  11. second_repl_offset:-1
  12. repl_backlog_active:1
  13. repl_backlog_size:1048576
  14. repl_backlog_first_byte_offset:1
  15. repl_backlog_histlen:3027
  16. 192.168.88.61:6379>

步骤三:配置主从从结构

要求: 把host63恢复为独立的redis服务器,然后配置为host62的从服务器

1)配置host63

  1. [root@host63 ~]# redis-cli -h 192.168.88.63 -p 6379
  2. 192.168.88.63:6379> replicaof no one 恢复为独立的数据库服务器
  3. OK
  4. 192.168.88.63:6379> replicaof 192.168.88.62 6379 指定主服务器为62
  5. OK
  6. 192.168.88.63:6379> config rewrite 保存配置
  7. OK
  8. 192.168.88.63:6379> exit 断开连接
  9. [root@host63 ~]# tail -1 /etc/redis.conf 查看是否保存
  10. replicaof 192.168.88.62 6379
  11. [root@host63 ~]# redis-cli -h 192.168.88.63 -p 6379 连接服务
  12. 192.168.88.63:6379> info replication 查看复制信息
  13. # Replication
  14. role:slave 角色
  15. master_host:192.168.88.62 主服务器IP
  16. master_port:6379 主服务端口
  17. master_link_status:up 与主服务器连接状态
  18. master_last_io_seconds_ago:0
  19. master_sync_in_progress:0
  20. slave_repl_offset:4545
  21. slave_priority:100
  22. slave_read_only:1
  23. connected_slaves:0
  24. master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
  25. master_replid2:0000000000000000000000000000000000000000
  26. master_repl_offset:4545
  27. second_repl_offset:-1
  28. repl_backlog_active:1
  29. repl_backlog_size:1048576
  30. repl_backlog_first_byte_offset:4420
  31. repl_backlog_histlen:126
  32. 192.168.88.63:6379>

2)在host62查看复制信息

  1. [root@host62 ~]# redis-cli -h 192.168.88.62 -p 6379
  2. 192.168.88.62.:6379> info replication 查看复制信息
  3. # Replication
  4. role:slave 本身是从服务器
  5. master_host:192.168.88.61 主服务器ip
  6. master_port:6379 主服务器redis服务端口
  7. master_link_status:up 与主服务器连接状态
  8. master_last_io_seconds_ago:4
  9. master_sync_in_progress:0
  10. slave_repl_offset:4769
  11. slave_priority:100
  12. slave_read_only:1
  13. connected_slaves:1 本身有一个从服务器
  14. slave0:ip=192.168.88.63,port=6379,state=online,offset=4769,lag=0 从服务器信息
  15. master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
  16. master_replid2:0000000000000000000000000000000000000000
  17. master_repl_offset:4769
  18. second_repl_offset:-1
  19. repl_backlog_active:1
  20. repl_backlog_size:1048576
  21. repl_backlog_first_byte_offset:1
  22. repl_backlog_histlen:4769
  23. 192.168.88.68.:6379>

2 案例2:配置带验证的主从复制

2.1 问题

1)基于案例1做如下配置:

  • 配置主机host61,redis服务连接密码为123456
  • 主机host62设置连接host61的redis服务密码

2.2 方案

给host61主机的Redis服务设置连接密码,如果从服务器不指定连接密码无法同步数据。

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:配置主机host61,redis服务连接密码为123456

命令操作如下所示:

  1. [root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379
  2. 192.168.88.61:6379> config get requirepass 查看密码,默认服务没有密码
  3. 1) "requirepass"
  4. 2) ""
  5. 192.168.88.61:6379> config set requirepass 123456 设置密码
  6. OK
  7. 192.168.88.61:6379> auth 123456 输入密码
  8. OK
  9. 192.168.88.61:6379> config rewrite 保存配置
  10. OK
  11. 192.168.88.61:6379> exit 退出
  12. [root@host61 ~]# tail -1 /etc/redis.conf 保存到文件的末尾
  13. requirepass "123456"
  14. [root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379 连接服务
  15. 192.168.88.61:6379> auth 123456 输入密码
  16. OK
  17. 192.168.88.61:6379> info replication 查看复制信息
  18. # Replication
  19. role:master
  20. connected_slaves:0 没有从服务器了 因为从没有输入连接密码连接不上主服务器
  21. master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
  22. master_replid2:0000000000000000000000000000000000000000
  23. master_repl_offset:5763
  24. second_repl_offset:-1
  25. repl_backlog_active:1
  26. repl_backlog_size:1048576
  27. repl_backlog_first_byte_offset:1
  28. repl_backlog_histlen:5763
  29. 192.168.88.61:6379>

步骤二:主机host62设置连接host61的redis服务密码

命令操作如下所示:

  1. [root@host62 ~]# redis-cli -h 192.168.88.62 -p 6379 连接服务
  2. 192.168.88.62.:6379> info replication 查看复制信息
  3. # Replication
  4. role:slave
  5. master_host:192.168.88.61
  6. master_port:6379
  7. master_link_status:down 没设置密码 与master主机是断开状态
  8. master_last_io_seconds_ago:-1
  9. master_sync_in_progress:0
  10. slave_repl_offset:1
  11. master_link_down_since_seconds:274
  12. slave_priority:100
  13. slave_read_only:1
  14. connected_slaves:0
  15. master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
  16. master_replid2:0000000000000000000000000000000000000000
  17. master_repl_offset:7803
  18. second_repl_offset:-1
  19. repl_backlog_active:0
  20. repl_backlog_size:1048576
  21. repl_backlog_first_byte_offset:1
  22. repl_backlog_histlen:7803
  23. 192.168.88.62:6379> config set masterauth 123456 指定主服务器密码
  24. OK
  25. 192.168.88.62:6379> config rewrite 保存配置
  26. OK
  27. 192.168.88.62:6379> info replication 查看复制信息
  28. # Replication
  29. role:slave
  30. master_host:192.168.88.61
  31. master_port:6379
  32. master_link_status:up 设置连接密码后 状态为up
  33. master_last_io_seconds_ago:10
  34. master_sync_in_progress:0
  35. slave_repl_offset:5847
  36. slave_priority:100
  37. slave_read_only:1
  38. connected_slaves:1
  39. slave0:ip=192.168.88.63,port=6379,state=online,offset=5847,lag=1
  40. master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
  41. master_replid2:0000000000000000000000000000000000000000
  42. master_repl_offset:5847
  43. second_repl_offset:-1
  44. repl_backlog_active:1
  45. repl_backlog_size:1048576
  46. repl_backlog_first_byte_offset:5764
  47. repl_backlog_histlen:84
  48. 192.168.88.62.:6379>

3 案例3:哨兵服务

3.1 问题

  1. 配置主机Host67为master服务器
  2. 配置主机host68为Host67的slave服务器
  3. 配置主机host69运行哨兵服务
  4. 测试配置

3.2 方案

准备3台新的虚拟机,具体配置如表-2所示。

说明:

 

1)可以使用一主一从或 一主多从 或 主从从 + 哨兵服务 做服务的高可用 和 数据自动备份

2)如果主从结构中的redis服务设置连接密码的话必须全每台数据库都要设置密码且密码要一样,要么全都不设置密码。

3)如果Redis服务有密码宕机的服务器启动服务后,要人为指定主服务器的连接密码。

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:配置主机Host67为master服务器

命令操作如下所示:

1)配置host67为主服务器

  1. [root@host67 ~]# yum -y install redis 安装redis服务软件
  2. [root@host67 ~]# vim /etc/redis.conf 修改配置文件
  3. 69 bind 192.168.88.67 设置redis服务使用IP地址
  4. 92 port 6379 设置redis服务使用端口
  5. :wq
  6. [root@host67 ~]# systemctl start redis 启动服务
  7. [root@host67 ~]# redis-cli -h 192.168.88.67 -p 6379 连接服务
  8. 192.168.88.67:6379> info replication 查看角色
  9. # Replication
  10. role:master 默认是master角色
  11. connected_slaves:0 没有从服务器
  12. master_replid:0aebff37df915061ddf157cc33d8742f14e8773f
  13. master_replid2:0000000000000000000000000000000000000000
  14. master_repl_offset:0
  15. second_repl_offset:-1
  16. repl_backlog_active:0
  17. repl_backlog_size:1048576
  18. repl_backlog_first_byte_offset:0
  19. repl_backlog_histlen:0
  20. 192.168.88.67:6379>

步骤二:配置主机host68为Host67的slave服务器

命令操作如下所示:

2)配置host68为host67的从服务器

  1. [root@host68 ~]# yum -y install redis 安装软件
  2. [root@host68 ~]# vim /etc/redis.conf 修改配置文件
  3. 69 bind 192.168.88.68 设置服务使用Ip地址
  4. 92 port 6379 设置服务监听端口 默认即可
  5. :wq
  6. [root@host68 ~]# systemctl start redis 启动服务
  7. [root@host68 ~]# redis-cli -h 192.168.88.68 -p 6379 连接服务
  8. 192.168.88.68:6379> replicaof 192.168.88.67 6379 指定主服务器ip和端口
  9. OK
  10. 192.168.88.68:6379> config rewrite 永久保存配置
  11. OK
  12. 192.168.88.68:6379> exit 断开
  13. [root@host68 ~]# tail -1 /etc/redis.conf 保存到文件末尾
  14. replicaof 192.168.88.67 6379
  15. [root@host68 ~]# redis-cli -h 192.168.88.68 -p 6379 连接服务
  16. 192.168.88.68:6379> info replication 查看复制信息
  17. # Replication
  18. role:slave 角色 从服务器
  19. master_host:192.168.88.67 主服务器Ip
  20. master_port:6379 主服务端口
  21. master_link_status:up 与主连接状态
  22. master_last_io_seconds_ago:8
  23. master_sync_in_progress:0
  24. slave_repl_offset:14
  25. slave_priority:100
  26. slave_read_only:1
  27. connected_slaves:0
  28. master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
  29. master_replid2:0000000000000000000000000000000000000000
  30. master_repl_offset:14
  31. second_repl_offset:-1
  32. repl_backlog_active:1
  33. repl_backlog_size:1048576
  34. repl_backlog_first_byte_offset:1
  35. repl_backlog_histlen:14
  36. 192.168.88.68:6379>

步骤三:配置主机host69运行哨兵服务

命令操作如下所示:

  1. ]# yum -y install redis 安装软件
  2. ]# vim /etc/redis-sentinel.conf 创建并编辑主配置文件
  3. 15 bind 192.168.88.69 指定哨兵服务使用ip地址
  4. 21 port 26379 指定哨兵服务监听端口
  5. 26 daemonize yes 以守护进程方式运行服务
  6. 84 sentinel monitor mymaster 192.168.88.67 6379 1 监视master服务器Host67
  7. :wq
  8. [root@host69 ~]# systemctl start redis-sentinel 启动哨兵服务
  9. [root@host69 ~]# netstat -utnlp | grep 26379 查看端口号
  10. tcp 0 0 192.168.88.69:26379 0.0.0.0:* LISTEN 1651/redis-sentinel
  11. [root@host69 ~]#

查看日志获取监视信息

  1. [root@host69 ~]# tail -f /var/log/redis/sentinel.log
  2. 1651:X 03 Jun 2023 21:42:49.523 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  3. 1651:X 03 Jun 2023 21:42:49.523 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=1651, just started
  4. 1651:X 03 Jun 2023 21:42:49.523 # Configuration loaded
  5. 1651:X 03 Jun 2023 21:42:49.523 * supervised by systemd, will signal readiness
  6. 1651:X 03 Jun 2023 21:42:49.525 * Running mode=sentinel, port=26379.
  7. 1651:X 03 Jun 2023 21:42:49.525 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
  8. 1651:X 03 Jun 2023 21:42:49.530 # Sentinel ID is f9475074a53444ee81765646c105e04e73ac9ec8
  9. 1651:X 03 Jun 2023 21:42:49.530 # +monitor master mymaster 192.168.88.67 6379 quorum 1
  10. 1651:X 03 Jun 2023 21:42:49.533 * +slave slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379

步骤四:测试配置

思路:停止master主机的redis 服务,原slave角色会升级为主,哨兵服务会自动监视新的master服务,宕机的master 主机恢复后自动配置为当前主的从服务器。

停止master主机的redis 服务

  1. [root@host67 ~]# systemctl stop redis

原slave角色会升级为主

  1. [root@host68 ~]# redis-cli -h 192.168.88.68 -p 6379
  2. 192.168.88.68:6379> info replication
  3. # Replication
  4. role:master 角色
  5. connected_slaves:0 没从服务器
  6. master_replid:e4d9399cdf19c724b032859e77316019735d391e
  7. master_replid2:bd1b8d193de170bedd8b40780ee3fb45f9590a5b
  8. master_repl_offset:35343
  9. second_repl_offset:32642
  10. repl_backlog_active:1
  11. repl_backlog_size:1048576
  12. repl_backlog_first_byte_offset:183
  13. repl_backlog_histlen:35161
  14. 192.168.88.68:6379>

哨兵服务会自动监视新的master服务

  1. [root@host69 ~]# tail -f /var/log/redis/sentinel.log 查看日志文件
  2. 1651:X 03 Jun 2023 21:50:23.603 # +failover-state-select-slave master mymaster 192.168.88.67 6379
  3. 1651:X 03 Jun 2023 21:50:23.694 # +selected-slave slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379
  4. 1651:X 03 Jun 2023 21:50:23.695 * +failover-state-send-slaveof-noone slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379
  5. 1651:X 03 Jun 2023 21:50:23.796 * +failover-state-wait-promotion slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379
  6. 1651:X 03 Jun 2023 21:50:24.452 # +promoted-slave slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379
  7. 1651:X 03 Jun 2023 21:50:24.452 # +failover-state-reconf-slaves master mymaster 192.168.88.67 6379
  8. 1651:X 03 Jun 2023 21:50:24.502 # +failover-end master mymaster 192.168.88.67 6379
  9. 1651:X 03 Jun 2023 21:50:24.502 # +switch-master mymaster 192.168.88.67 6379 192.168.88.68 6379
  10. 1651:X 03 Jun 2023 21:50:24.502 * +slave slave 192.168.88.67:6379 192.168.88.67 6379 @ mymaster 192.168.88.68 6379
  11. 1651:X 03 Jun 2023 21:50:54.586 # +sdown slave 192.168.88.67:6379 192.168.88.67 6379 @ mymaster 192.168.88.68 6379

宕机的master 主机恢复后自动配置为当前主的从服务器。

  1. [root@host67 ~]# systemctl start redis 启动服务
  2. [root@host67 ~]# redis-cli -h 192.168.88.67 -p 6379 连接服务
  3. 192.168.88.67:6379> info replication    查看角色
  4. # Replication
  5. role:slave 从服务器
  6. master_host:192.168.88.68 主服务器ip
  7. master_port:6379 主服务器端口
  8. master_link_status:up 连通状态
  9. master_last_io_seconds_ago:1
  10. master_sync_in_progress:0
  11. slave_repl_offset:54542
  12. slave_priority:100
  13. slave_read_only:1
  14. connected_slaves:0
  15. master_replid:e4d9399cdf19c724b032859e77316019735d391e
  16. master_replid2:0000000000000000000000000000000000000000
  17. master_repl_offset:54542
  18. second_repl_offset:-1
  19. repl_backlog_active:1
  20. repl_backlog_size:1048576
  21. repl_backlog_first_byte_offset:54379
  22. repl_backlog_histlen:164
  23. 192.168.88.67:6379>

4 案例4:使用RDB文件恢复数据

4.1 问题

  1. 设置存盘间隔为120秒且10个key改变数据自动存盘
  2. 使用RDB文件恢复数据

4.2 方案

创建1台虚拟机,运行redis服务完成持久化练习,具体配置如表-3所示。

 

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:设置存盘间隔为120秒且10个key改变数据自动存盘

查看 redis服务存储数据到硬盘的存盘频率

 
  1. [root@redis70 ~]# vim /etc/redis.conf    
  2. save 秒 变量个数
  3. save 900 1
  4. save 300 10
  5. save 60 10000

验证配置文件里定义的存储频率

 
  1. [root@redis70 ~]#systemctl stop redis    
  2. [root@redis70 ~]# rm -rf /var/lib/redis/*    
  3. [root@redis70 ~]# vim +219 /etc/redis.conf    
  4. save 900 1
  5. #save 300 10
  6. save 120 10 # 2分钟内且有>=10个变量改变 就把内存里的数据复制到dump.rdb文件里
  7. save 60 10000
  8. :wq
  9. [root@redis70 ~]# systemctl start redis
  10. Starting Redis server...
  11. [root@redis70 ~]# ls /var/lib/redis/dump.rdb
  12. ls: 无法访问/var/lib/redis/6379/dump.rdb: 没有那个文件或目录
  13. [root@redis70 ~]#

在服务启动后,要在2分钟内存储大于等10个变量

 
  1. [root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
  2. 192.168.88.70:6379> mset a 1 b 2 c 3 d 4
  3. OK
  4. 192.168.88.70:6379> mset x 1 y 2 z 3 k 6 i 7 z 9 f 22 zz 99 cc 66
  5. 192.168.88.70:6379> exit
  6. [root@redis70 ~]# ls /var/lib/redis/
  7. dump.rdb
  8. [root@redis70 ~]# ls /var/lib/redis/ -l 显示文件创建的时间
  9. 总用量 4
  10. -rw-r--r-- 1 root root 159 10月 26 16:30 dump.rdb
  11. [root@redis70 ~]#

步骤二:使用RDB文件恢复数据

 
  1. 第1步:拷贝 dump.rdb 文件就是对数据的备份
  2. [root@redis70 ~]# cp /var/lib/redis/dump.rdb /opt/
  3. [root@redis70 ~]# ls /opt/*.rdb
  4. /opt/dump.rdb
  5. [root@redis70 ~]#
  6. 第2步:把备份的 dump.rdb 文件 再次拷贝回数据库目录就是恢复
  7.              #误删除数据
  8. 192.168.88.70:6379> FLUSHALL
  9. OK
  10. 192.168.88.70:6379> keys *
  11. (empty list or set)
  12. 192.168.88.70:6379>

使用备份的dump.rdb文件恢复

第1步 停止内存没有数据的redis服务

第2步 把没有数据的dump.rdb文件删除

第3步 把备份dump.rdb文件拷贝到数据库目录下

第4步 启动redis服务 并连接服务查看数据

 
  1. [root@redis70 ~]# systemctl stop redis
  2. [root@redis70 ~]# rm -rf /var/lib/redis/dump.rdb
  3. [root@redis70 ~]# cp /opt/dump.rdb /var/lib/redis/
  4. [root@redis70 ~]# systemctl start redis
  5. Starting Redis server...
  6. [root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
  7. 192.168.88.70:6379> keys *
  8. 1) "i"
  9. 2) "d"
  10. 3) "x"
  11. ……
  12. ……

5 案例5:AOF

5.1 问题

  1. 启用AOF
  2. 使用AOF文件恢复数据

5.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:启用AOF

命令操作如下所示:

 
  1. [root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
  2. 192.168.88.70:6379> config set appendonly yes 启用aof文件
  3. OK
  4. 192.168.88.70:6379> config get appendonly 查看是否启用
  5. 1) "appendonly"
  6. 2) "yes"
  7. 192.168.88.70:6379>
  8. 192.168.88.70:6379> config rewrite 保存配置
  9. OK
  10. 192.168.88.70:6379> exit 断开连接
  11. 数据库目录多了.aof文件
  12. [root@redis70 ~]# ls /var/lib/redis/
  13. appendonly.aof dump.rdb
  14. [root@redis70 ~]#wc –l /var/lib/redis/appendonly.aof 查看文件行数
  15. [root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
  16. 192.168.88.70:6379> set x 1 存储变量x
  17. OK
  18. 192.168.88.70:6379> set y 2 存储变量y
  19. OK
  20. 192.168.88.70:6379> set z 3 存储变量z
  21. OK
  22. 192.168.88.70:6379>keys * 查看变量
  23. 1) "x"
  24. 2) "z"
  25. 3) "y"
  26. 192.168.88.70:6379> exit 断开连接
  27. [root@redis70 ~]#wc –l /var/lib/redis/ appendonly.aof 查看文件行数

步骤二:使用AOF文件恢复数据

1)备份aof文件

 
  1. [root@redis70 ~]# cp /var/lib/redis/appendonly.aof /opt/
  2. [root@redis70 ~]# ls /opt/*.aof
  3. /opt/appendonly.aof
  4. [root@redis70 ~]#

2)使用备份的aof文件恢复数据

 
  1.                  #删除数据
  2. [root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
  3. 192.168.88.70:6379> flushall
  4. 192.168.88.70:6379> exit

3)恢复数据

 
  1. 第1步: 把没有数据的服务停止
  2. [root@redis70 ~]# systemctl stop redis
  3. 第2步: 删除没有数据的aof文件和rdb文件
  4. [root@redis70 ~]# rm -rf /var/lib/redis/*
  5. 第3步:把备份的aof文件拷贝到数据库目录
  6. [root@redis70 ~]# cp /opt/appendonly.aof /var/lib/redis/
  7.                     
  8. 第4步:启动redis服务并查看数据
  9. [root@redis70 ~]# systemctl start redis
  10. [root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
  11. 192.168.88.70:6379> keys *
  12. 1) "v4"
  13. 2) "v3"
  14. 。。。。。。
  15. 。。。。。。

6 案例6:字符类型

6.1 问题

练习命令的使用,具体命令如下:

  • set getrange strlen append
  • decr decrby incr incrby incrbyfloat

6.2 方案

在redis70主机做字符类型命令的练习。

6.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:命令操作如下所示:

存储变量时 设置变量的有效期 px(毫秒) ex (秒)

 
  1. 192.168.88.70:6379> set name plj ex 10 //变量10秒过期
  2. OK
  3. 192.168.88.70:6379>
  4. 192.168.88.70:6379> type name //查看类型
  5. string
  6. 192.168.88.70:6379>
  7. 192.168.88.70:6379> set class nsd px 10 //变量10毫秒过期
  8. OK
  9. 192.168.88.70:6379>
  10. NX 不覆盖赋值
  11. 192.168.88.70:6379> set name plj NX
  12. OK
  13. 192.168.88.70:6379> get name
  14. "plj"
  15. XX 覆盖赋值
  16. 192.168.88.70:6379> set name yaya XX
  17. OK
  18. 192.168.88.70:6379> get name
  19. "yaya"
  20. 192.168.88.70:6379>

set 命令完整格式演示

 
  1. 192.168.88.70:6379> set gender girl ex 20 NX
  2. OK
  3. 192.168.88.70:6379>

- 递增数字:字符串类型可以存储任何形式的字符串,当存储的字符串是整数形式时,

Redis 提供了一个实用的命令 INCR,其作用是让当前键值递增,并返回递增后的值。

# 当要操作的键不存在时会默认键值为0,所以第一次递增后的结果是1。

 
  1. 192.168.88.70:6379> set num 1 //创建变量
  2. 192.168.88.70:6379> INCR num //+1
  3. (integer) 2
  4. 192.168.88.70:6379> INCR num //+1
  5. (integer) 3
  6. 192.168.88.70:6379> GET num
  7. "3"

- 增加指定的整数

 
  1. 192.168.88.70:6379> INCRBY num 2 //+2
  2. (integer) 5
  3. 192.168.88.70:6379> INCRBY num 3 //+3
  4. (integer) 8
  5. - 递减数字
  6. 192.168.88.70:6379> DECR num //-1
  7. (integer) 7
  8. 192.168.88.70:6379> DECRBY num 3 //
  9. (integer) 4

- 向尾部追加值

 
  1. 192.168.88.70:6379> SET hi Hello //创建变量hi
  2. OK
  3. 192.168.88.70:6379> APPEND hi " World" # 因为字符串包含空格,需要使用引号
  4. (integer) 11 # 返回值为hi的总长度
  5. 192.168.88.70:6379> GET hi
  6. "Hello World"

- 获取字符串长度

 
  1. 192.168.88.70:6379> STRLEN hi
  2. (integer) 11
  3. - 中文字符返回字节数
  4. 192.168.88.70:6379> SET name 张三
  5. OK
  6. 192.168.88.70:6379> STRLEN name
  7. (integer) 6 # UTF-8编码的中文,由于“张”和“三”两个字的UTF-8编码的长度都是3,所以此例中会返回6。

获取变量部分数据

 
  1. 192.168.88.70:6379> set zfc ABCEF //创建变量
  2. OK
  3. 192.168.88.70:6379> GET zfc //输出变量值
  4. "ABCEF"
  5. 192.168.88.70:6379> GETRANGE zfc 0 1 //输出第1个到第2个字符
  6. "AB"
  7. 192.168.88.70:6379> GETRANGE zfc 2 4 //输出第3个到第5个字符
  8. "CEF"
  9. 192.168.88.70:6379> GETRANGE zfc -2 -1 //输出倒数第2个到第1个字符
  10. "EF"
  11. 192.168.88.70:6379>

7 案例7:列表类型

7.1 问题

练习命令使用,具体如下:

  • lpush llen lrange lpop
  • lindex lset rpush rpop linsert

7.2 方案

在redis70主机做练习。

7.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:命令操作如下所示:

LPUSH命令用来向列表左边增加元素,返回值表示增加元素后列表的长度

 
  1. //创建变量
  2. 192.168.88.70:6379> lpush letter A B C
  3. (integer) 3
  4. 192.168.88.70:6379> type letter 查看类型
  5. list
  6. 192.168.88.70:6379>
  7. //头部追加元素
  8. 192.168.88.70:6379> lpush letter d e
  9. (integer) 5

取出列表所有元素

 
  1. # 起始下标为0,结束下标为-1
  2. 192.168.88.70:6379> lrange letter 0 -1
  3. 1) "e"
  4. 2) "d"
  5. 3) "C"
  6. 4) "B"
  7. 5) "A"

统计元素个数

 
  1. 192.168.88.70:6379> llen letter
  2. (integer) 5

通过下标输出单个元素 第1个元素下标用0表示 第2个元素下标用1表示

最后一个元素下标用-1表示

 
  1. 192.168.88.70:6379> lindex letter 0
  2. "e"
  3. 192.168.88.70:6379> lindex letter 2
  4. "C"
  5. 192.168.88.70:6379>
  6. 192.168.88.70:6379> lindex letter -1 //最后1个
  7. "A"
  8. 192.168.88.70:6379> lindex letter -2 //倒数第2个
  9. "B"
  10. 192.168.88.70:6379>

lset修改元素

 
  1. 192.168.88.70:6379> lrange letter 0 -1 修改前查看
  2. 1) "e"
  3. 2) "d"
  4. 3) "C"
  5. 4) "B"
  6. 5) "A"
  7. 192.168.88.70:6379> lset letter 0 E 修改第1元素
  8. OK
  9. 192.168.88.70:6379> lset letter -1 a 修改最后1个元素
  10. OK
  11. 192.168.88.70:6379> lrange letter 0 -1 修改后查看
  12. 1) "E"
  13. 2) "d"
  14. 3) "C"
  15. 4) "B"
  16. 5) "a"
  17. 192.168.88.70:6379>

弹出元素(删除元素)

 
  1. 192.168.88.70:6379> lrange letter 0 -1 修改前查看
  2. 1) "E"
  3. 2) "d"
  4. 3) "C"
  5. 4) "B"
  6. 5) "a"
  7. 192.168.88.70:6379> lpop letter 弹出头部元素
  8. "E"
  9. 192.168.88.70:6379> rpop letter 弹出尾部元素
  10. "a"
  11. 192.168.88.70:6379> lrange letter 0 -1 修改后查看
  12. 1) "d"
  13. 2) "C"
  14. 3) "B"
  15. 192.168.88.70:6379>

尾部追加元素

 
  1. 192.168.88.70:6379> rpush letter e f 尾部追加元素
  2. (integer) 5
  3. 192.168.88.70:6379> lrange letter 0 -1 追加后查看
  4. 1) "d"
  5. 2) "C"
  6. 3) "B"
  7. 4) "e"
  8. 5) "f"
  9. 192.168.88.70:6379>

插入元素

 
  1. 192.168.88.70:6379> lrange letter 0 -1 插入前查看
  2. 1) "d"
  3. 2) "C"
  4. 3) "B"
  5. 4) "e"
  6. 5) "f"
  7. 192.168.88.70:6379>
  8. 192.168.88.70:6379> linsert letter before C C2 值C前插入C2
  9. (integer) 6
  10. 192.168.88.70:6379> lrange letter 0 -1 插入后查看
  11. 1) "d"
  12. 2) "C2"
  13. 3) "C"
  14. 4) "B"
  15. 5) "e"
  16. 6) "f"
  17. 192.168.88.70:6379>
  18. 192.168.88.70:6379> linsert letter after C C3 值C后插入C3
  19. (integer) 7
  20. 192.168.88.70:6379> lrange letter 0 -1 插入后查看
  21. 1) "d"
  22. 2) "C2"
  23. 3) "C"
  24. 4) "C3"
  25. 5) "B"
  26. 6) "e"
  27. 7) "f"
  28. 192.168.88.70:6379>

8 案例8:散列类型

8.1 问题

练习命令使用,具体如下:

  • hset hmset hgetall hkeys hvals
  • hget hmget hdel

8.2 方案

在redis70主机做练习。

8.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:命令操作如下所示:

赋值与取值

 
  1. 192.168.88.70:6379> HSET user1 name bob 创建变量
  2. (integer) 1
  3. 192.168.88.70:6379> type user1 查看类型
  4. hash
  5. 192.168.88.70:6379>
  6. 192.168.88.70:6379> HSET user1 gender man 赋新值
  7. (integer) 1
  8. 192.168.88.70:6379> HGET user1 name 查看name列的值
  9. "bob"

设置多个字段

 
  1. 192.168.88.70:6379> HMSET user1 email bob@tedu.cn phone 13412345678
  2. OK
  3. 192.168.88.70:6379> HMGET user1 email phone
  4. 1) "bob@tedu.cn"
  5. 2) "13412345678"

获取所有列名及对应的值

 
  1. 192.168.88.70:6379> HGETALL user1
  2. 1) "name"
  3. 2) "bob"
  4. 3) "gender"
  5. 4) "male"
  6. 5) "email"
  7. 6) "bob@tedu.cn"
  8. 7) "phone"
  9. 8) "13412345678"

删除列

 
  1. 192.168.88.70:6379> HDEL user1 age
  2. (integer) 1

只获取列名

 
  1. 192.168.88.70:6379> HKEYS user1
  2. 1) "name"
  3. 2) "gender"
  4. 3) "email"
  5. 4) "phone"
  6. 5) "address"

只获取值

 
  1. 192.168.88.70:6379> HVALS user1
  2. 1) "bob"
  3. 2) "male"
  4. 3) "bob@tedu.cn"
  5. 4) "13412345678"
  6. 5) "beijing"

获得列数量

 
  1. 192.168.88.70:6379> HLEN user1
  2. (integer) 5

9 案例9:集合类型

9.1 问题

练习命令使用,具体如下:

  • 练习无序集合类型命令
  • 练习有序集合类型命令

9.2 方案

在redis70主机做练习。

9.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:练习无序集合类型命令

无序集合中的每个元素都是不同的,且没有顺序

创建/追加/删除/查看

 
  1. 192.168.88.70:6379> sadd mylike film muisc game 创建
  2. (integer) 3
  3. 192.168.88.70:6379> type mylike 查看数据类型
  4. set
  5. 192.168.88.70:6379> sadd mylike sleep game it 追加,自动删除重复的值
  6. (integer) 2
  7. 192.168.88.70:6379> srem mylike sleep game 删除成员
  8. (integer) 2
  9. 192.168.88.70:6379> SMEMBERS mylike 查看成员
  10. 1) "film"
  11. 2) "it"
  12. 3) "muisc"
  13. 192.168.88.70:6379>

判断元素是否在集合中

 
  1. 192.168.88.70:6379> SISMEMBER mylike game 输出0表示不存在
  2. (integer) 0
  3. 192.168.88.70:6379> SISMEMBER mylike music 输出1表示存在
  4. (integer) 1
  5. 192.168.88.70:6379>

输出成员个数

 
  1. 192.168.88.70:6379> SCARD mylike
  2. (integer) 3
  3. 192.168.88.70:6379>

集合运算

 
  1. 192.168.88.70:6379> SMEMBERS mylike
  2. 1) "film"
  3. 2) "it"
  4. 3) "muisc"
  5. 192.168.88.70:6379> sadd helike film music game sleep
  6. (integer) 4
  7. 192.168.88.70:6379>
  8. 合集 重复的只显示一次
  9. 192.168.88.70:6379> SUNION mylike helike
  10. 1) "game"
  11. 2) "it"
  12. 3) "muisc"
  13. 4) "film"
  14. 5) "sleep"
  15. 6) "music"
  16. 192.168.88.70:6379>
  17. 交集
  18. 192.168.88.70:6379> SINTER mylike helike
  19. 1) "film"
  20. 192.168.88.70:6379>
  21. 差集: 用第1列的变量和第2列的变量比
  22. 192.168.88.70:6379> SDIFF mylike helike
  23. 1) "it"
  24. 2) "muisc"
  25. 192.168.88.70:6379> SDIFF helike mylike
  26. 1) "game"
  27. 2) "sleep"
  28. 3) "music"
  29. 192.168.88.70:6379>

随机获得集合中的元素

 
  1. # 在集合helike中随机取出两个不同元素。
  2. 192.168.88.70:6379> SRANDMEMBER helike 2
  3. 1) "sleep"
  4. 2) "music"
  5. 192.168.88.70:6379> SRANDMEMBER helike 2
  6. 1) "game"
  7. 2) "music"
  8. 192.168.88.70:6379>
  9. # 在集合helike中随机取出两个有可能相同元素。
  10. 192.168.88.70:6379> SRANDMEMBER helike -2
  11. 1) "film"
  12. 2) "music"
  13. 192.168.88.70:6379> SRANDMEMBER helike -2
  14. 1) "music"
  15. 2) "music"
  16. 192.168.88.70:6379>

集合中随机弹出一个元素

 
  1. 192.168.88.70:6379> spop helike 第1次弹出
  2. "music"
  3. 192.168.88.70:6379> spop helike 第2次弹出
  4. "game"
  5. 192.168.88.70:6379> SMEMBERS helike 查看
  6. 1) "film"
  7. 2) "sleep"
  8. 192.168.88.70:6379>

步骤二:练习有序集合类型命令

ZADD命令的返回值是新加入到集合中的元素个数

 
  1. 192.168.88.70:6379> ZADD scores 88 tom 90 jerry 75 bob 92 alice 创建变量
  2. (integer) 4
  3. 192.168.88.70:6379> type scores 查看类型
  4. zset
  5. 192.168.88.70:6379> ZCARD scores 统计成员个数
  6. (integer) 4
  7. 192.168.88.70:6379> ZRANGE scores 0 -1 输出成员名称
  8. 1) "bob"
  9. 2) "tom"
  10. 3) "jerry"
  11. 4) "alice"
  12. 192.168.88.70:6379> ZRANGE scores 0 -1 withscores 输出成员名称及对应的值
  13. 1) "bob"
  14. 2) "75"
  15. 3) "tom"
  16. 4) "88"
  17. 5) "jerry"
  18. 6) "90"
  19. 7) "alice"
  20. 8) "92"
  21. 192.168.88.70:6379>

获得某个成员的值

 
  1. 192.168.88.70:6379> ZSCORE scores tom
  2. "88"

- 获得指定分数范围的元素

 
  1. 192.168.88.70:6379> ZRANGEBYSCORE scores 80 90 WITHSCORES
  2. 1) "jerry"
  3. 2) "85"
  4. 3) "tom"
  5. 4) "88"

- 增加某个元素的分数

 
  1. 192.168.88.70:6379> ZINCRBY scores 3 bob
  2. "78"
  3. 192.168.88.70:6379> ZSCORE scores bob
  4. "78"

- 获得指定分数范围内的元素个数

 
  1. 192.168.88.70:6379> ZCOUNT scores 80 90
  2. (integer) 2

- 删除元素

 
  1. 192.168.88.70:6379> ZREM scores bob
  2. (integer) 1

- 获得元素的排名

 
  1. 192.168.88.70:6379> ZRANK scores tom # 获取tom的排名
  2. (integer) 1 # 升序排列,从0开始计数
  3. 192.168.88.70:6379> ZREVRANK scores alice # 获取alice的排名
  4. (integer) 0 # 降序排列,从0开始计数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/38952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux交叉编译opencv并移植ARM端

Linux交叉编译opencv并移植ARM端 - 知乎 一、安装交叉编译器 目标平台为arm7l,此为32位ARM架构,要安装合适的编译器 sudo apt install arm-linux-gnueabihf-gcc sudo apt install arm-linux-gnueabihf-g注意:64位ARM架构的编译器与32位ARM架…

【MyBatis】查询数据库

目录 一、什么是MyBatis 二、MyBatis框架的搭建 1、搭建MyBatis框架 2、设置MyBaits项目的配置 三、使用MyBatis完成数据库的操作 1、MyBatis程序中sql语句的即时执行和预编译 1.1、即时执行(${}) 1.2、预编译(#{}) 1.3、即…

tomcat设置PermSize

最近tomcat老是报错,查看了日志出现PermGen 内存不够用,重启tomcat后查询使用情况 通过启动参数发现没有设置 PermGen,继续通过jmap查看 jmap -heap 21179 发现99%已使用,而且默认是30.5M,太小了,这里设置成256M 1. 创建setenv.sh文件 在/usr/local/tomcat/bin目录下创建一个…

解锁编程的新契机:深入探讨Kotlin Symbol Processor (KSP)的编写

解锁编程的新契机:深入探讨Kotlin Symbol Processor (KSP)的编写 1. 引言 随着软件开发领域的不断发展,新的工具和技术不断涌现,以满足开发者在构建高效、可维护和创新性的代码方面的需求。Kotlin Symbol Processor(KSP&#xf…

从零开始,快速打造租车服务小程序的分享

随着移动互联网的发展,小程序成为了企业推广和服务的重要手段之一。租车服务行业也不例外,通过打造一款租车服务小程序,企业可以更好地与用户进行互动和交流,提供更方便快捷的租车服务。本文将介绍如何利用第三方制作平台/工具快速…

PHP实现在线年龄计算器

1. 输入日期查询年龄 2. php laravel框架实现 代码 /*** 在线年龄计算器*/public function ageDateCal(){// 输入的生日时间$birthday $this->request(birthday);// 当前时间$currentDate date(Y-m-d);// 计算周岁$age date_diff(date_create($birthday), date_create($…

Eleastisearch5.2.2利用镜像迁移构建实例后ES非健康状态

正常迁移完成后启动服务,查看ES非健康状态 此时观察ES集群状态:curl -XGET -u elastic:xxx localhost:9200/_cluster/health?pretty 注意到"active_shards_percent_as_number" : 88.8888 该项的值不产生变化;集群状态"status" : “…

SQL注入之Oracle注入

SQL注入之Oracle注入 7.1 SQL注入之Oracle环境搭建 前言 Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统…

(el-Form)操作(不使用 ts):Element-plus 中 Form 表单组件校验规则等的使用

Ⅰ、Element-plus 提供的 Form 表单组件与想要目标情况的对比: 1、Element-plus 提供 Form 表单组件情况: 其一、Element-plus 自提供的 Form 代码情况为(示例的代码): // Element-plus 自提供的代码: // 此时是使用了 ts 语言环…

6.3 社会工程学攻击

数据参考:CISP官方 目录 社会工程学攻击概念社会工程学攻击利用的人性 “弱点”典型社会工程学攻击方式社会工程学攻击防护 一、社会工程学攻击概念 什么是社会工程学攻击 也被称为 "社交工程学" 攻击利用人性弱点 (本能反应、贪婪、易于信任等) 进…

栈存储结构详解

目录 栈存储结构详解 进栈和出栈 栈的具体实现 栈的应用 什么是队列(队列存储结构) 栈存储结构详解 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如图 1 所示。 图 1 栈存储结构示意…

HTML5的介绍和基本框架

目录 HTML5 HTML5介绍 HTML5的DOCTYPE声明 HTML5基本骨架 html标签 head标签 body标签 title标签 meta标签 在vscode中写出第一个小框架 HTML5 HTML5介绍 HTML5是用来描述网页的一种语言,被称为超文本标记语言。用HTML5编写的文件,后缀以.ht…

设备加密狗

场景描述 随着科技的飞速发展,越来越多的智能设备走进生产加工车间。例如智能雕刻机、钣金机、 榫槽机、钻孔机、磨刀机等等。 目前市场的智能设备具有一个共同的特点,内置嵌入操作系统,如windows或者linux系统。设备制造商提供智能设备出…

连续两年增收不增利,比亚迪电子靠新能源汽车业务再次起飞?

在净利润连续两年下挫之后,比亚迪电子(00285.HK)终于迎来了好消息。 不久前比亚迪电子发布2023年中期盈利预告显示,上半年净利润同比增加115%-146%(2022年上半年的净利润显示6.34亿元)。 这主要受益于大客…

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解

包管理工具 nvm npm yarn cnpm npx pnpm npm、cnpm、yarn、pnpm、npx、nvm的区别:https://blog.csdn.net/weixin_53791978/article/details/122533843 npm、cnpm、yarn、pnpm、npx、nvm的区别:https://blog.csdn.net/weixin_53791978/article/details/1…

强训第32

选择 D B A A 发送TCP意思应该是已经建立了连接,会超时重传。在未建立连接的时候,会放弃该链接 C A 80端口是http A 交换机攻击主要有五种:VLAN跳跃攻击 生成树攻击 MAC表洪水攻击 ARP攻击 VTP攻击 B A 2^(32-26)2^(32-27)2^(32-27)128 减去…

基于Java+SpringBoot+Vue+echarts健身房管理系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

maven Jar包反向install到本地仓库

maven Jar包反向install到本地仓库 需求实现 需求 项目打包时报错,缺少一个jar包。 但是在maven仓库都找不到此jar包,其他人提供了这个jar包。 需要把这个jar包install到本地仓库,使项目能正常打包运行。 实现 使用git bash命令执行以下脚…

16.3.4 【Linux】系统资源的观察

free :观察内存使用情况 系统当中有 2848MB 左右的实体内存,我的 swap 有 1GB 左右, 那我使用free -m 以 MBytes 来显示时,就会出现上面的信息。Mem 那一行显示的是实体内存的量,Swap 则是内存交换空间的量。 total 是…

C++多态

文章目录 🐵1. 什么是多态🐶2. 构成多态的条件🐩2.1 虚函数🐩2.2 虚函数的重写🐩2.3 final 和 override关键字🐩2.4 重载、重写、重定义对比 🐱3. 虚函数表🐯4. 多态的原理&#x1f…