redis应用1:安装部署、数据类型、快照机制、配置详解、ACL使用、单数数据迁移

一.熟练安装Redis

# yum形式安装最新版redis
[root@redis-1 ~]# cat  /etc/yum.repos.d/redis.repo
[Redis]
name=Redis
baseurl=http://packages.redis.io/rpm/rhel7
enabled=1
gpgcheck=0
[root@redis-1 ~]# yum clean all && yum makecache
# 安装epel源
[root@redis-1 ~]# yum install epel-release -y
# 查看可用redis安装包,Redis Stack 是 Redis 的扩展,它添加了现代数据模型和处理引擎,以提供完整的开发人员体验
[root@redis-1 ~]# yum list redis-stack-server --showduplicates | sort -r 
# 安装最新版redis
[root@redis-1 ~]# yum install -y redis-stack-server-7.2.0_v0-1.rhel7
[root@redis-1 ~]# systemctl restart redis-stack-server.service
# 编译安装redis  下载当前最新release版本redis 源码包, http://download.redis.io/releases
[root@redis-2 ~]# cd /usr/local/src/
[root@redis-2 src]# wget http://download.redis.io/releases/redis-7.2.0.tar.gz
# 安装依赖
[root@redis-2 src]# yum install -y iproute2 ntpdate tree libssl-dev gcc openssh-server lrzsz openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip make libsystemd-dev pkg-config gcc openssl-devel pcre-devel systemd-devel
[root@redis-2 src]# tar xvf redis-7.2.0.tar.gz
[root@redis-2 redis-7.2.0]# make USE_SYSTEMD=yes PREFIX=/apps/redis install
[root@redis-2 redis-7.2.0]# ll /apps/redis/bin/
总用量 12012
-rwxr-xr-x 1 root root 1072656 95 07:08 redis-benchmark #redis性能测试工具
lrwxrwxrwx 1 root root      12 95 07:08 redis-check-aof -> redis-server #AOF文件检查工具
lrwxrwxrwx 1 root root      12 95 07:08 redis-check-rdb -> redis-server  #RDB文件检查工具
-rwxr-xr-x 1 root root 1790704 95 07:08 redis-cli #客户端工具
lrwxrwxrwx 1 root root      12 95 07:08 redis-sentinel -> redis-server #哨兵
-rwxr-xr-x 1 root root 9429048 95 07:08 redis-server #redis 服务启动命令
[root@redis-2 redis-7.2.0]# ln -sv /apps/redis/bin/redis-* /usr/bin/
[root@redis-2 redis]# mkdir /apps/redis/{etc,logs,data,run} #创建配置文件、日志、数据等目录
# 传入配置文件,启动
[root@redis-2 redis]# ./bin/redis-server ./etc/redis-7.2.0.conf 
# 验证
[root@redis-2 redis]# redis-cli -h 172.18.10.136 -p 6379 -a 123

二.掌握Redis的常见数据类型的使用

  1. 字符串string
