一.Redis设置密码
1.临时修改
- CONFIG SET 命令可以动态地调整 Redis 服务器的配置而无须重启,重启后失效
CONFIG SET requirepass 123456
2.永久修改
- 修改配置文件 redis.widows.conf ,增加代码:
requirepass 123456
3.登录Redis
- 启动redis-cli.exe ,执行auth命令:
auth 123456
二.Redis中的事务
1.事务概念
1.1.什么是事务
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
1.2.事务的原理
当执行multi
命令将会开启事务,那么所有命令就会加入事务队列暂存,不会真正的直接执行,如果遇到exec
就会把队列中的命令依次执行-提交事务,需要注意的是即使有的命令执行失败了,也不会影响其他命令的执行结果-不回滚,但是如果遇到discard就会放弃执行队列中的命令-取消事务 , 如下:
2.操作事务
2.1.multi
- 标记一个事务块的开始。
multi #开启事务 set name zs #添加字符串值 set age 18 #添加数字值 incr name #name的值+1 incr age #age的值+1
2.2.exec
- 执行所有事务块内的命令。
exec #提交事务,开启 multi 后的所有命令将被执行,如果有命令失败了也不会回滚成功的命令依然成功 #incr name命令会执行失败因为字符串是不能+1的,incr age命令会执行成功,age的值是数字能+1 get name #返回zs get age #返回19
2.3.discard
- 取消事务,如果在开启multi后选择执行discard命令,将会 放弃执行事务块内的所有命令。
discard #取消事务,开启multi后的所有命令将取消执行 get name #会返回空值 get age #会返回空值
三.发布/订阅
1.基本概念
1.1.什么是发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。没订阅的接收者当然是接收不到消息的,(pub/sub)是一种广播模式,及会把消息发送给所有的订阅者
1.2.原理模拟图
消息接收者通过 SUBSCRIBE channel
命令订阅某个频道 , 消息发布者通过 PUBLISH channel message
向该频道发布消息,那么订阅了该频道的所有接收者就可以收到消息。
2.发布订阅实战
2.1.消息接收者
- 开启两个redis-cli 作为两个接受者,订阅同一个频道
SUBSCRIBE cctv #cctv作为订阅的频道,可以任意定义名字
2.2.消息发布者
- 开启一个redis-server 作为消息发送者,往 cctv 频道发布消息
PUBLISH cctv '我是消息,发往cctv频道,over'
观察redis-cli接受者应该能收到消息内容“我是消息,发往cctv频道,over”
四.Redis的持久化配置
1.Redis的持久化概念
1.1.什么是Redis持久化
因为Redis数据基于内存读写,为了防止Redis服务器关闭或者宕机造成数据丢失,我们通常需要对Redis最磁极化,即:把内从中的数据(命令)保存一份到磁盘做一个备份,当Redis服务关闭或者宕机,
在Redis服务器重启的时候会从磁盘重新加载备份的数据,不至于数据丢失。 Redis 提供了两种不同级别的持久化方式:RDB和AOF,可以通过修改redis.conf来进行配置.
开启持久配置后,对Redis进行写操作,在Redis安装目录将会看到持久文件:“appendonly.aof”和“ dump.rdb”。
1.2.Redis如何保保存数据
redis为了考虑效率,保存数据在内容中.并且考虑数据安全性,还做数据持久化,如果满足保存策略,就会把内存的数据保存到数据rdb文件,还来不及保存那部分数据存放到aof更新日志中。在加载时,把两个数据做一个并集。
1.3.Redis持久化原理图
- 保存持久化数据
- 启动Redis载入持久化数据
1.3.Redis持久化-RDB
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式
- 如何关闭 rdb 模式?修改配置文件注释如下内容
save "" # save 900 1 #至少在900秒的时间段内至少有一次改变存储同步一次 # save xxx # save 60 10000
1.4.Redis持久化-AOF
AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。
- 如何开启aof模式?修改配置文件如下内容
appendonly yes #yes 开启,no 关闭 # appendfsync always #每次有新命令时就执行一次fsync appendfsync everysec #每秒 fsync 一次 ,这里我们启用 everysec # appendfsync no #从不fsync(交给操作系统来处理,可能很久才执行一次fsync) #其它的参数请大家看redis.conf配置文件详解
2.Redis持久配置
2.1.配置文件
- 见:redis.windows.conf 或者 redis.conf ,Redis 版本不一样配置文件名字不一样
- bind # 指定的ip才能访问 - port #默认端口 - timeout #连接超时 - loglevel #日志的级别 - logfile #日志文件输出路径 - databases #数据库数量 - save 900 1 #RDB持久方式,900 秒有一个数据修改进行持久化 - appendonely #AOF持久方式
2.2.Redis持久化配置
根据业务情况修改配置文件中的持久化配置项目即可
2.3.数据备份与恢复
虽然配置了持久化Redis会进行自动数据备份,我们也可以通过SAVE
或者 BGSAVE
(后台备份)命令创建当前数据库的备份
- 数据备份执行如下命令
save #该命令将在 redis 安装目录中创建dump.rdb文件。 • 1
- 恢复数据,将dump.rdb) 移动到 redis 安装目录并启动服务即可。
- 在Linux上获取 redis 目录可以使用 CONFIG 命令如:
CONFIG GET dir #返回:"/usr/local/redis/bin"
五.Redis的淘汰策略
1.淘汰策略基本概念
1.1.为什么要淘汰
Redis的数据读写基于内存,Redis虽然快,但是内存成本还是比较高的,而且基于内存Redis不适合存储太大量的数据。Redis可以使用电脑物理最大内存,当然我们通常会通过设置maxmemory参数现在Redis内存的使用, 为了让有限的内存空间存储更多的有效数据,我们可以设置淘汰策略,让Redis自动淘汰那些老旧的,或者不怎么被使用的数据。
redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。
2.2.淘汰策略有哪些
- volatile-lru :从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
- allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
- allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
- no-enviction(驱逐):禁止驱逐数据
2.淘汰策略配置
2.1.最大内存配置
- 修改配置redis.window.conf,修改maxmemory,放开注释, 根据情况设置大小
maxmemory <bytes
2.2.淘汰策略配置
- 修改配置redis.window.conf ,修改maxmemory-policy ,放开注释,按情况修改策略
maxmemory-policy noeviction #noeviction 为默认的策略,根据情况修改