三.Redis极简入门-Redis高级特性

x33g5p2x  于2021-12-19 转载在 其他  
字(3.6k)|赞(0)|评价(0)|浏览(409)

一.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文件。
  • 恢复数据,将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 为默认的策略,根据情况修改

相关文章