# 字符串是使用最广泛的数据类型,字符串数据使用二进制保存,比如图片、视频等,默认一个字符串的value最大512M。
172.18.10.136:6379> set k1 v1   # 设置string类型的key value键值对
OK
172.18.10.136:6379> get k1      # 查看key值
"v1"
172.18.10.136:6379> TYPE k1	    # 查看key的类型
string
172.18.10.136:6379> set name1 zxw1 ex 10  # 设置key的自动过期时间
OK
172.18.10.136:6379> get name1
"zxw1"
172.18.10.136:6379> ttl name1    # 查看key剩余过期时间
(integer) 5
172.18.10.136:6379> keys *   # 查看所有key
1) "k1"
172.18.10.136:6379> del k1   # 删除key
172.18.10.136:6379> mset k1 v1 k2 v2 k3 v3  # 批量设置key
OK
172.18.10.136:6379> mget k1 k2 k3   # 批量查看key
1) "v1"
2) "v2"
3) "v3"
172.18.10.136:6379> del k1 k2 k3   # 批量删除key
172.18.10.136:6379> set k1 v1
OK
172.18.10.136:6379> append k1 vvvvvvvvv   # 在现有key的值上追加数据
(integer) 11
172.18.10.136:6379> get k1
"v1vvvvvvvvv"
172.18.10.136:6379> set n1 10  
OK
172.18.10.136:6379> incr n1   # 数值递增
(integer) 11
172.18.10.136:6379> get n1
172.18.10.136:6379> DECR n1   # 数值递减
(integer) 10
172.18.10.136:6379> get n1
"10"
172.18.10.136:6379> strlen k1   # 获取value的长度
(integer) 11
172.18.10.136:6379> get k1
"v1vvvvvvvvv"
172.18.10.136:6379> exists k1  # 判断key是否存在,存在返回1,否则返回0
(integer) 1
172.18.10.136:6379> exists k2
(integer) 0
172.18.10.136:6379> ttl k1
(integer) -1
# ttl #查看key的剩余生存时间
# -1 #负一为永不过期,默认创建的key是永不过期,重新对key赋值,也会从有剩余生命周期变成永不过期
# -2 #为没有此key
# num #key的剩余有效期
172.18.10.136:6379> set mykey myvalue ex 100
OK
172.18.10.136:6379> ttl mykey
(integer) 95
172.18.10.136:6379> PERSIST mykey  # 设置key永不过期
(integer) 1
172.18.10.136:6379> ttl mykey
(integer) -1
172.18.10.136:6379> 
172.18.10.136:6379> EXPIRE mykey 6666  # 为现有key设置过期时间
(integer) 1
172.18.10.136:6379> ttl mykey
(integer) 6663
  1. 列表list
# 列表是一个双向可读写的管道,其头部是左侧尾部是右侧,一个列表最多可以包含2^32-1个元素即4294967295个元素。
172.18.10.136:6379[1]> lpush list1 aaa bbb ccc ddd # 根据顺序逐个写入list1,最后写入的会在最左侧,既 [ddd,ccc,bbb,aaa]
(integer) 4
172.18.10.136:6379[1]> type list1 
list
172.18.10.136:6379[1]> lpush list1 eee # [eee,ddd,ccc,bbb,aaa]
(integer) 5
172.18.10.136:6379[1]> lpush list1 fff  # [fff,eee,ddd,ccc,bbb,aaa]
(integer) 6
172.18.10.136:6379[1]> rpop list1 # 弹出右侧数据
"aaa"
172.18.10.136:6379[1]> lpop list1 # 弹出左侧数据
# 获取列表指定位置数据
172.18.10.136:6379[1]> lrange list1 1 2
1) "ccc"
2) "bbb"
172.18.10.136:6379[1]> lrange list1 0 2  # [ddd,ccc,bbb] 弹出数据之后的列表,从左侧开始,去下标0-2三个数据
1) "ddd"
2) "ccc"
3) "bbb"
172.18.10.136:6379[1]> lrange list1 1 1  # 取固定下标数据
1) "ccc"
  1. set string类型无序集合
# Set 是 String 类型的无序集合,集合中的成员是唯一的,这就意味着集合中不能出现重复的数据,可以在两个不同的集合中对数据进行对比并取值
172.18.10.136:6379> sadd set1 v1  # 定义无序集合set1
(integer) 1
172.18.10.136:6379> sadd set1 v1 v4  # 追加数据,不能有重复值,会只保留一个v1
(integer) 1
172.18.10.136:6379> type set1         # 类型
set
172.18.10.136:6379> sadd set2 v1 v4   
(integer) 2
172.18.10.136:6379> type set2
set
172.18.10.136:6379> smembers set1   # 查看集合的数据
1) "v1"
2) "v4"
172.18.10.136:6379> sadd set1 v2 v3
(integer) 2
172.18.10.136:6379> sdiff set1 set2  # 查看两个set的差集,差集:已属于A而不属于B的元素称为A与B的差(集)
1) "v2"
2) "v3"
172.18.10.136:6379> sinter set1 set2  # 获取集合的交集:交集:已属于A且属于B的元素称为A与B的交(集)
1) "v1"
2) "v4"
172.18.10.136:6379> sunion set1 set2  #获取集合的并集:并集:已属于A或属于B的元素为称为A与B的并(集)
1) "v1"
2) "v4"
3) "v2"
4) "v3"
  1. sorted set(有序集合)
