Redis发布订阅
- 实现发布订阅机制(PUBLISH/SUBSCRIBE/UNSUBSCRIBE/PSUBSCRIBE/PUNSUBSCIBE)
- SUBSCRIBE chat #客户端1 创建了订阅频道名
- PUBLISH chat "Redis PUBLISH test" # 新开启个 redis 客户端,然后在同一个频道 runoobChat 发布两次消息,订阅者就能接收到消息
Redis事务
- 事务以 muiti命令开始,以 exec命令结束
- watch 命令主要用于防止竞态条件,保证一个事物执行前某些键值不被修改
- muiti
- sadd "user:1" 2
- exec
- discard #取消事务
持久化
- redis 提供两种持久化的方式,一种是 RDB 方式,一种是 AOF 方式
- RDB 的方式是定时将内存中的数据存储到磁盘
- 配置指定规则自动同步,比如 save 300 10, 表示每 300 内至少有 10 条数据被修改则进行快照
- 用户执行 SAVE 或者 BGSAVE 命令,SAVE 命令同步执行会阻塞其它客户端的请求,BGSAVE 异步同步数据
- 执行 FLUSHALL 命令
- AOF 的方式是每次将更新数据的命令记录到磁盘
- 通过参数 appendonly 开启 AOF 数据备份
- 通过参数 appendfsync 设置磁盘缓存刷新机制
- 因为每条更新数据的命令都会被记录到磁盘,所以磁盘数据会越来越大,因此 redis 提供了重写 AOF 的功能
- 通过 auto-aof-rewrite-percentage 参数和 auto-aof-rewrite-min-size 参数可以设置自动重写 AOF 文件策略
redis常见问题
- 缓存穿透:就是客户持续向服务器发起对不存在服务器中数据的请求。客户先在Redis中查询,查询不到后去数据库中查询。
- 缓存雪崩:热门的数据,突然失效,大量请求到服务器数据库中,比如同一时间失效
Redis 脚本
- Redis 脚本使用 Lua 解释器来执行脚本
- EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
- script: 参数是一段 Lua 5.1 脚本程序。脚本不必(也不应该)定义为一个 Lua 函数
Redis 性能测试
redis-benchmark -n 10000 -q