Redis高级特性

1. 发布订阅模式

在这里插入图片描述

发布订阅基本命令

# 订阅频道:可以一次订阅多个
	subscribe channel-1 channel-2 channel-3
# 按规则(pattern)订阅频道psubscribe,如:
	psubscribe *xxx
# 向指定频道发布消息
	publish channel-1 “helloworld”
# 取消订阅
	unsubscribe channel-1

2. Transactions

# 开启事务
	multi
# 执行事务
	exec
# 取消事务
	discard
# 监听key,如果被监视的key在exec之前被修改,事务会取消
	watch

事务可能遇到的问题:

  1. 执行exec之前出现错误:整个事务中断,不执行任何语句
  2. 执行exec之后出现错误:语法出错,执行语法错误之前的所有语句

3. Lua脚本

为什么用Lua脚本?

  1. 批量执行命令
  2. 原子性
  3. 操作集合的复用

Redis中执行Lua脚本
语法:

Redis> eval lua-script key-num [key1 key2 key3 …] [value1 value2 value3 …]

  • eval:代表执行Lua语言的命令。
  • lua-script:代表lua语言脚本内容。
  • key-num:表示参数中有多少个key,需要注意的是Redis中key是从1开始的,如果没有key的参数,辣么写0。
  • [key1 key2 key3 …]:是key作为参数传递给Lua语言,可以不填,但需要和key-num的个数一致。
  • [value1 value2 value3 …]:传递给Lua语言中的参数值,可以不填,与[key1 key2 key3 …]对应。

在Lua脚本中执行Redis命令

redis.call(command, key [param1, param2 …])

  • command 是命令,包括get、set、del等。
  • key是被操作的键。
  • [param1, param2 …]:代表给key的参数。如:redis.call(‘set’, ‘str1’, ‘string1’)

调用Lua脚本

redis-cli --eval 脚本名称 参数个数 参数1 参数2 …

4. 过期策略

  1. 立即过期:每一个key定时判断是否过期
  2. 惰性过期:访问判断是否过期
  3. 定期过期:定时随机判断过期

Redis结合了惰性过期和定期过期,通过 maxmemory 来设置最大内存空间。如果达到了内存上限,采用下面8种方式进行删除,默认noeviction。
在这里插入图片描述
volatile针对设置了ttl的key,allkeys是针对所有key

5. Redis持久化策略

RDB

Redis DataBase,记录快照
配置

# 文件路径
	dir ./
# 文件名称
	dbfilename dump.rdb
# 是否以LZF压缩rdb文件
	rdbcompression yes
# 开启数据校验
	rdbchecksum yes

触发方式

  1. 手动触发:save(阻塞Redis服务)、bgsave(开启子进程进行快照生成)
  2. 自动触发:关闭客服端(shutdown)

RDB特点
优势:紧凑,适合备份和灾难恢复;生成文件过程不影响主进程;大数据集恢复速度较快;
缺点:不能实时持久化,可能丢失数据;

AOF

Append Only File,记录日志

配置

# 文件路径
	dir ./
# 开关(默认关闭)
	appendonly no
# 文件名
	Appendfilename “appendonly.aof”
# 刷盘策略
	appendfsync no|always|everysec
		no表示不执行fsync,由操作系统保证数据同步到磁盘
		always表示每次写入都执行fsync,以保证数据同步到磁盘
		everysec(默认,常用)表示每秒执行一次fsync,可能会导致丢失这1s数据

触发方式

  1. 手动触发:bgrewriteaof
  2. 自动触发:
    auto-aof-rewrite-percentage 100:到达auto-aof-rewrite-min-size 100%后自动触发
    auto-aof-rewrite-min-size 64mb:自动重写最小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值