# sorted set(有序集合):Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double(双精度浮点型)类型的分数,redis正是通过该分数来为集合中的成员进行从小到大的排序,有序集合的成员是唯一的,但分数(score)却可以重复,集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1), 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。
172.18.10.136:6379> zadd zset1 1 v1  
(integer) 1
172.18.10.136:6379> zadd zset1 2 v2
(integer) 1
172.18.10.136:6379> zadd zset1 2 v3
(integer) 1
172.18.10.136:6379> zadd zset1 3 v4
(integer) 1
172.18.10.136:6379> type zset1
zset
172.18.10.136:6379> zadd zset2 1 v1 2 v2 3 v3 4 v4 5 v5 # 一次生成多个数据
(integer) 5
172.18.10.136:6379> zcard zset1 # 获取长度
(integer) 4
172.18.10.136:6379> zcard zset2
(integer) 5
172.18.10.136:6379> zrange zset1 1 3  # 根据索引取值
1) "v2"
2) "v3"
3) "v4"
172.18.10.136:6379> zrange zset1 0 1 
1) "v1"
2) "v2"
172.18.10.136:6379> zrank zset1 v1 # 根据值获取索引
(integer) 0
172.18.10.136:6379> zrank zset1 v3
(integer) 2
172.18.10.136:6379> ZADD paihangbang 90 nezha 199 zhanlang 60 zhuluoji 30 gangtiexia 99 fengshenbang
(integer) 5
172.18.10.136:6379> zrange paihangbang 0 -1 # 显示集合内所有值
1) "gangtiexia"
2) "zhuluoji"
3) "nezha"
4) "fengshenbang"
5) "zhanlang"
172.18.10.136:6379> zrevrange paihangbang 0 -1 withscores # 降序获取集合呢所有key和得分情况
 1) "zhanlang"
 2) "199"
 3) "fengshenbang"
 4) "99"
 5) "nezha"
 6) "90"
 7) "zhuluoji"
 8) "60"
 9) "gangtiexia"
10) "30"
  1. 哈希(hash)
# hash 是一个键值对(key=>value)的集合,一个hash数据里面可以包含多个key-value的数据,Redis 中每个 hash 可以存储2^32 - 1 键值对(40多亿)。
# 生成hash key
172.18.10.136:6379> hset hash1 name zxw age 20 sex nan 
(integer) 3
# 获取hash类型
172.18.10.136:6379> type hash1
hash
# 获取hash中的key字段值
172.18.10.136:6379> hget hash1 name
"zxw"
172.18.10.136:6379> hget hash1 age
"20"
# 删除hash中的key
172.18.10.136:6379> hdel hash1 sex
(integer) 1
172.18.10.136:6379> hmset hash1 name age
OK
172.18.10.136:6379> hmset hash1 name tom age 20
OK
# 获取hash表中的key
172.18.10.136:6379> hkeys hash1
1) "name"
2) "age"
# 获取hash表中的key值
172.18.10.136:6379> hmget hash1 name age
1) "tom"
2) "20"
# 获取指定hash表中的所有key以及值
172.18.10.136:6379> hgetall hash1
1) "name"
2) "tom"
3) "age"
4) "20"

三.掌握redis.conf的基本配置

redis-7.2.0.conf

四.了解Redis的RDB快照及AOF机制

# 1、基于RDB实现数据持久化
# rdb部分配置
################################ SNAPSHOTTING  ################################
save 3600 1   # save 秒 写操作次数  每3600秒写入一次 执行一次rdb持久化
save 300 100  # 每300秒写入100次 执行一次rdb持久化
save 60 10000 # 每60秒写入10000次 执行一次rdb持久化
save 5 1      # 每5秒写入1次 执行一次rdb持久化
#持久化到RDB文件时,是否压缩,"yes"为压缩,"no"为不压缩
stop-writes-on-bgsave-error no
# 快照出错时是否禁止redis 写入操作,no,否则影响redis使用
rdbcompression yes 
#是否开启CRC64校验以保证RDB文件的完整性,默认为开启。校验rdb文件完整性
rdbchecksum yes
#快照文件名
dbfilename dump.rdb
#在没有开启数据持久化的情况下删除复制中使用的RDB文件
rdb-del-sync-files no
#快照及AOF持久化文件的保存路径。
dir /apps/redis/data/

