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
事务可能遇到的问题:
- 执行exec之前出现错误:整个事务中断,不执行任何语句
- 执行exec之后出现错误:语法出错,执行语法错误之前的所有语句
3. Lua脚本
为什么用Lua脚本?
- 批量执行命令
- 原子性
- 操作集合的复用
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. 过期策略
- 立即过期:每一个key定时判断是否过期
- 惰性过期:访问判断是否过期
- 定期过期:定时随机判断过期
Redis结合了惰性过期和定期过期,通过 maxmemory 来设置最大内存空间。如果达到了内存上限,采用下面8种方式进行删除,默认noeviction。
volatile针对设置了ttl的key,allkeys是针对所有key
5. Redis持久化策略
RDB
Redis DataBase,记录快照
配置
# 文件路径
dir ./
# 文件名称
dbfilename dump.rdb
# 是否以LZF压缩rdb文件
rdbcompression yes
# 开启数据校验
rdbchecksum yes
触发方式
- 手动触发:save(阻塞Redis服务)、bgsave(开启子进程进行快照生成)
- 自动触发:关闭客服端(shutdown)
RDB特点
优势:紧凑,适合备份和灾难恢复;生成文件过程不影响主进程;大数据集恢复速度较快;
缺点:不能实时持久化,可能丢失数据;
AOF
Append Only File,记录日志
配置
# 文件路径
dir ./
# 开关(默认关闭)
appendonly no
# 文件名
Appendfilename “appendonly.aof”
# 刷盘策略
appendfsync no|always|everysec
no表示不执行fsync,由操作系统保证数据同步到磁盘
always表示每次写入都执行fsync,以保证数据同步到磁盘
everysec(默认,常用)表示每秒执行一次fsync,可能会导致丢失这1s数据
触发方式
- 手动触发:bgrewriteaof
- 自动触发:
auto-aof-rewrite-percentage 100:到达auto-aof-rewrite-min-size 100%后自动触发
auto-aof-rewrite-min-size 64mb:自动重写最小