• 0x00 Redis 命令
  • 1) 内置命令
  • 0x01 使用场景
  • 0x02 数据持久化
  • 1.RDB 方式

  • 2.AOF 方式

  • 0x03 功能使用配置

  • 密码认证

0x00 Redis 命令

复习Redis的五种数据类型:​​String 、List、Hash、Set、Sorted-set​

1) 内置命令
# [保存数据到磁盘]
save #RDB会阻塞redis服务器,直到完成持久化
bgsave #RDB会fork一个子进程,由子进程进行持久化。
bgrewriteaof #AOF手动重写

0x01 使用场景

描述:前面我们简单的了解了一下redis使用操作,这一部分我们主要来说说Redis的应用场景;

(1) 取最新N个数据操作
描述:比如一篇文章的评论只显示最新的5000千条评论的ID放在Redis的List集合之中,并将超出集合部分从数据库中获取;

#向List集合中插入值
LPUSH latest.comments ID
#保存最近5000千个ID值
LTRIM latest.comments 0 5000


(2) 排行榜应用TOP N操作
描述:此处需要按照次数进行排序,所以此时我们需要采用sorted set命令,将您需要排序的key名称以及其具体数据设置成相应的value,每次只需要执行ZADD命令即可;

(3) 需要精准设定过期时间应用
描述:可以将上面说到的sorted set的score值设置成为过期时间的时间戳,就可以通过过期时间排序以及定时清除过期数据;

(4) 计算器应用
描述:可以统计在线人数由于Redis命令是原子性的,您可以轻松利用INCR与DECR命令来构建计算器系统

(5) Uniq操作获取某段时间所有数据排重置
描述:将输入放入set集合即可,所有的数据将会自动排重;

(6) 实时系统,反垃圾系统

(7) Pub/Sub构建实时消息系统

(8) 构建队列系统
描述:可以使用list可以构建队列,使用sorted set 甚至可以构建有优先级的队列系统;


0x02 数据持久化

描述:Redis是将数据存储在内存之中所以其读写效率非常高,但是往往事物都不是那么美好,当由于某些不可抗力导致机器宕机、redis服务停止此时您在内存中的数据将完全丢失;
为了使Redis在重启后仍能保证数据不丢失我们就需要对其进行设置持久化存储,使其将内存的数据通过某种方式存入磁盘中,当Redis服务端重启后便会从该磁盘中进行读取数据进而恢复Redis中的数据;

Redis支持两种持久化方式:

  • (1) RDB 持久化(默认支持):该机制是指在指定的时间间隔内将内存中数据集写入到磁盘;
  • (2) AOF 持久化:该机制将以日志的形式记录服务器所处理的每一个写操作,同时在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据完整;
  • (3) 无持久化: 将Redis作为一个临时缓存,并将数据存放到​​memcached​​之中;

TIPS:

  • Redis可以同时使用RDB和AOF方式来保证,重启后Redis服务器中的数据完整;
1.RDB 方式

优势


  1. 该方式会将内存中的数据保存一个文件中默认dump.rdb,这对于文件备份而言是非常完美的,通过备份策略来保证数据的完整性,同时可以通过定时任务打包该数据文件就可以转移到其它存储介质;

  1. 性能最大化,Redis的服务进程在做持久化的时候,它将fork出子线程然后由它完成持久化工作,它可以极大的避免服务进程执行IO操作了;

  1. 相比较于AOF机制下如果数据集很大,RDB的启动效率就会更高

劣势


  1. 它保证了数据的持久化但是没法一定保证数据的高可用性(即最大限度的避免数据丢失),比如当在持久化数据之前出现宕机,那么此时没有来得及写入的数据将会被丢失;

  1. 由于RDB是通过Fork子进程来协助完成数据持久化工作的,因此当数据集较大的时候会导致整个服务器停止服务几百毫秒到1秒钟之间(​​可通过集群方式解决​​);

配置说明:
$vim redis.conf

cat > redis.conf <<'EOF'
#密码认证
requirepass WeiyiGeek.top

#默认开启如果需要关闭把save ""取消注释即可
#save ""
#save 3600 1 #每3600秒至少有一个Key发生变化时候则dump内存快照
save 900 1 #900秒(15分钟)至少有1条key变化,其他同理
save 300 10
save 60 10000 #每60描述至少有1000个key发生变化时候则dump内存快照