# 除了自动生成rdb文件,也可以通过命令手动生成
# save: save只管保存,会发生阻塞,不能写入数据,手动保存,不建议使用。
# bgsave: redis会在后台异步进行快照操作,快照同时还可以响应客户端情况。
[root@redis-2 redis]# ./bin/redis-cli -h 172.18.10.136 -p 6379 -a 123
172.18.10.136:6379> bgsave  # 后台异步生成快照
Background saving started
172.18.10.136:6379> lastsave   # 获取 最后一次生成快照的时间戳
(integer) 1694084007

# 给予rdb进行数据恢复,此时数据目录下没有数据
[root@redis-2 redis]# ll ./data
总用量 0
# 添加数据
[root@redis-2 ~]# cat redis-client.sh 
#!/bin/bash
#Author: ZhangJie
NUM=`seq 1 1000`
for i in ${NUM};do
  redis-cli -h 127.0.0.1 -a 123 set key-${i} value-${i}
  echo "key-${i} value-${i} 写入完成"
done
echo "十万个key写入到Redis完成"
[root@redis-2 ~]# sh redis-client.sh 
# 查看添加的数据和rdb文件
[root@redis-2 ~]# redis-cli -h 172.18.10.136 -p 6379 -a 123 
172.18.10.136:6379> keys *
[root@redis-2 ~]# ll /apps/redis/data/
总用量 20
-rw-r--r-- 1 root root 18917 98 05:05 dump.rdb
# 备份rdb文件
[root@redis-2 ~]# cp /apps/redis/data/dump.rdb ./
# 删除数据进行恢复
[root@redis-2 ~]# redis-cli -h 172.18.10.136 -p 6379 -a 123 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
172.18.10.136:6379> flushdb
OK
172.18.10.136:6379> keys *
(empty array)
# 恢复数据,重启服务,自动读取数据进行恢复,拷贝备份的文件到数据目录下
[root@redis-2 ~]# cp dump.rdb /apps/redis/data/dump.rdb 
[root@redis-2 ~]# /apps/redis/bin/redis-server /apps/redis/etc/redis.conf 
# 验证数据是否恢复

在这里插入图片描述

# 2、aof持久化
# aof持久化相关配置
dir /apps/redis/data/
#快照及AOF持久化文件的保存路径。
appendonly yes
#是否启用AOF日志文件
appendfilename "appendonly.aof"
#AOF日志文件名称
appenddirname "appendonlydir"
#AOF日志文件的目录名称
appendfsync everysec
# ##aof持久化策略的配置,no表示不执行fsync,由操作系统保证数据同步到磁盘,always表示每次写入都执行fsync,以保证数据同步到磁盘,everysec表示每秒执行一次fsync,可能会导致丢失这1s数据。
no-appendfsync-on-rewrite no
#在aof rewrite期间,是否对aof新记录的append暂缓使用文件同步策略,主要考虑磁盘IO开支和请求阻塞时间。默认为no,表示"不暂缓",新的aof记录仍然会被立即同步,Linux的默认fsync策略是30秒,如果为yes 可能丢失30秒数据,但由于yes性能较好而且会避免出现阻塞因此比较推荐。
auto-aof-rewrite-percentage 100
# 当Aof log增长超过指定百分比例时,重写AOF文件, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,但是还可以确保保存最完整的数据,
auto-aof-rewrite-min-size 64mb
#触发aof rewrite的原始最小文件大小
aof-load-truncated yes
##是否加载由于其他原因导致的末尾异常的AOF文件(主进程被kill/断电等)
aof-use-rdb-preamble no
# #redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能之后,AOF重写产生的文件将同时包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)。
aof-timestamp-enabled no
# 是否记录时间戳,开启后可以从某个时间点恢复数据,但是可能会和现有的aof格式不兼容

# 添加数据验证aof文件
# 添加5000条数据
[root@redis-2 ~]# cat redis-client.sh 
#!/bin/bash
#Author: ZhangJie
NUM=`seq 1 5000`
for i in ${NUM};do
  redis-cli -h 127.0.0.1 -a 123 set key-${i} value-${i}
  echo "key-${i} value-${i} 写入完成"
done
echo "十万个key写入到Redis完成"
[root@redis-2 ~]# redis-cli -h 127.0.0.1 -a 123
127.0.0.1:6379> keys * # 验证数据是否添加
# 备份aof
[root@redis-2 data]# cd /apps/redis/data
[root@redis-2 data]# cp -r appendonlydir appendonlydir-bak
# 删除数据
[root@redis-2 data]# redis-cli -h 127.0.0.1 -a 123
127.0.0.1:6379> FLUSHALL
# 重启redis会恢复数据
[root@redis-2 data]# mv appendonlydir-bak appendonlydir
[root@redis-2 data]# /apps/redis/bin/redis-server /apps/redis/etc/redis.conf 
[root@redis-2 data]# 
[root@redis-2 data]# redis-cli -h 127.0.0.1 -a 123
# 验证

在这里插入图片描述

# 3、混合持久化
# 开启 参数
aof-use-rdb-preamble no
# #redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能之后,AOF重写产生的文件将同时包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)。

# Redis 4.0支持AOF+RDB混合模式-aof‐use‐rdb‐preamble yes
# Redis 5.0 默认是开启的。
# 混合持久化的加载流程如下:

在这里插入图片描述

总结
1、RDB持久化
优点:
	RDB快照保存了某个时间点的数据,可以通过脚本执行bgsave(非阻塞)或者save(阻塞)命令自定义时间点备份,可以保留多个备份,当出现问题可以恢复到不同时间点的版本。
	可以最大化IO 的性能,因为父进程在保存RDB 文件的时候唯一要做的是fork出一个子进程,然后的-操作都会有这个子进程操作,父进程无需任何的IO操作
	RDB在大量数据比如几个G的数据,恢复的速度比AOF的快
缺点:
	不能时时的保存数据,会丢失自上一次执行RDB备份到当前的内存数据
 	数据量非常大的时候,从父进程fork的时候需要一点时间,可能是毫秒或者秒或者分钟,取决于磁盘IO性能
2、aof持久化
	AOF:按照操作顺序依次将操作添加到指定的日志文件当中,特点是数据安全性相对较高,缺点是即使有些操作是重复的也会全部记录。
	AOF和RDB一样使用了写时复制机制,AOF默认为每秒钟fsync一次,即将执行的命令保存到AOF文件当中,这样即使redis服务器发生故障的话顶多也就丢失1秒钟之内的数据,也可以设置不同的fsync策略,或者设置每次执行命令的时候执行fsync,fsync会在后台执行线程,所以主线程可以继续处理用户的正常请求而不受到写入AOF文件的IO影响。
	AOF模式优缺点:
		AOF的文件大小要大于RDB格式的文件
		根据所使用的fsync策略(fsync是同步内存中redis所有已经修改的文件到存储设备),默认是appendfsync everysec即每秒执行一次fsync。
3、混合持久化
混合模式的执行过程:
	RDB-AOF混合持久化体现在aofrewrite时,先以RDB格式来保存全量数据,即Redis 会先把当前的内存数据以RDB方式写入到AOF文件,同时把当前的命令记录到重写缓冲区中,最后RDB完成后再把缓冲区中的命令以追加AOF的形式存在AOF文件中。
混合模式的优缺点:
	优点:集成了AOF与RDB的优点,开头为 RDB 的格式,使得 Redis 可以更快的启动,同时结合 AOF的优点,有减低了大量数据丢失的风险。
	缺点:文件可读性不直观,兼容性差,不能用在4.0之前的版本

五.掌握Redis ACL的基本使用

# ACL命令简介
127.0.0.1:6379> ACL help
1) ACL <subcommand> arg arg ... arg. Subcommands are:
2) LOAD #从ACL文件中重新载入用户信息
3) SAVE #保存当前的用户配置信息到ACL文件
4) LIST #以配置文件格式显示用户详细信息
5) USERS #列出所有已注册的用户名
6) SETUSER <username> [attribs ...] #创建或则修改一个用户
7) GETUSER <username> #得到一个用户的详细信息
8) DELUSER <username> [...] #删除列表中的用户
9) CAT #列出可用的ACL种类,如ACL CAT
10) CAT <category> #列出指定类别中的命令,如ACL CAT READ
11) GENPASS [<bits>] #自动生成一个安全的用户密码.
12) WHOAMI #返回当前的连接用户名称

ACL规则简介:
启用和禁用用户:
on:启用用户
off:禁用用户,已经创建好的TCP链接不会强制中断