#RDB 生成的文件名称
dbfilename dump.rdb
#保存存放路径
dir ./

#备份进程出错时,主进程停止接受写入操作,默认yes
stop-writes-on-bgsave-error yes
#是否压缩,会占用部分cpu资源,默认yes
rdbcompression yes
#RDB自动触发策略是否启用,默认为yes
rdb-save-incremental-fsync yes
EOF

实际案例:

#1.如上面配置所示,按配置情况触发
比如在Redis服务终止的时候执行

#2.手动保存数据连接redis后使用命令save、bgsave触发
127.0.0.1:6379> SAVE #save:会阻塞redis服务器,直到完成持久化
OK
127.0.0.1:6379> quit
root@dfbf8c0c0625:/data# ls
dump.rdb
bgsave:会fork一个子进程,由子进程进行持久化。


2.AOF 方式

优势


  1. 该机制可以带来更高的数据安全性,即数据持久化; 常规三种同步策略即每秒同步(​​异步完成效率高​​)、每修改同步(​​同步插入修改删除操作效率最低​​)和不同步;

  1. 由于该机制对日志文件的写入操作采用的是append模式,即使过程中出现宕机也不会破坏日志文件中已经存在的内容,如果数据不完整在Redis下次启动之前可以通过redis-check-aof解决数据一致性问题;

  1. 如果日志文件体积过大可以启动rewrite机制,即redis以append模式不断的将修改数据写到老的磁盘文件中,同时创建新文件记录期间有哪些修改命令执行,此项极大的保证数据的安全性;

  1. AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作(​​可通过此文件完成数据的重构​​)

劣势


  1. 对于相同数量的数据集而言AOF文件大于RDB文件;

  1. 根据同步策略的不同,AOF在运行效率上往往会慢于RDB,总的来说每秒同步策略的效率还是比较高的

配置说明:

cat > redis.conf <<'EOF'
#是否开启AOF,默认为否
appendonly no

#AOF文件名字及路径,若RDB路径已设置这里可不设置
appendfilename "appendonly.aof"
dir ./

#AOF的3种模式,no(使用系统缓存处理,快)、always(记录全部操作,慢但比较安全)、everysec(每秒同步,折中方案,默认使用)
appendfsync everysec

#重写期间是否同步数据,默认为no
no-appendfsync-on-rewrite no

#自动触发重写的配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

#AOF重写策略是否启用,默认为yes
aof-rewrite-incremental-fsync yes

#加载AOF时如果报错则会继续但写入log,如果为no则不会继续
aof-load-truncated yes

#Redis5.0有的功能AOF重写及恢复可以使用RDB文件及AOF文件,速度更快,默认yes
aof-use-rdb-preamble yes
EOF

实际案例AOF重写:
因为AOF为记录每次的操作,会导致实际记录不多但文件过大,所以需要做重写操作

  • 1)AOF自动重写:按配置文件条件自动触发重写
  • 2)AOF手动重写:连接redis使用命令bgrewriteaof,进行手动重写
127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started

0x03 功能使用配置

描述:小小功能,单个配置描述

密码认证

描述:Redis配置密码认证的几种方式总结:

#1.通过配置文件进行配置yum方式安装的redis配置文件通常在,修改后需要重启Redis
vim /etc/redis.conf
requirepass myRedis # myRedis 即认证密码

#2.通过命令行进行配置,此种方式的优点无需重启Redis
redis 127.0.0.1:6379[1]> config set requirepass my_redis
OK
redis 127.0.0.1:6379[1]> config get requirepass
1) "requirepass"
2) "my_redis"

#3.若master配置了密码则slave也要配置相应的密码参数否则无法进行正常复制的。
#slave中配置文件内找到如下行,移除注释,修改密码即可
masterauth masterpw

使用密码验证登陆Redis服务器:

#方式1:极其不推荐密码明文记录到系统命令执行历史中
redis-cli -h 127.0.0.1 -p 6379 -a myRedis

#方式2:交互式进行配置
redis-cli -h 127.0.0.1 -p 6379
redis 127.0.0.1:6379> auth myRedis
OK