允许或禁止访问某些Key:
~<pattern>:基于正则表达式匹配可以访问的key,例如~*和* allkeys 允许访问所有,~mykey和~Mykey是两个( key的名字区分大小写)。
resetkeys:基于resetkeys指定只能访问的key,如: ~foo:* ~bar:* resetkeys ~objects:* ,则客户端只能访问匹配 object:* 模式的 KEY。

允许和禁止调用命令:
+<command>:将命令添加到用户可以调用的命令列表中,多个命令用空格隔开
-<command>:将命令从用户可以调用的命令列表中移除
+@<category>:允许用户调用 <category> 类别中的所有命令,有效类别为@admin,@set,@sortedset等(使用命令acl cat查看),可通过调用ACL CAT命令查看完整列表,特殊类别@all表示所有命令,包括当前和未来版本中存在的所有命令
-@<category>:禁止用户调用<category> 类别中的所有命令
+<command>|subcommand:允许使用已禁用命令的特定子命令
allcommands等于+@al:包括当前存在的命令以及将来通过模块加载的所有命令
nocommands等于-@all:禁止调用所有命令

acl命令使用:
127.0.0.1:6379> ACL LIST # 查看用户信息,user default #当前账户名default;on #账户已经启用;nopass #没有设置密码;~* #能访问所有的key(~*);&* #能访问所有的发布/订阅(Pub/Sub)频道;+@all #能执行所有的命令
1) "user default on sanitize-payload #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* &* +@all"

# 通过ACL为user jack设置任意权限 >123455 为用户设置密码
127.0.0.1:6379> acl setuser jack on ~* &* +@all >123456
OK
127.0.0.1:6379> acl list
1) "user default on sanitize-payload #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* &* +@all"
2) "user jack on sanitize-payload #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 ~* &* +@all"

# 使用user jack登录redis:
[root@redis-2 redis]# redis-cli -h 127.0.0.1 
127.0.0.1:6379> auth jack 123456

# 通过ACL为user tom设置指定set和get命令权限:
127.0.0.1:6379> acl setuser tom on ~* &* +get +set >1234
OK
[root@redis-2 redis]# redis-cli -h 127.0.0.1 
127.0.0.1:6379> auth tom 1234
OK
127.0.0.1:6379> set tomk1 vvv1
OK
127.0.0.1:6379> get tomk1
"vvv1"
127.0.0.1:6379> del tomk1
(error) NOPERM User tom has no permissions to run the 'del' command

# 通过redis.conf定义ACL规则,在命令行设置重启redis后会没有,文件中配置
[root@redis-2 redis]# vim ./etc/redis.conf 
user jack on ~* &* +@all >123456
user tom on ~* &* +get +set >123456

# 通过外部文件定义ACL规则:
[root@redis-2 redis]# cat etc/users.acl
user jack on ~* &* +@all >123456
user tom on ~* &* +get +set >123456
user tangtang on ~* &* +get +set >123456
[root@redis-2 redis]# vim etc/redis.conf 
aclfile /apps/redis/etc/users.acl

在这里插入图片描述

六.掌握基于redis-dump实现redis单机数据的迁移

# 安装数据同步工具
gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL http://rvm.io/mpapis.asc | gpg2 --import -
curl -sSL http://rvm.io/pkuczynski.asc | gpg2 --import -
curl -L get.rvm.io | bash -s stable
#声明配置文件
source /etc/profile.d/rvm.sh
rvm requirements 
#安装ruby指定版本                
rvm install 2.7.6
#进入指定版本的ruby            
rvm use 2.7.6
#设置默认版本                  
rvm use 2.7.6 --default
ruby -v
#替换gem源,不建议用https
gem sources --add http://mirrors.tuna.tsinghua.edu.cn/rubygems/ --remove https://rubygems.org/
gem sources -l
#替换bundle源,不建议用https
bundle config mirror.https://rubygems.org http://mirrors.tuna.tsinghua.edu.cn/rubygems
# 升级gem
gem update --system
gem update bundler
gem install redis-dump 
redis-dump --help
# 源主机导出数据
[root@redis-2 ~]# redis-dump -a 123 -d 0 -u 172.18.10.136:6379 > /tmp/redis.json
[root@redis-2 ~]# cat /tmp/redis.json | redis-load -a 123 -u 172.18.10.135:6379
# 远程主机验证

在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值