文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3 高级篇
1. 数据备份和恢复
save # 备份,保存内存到文件 dump.rdb
bgsave # 后台备份
config get dir # 恢复,获取配置目录,将 dump.rdb 移到此即可
2. redis 分区
分区是分割数据到多个 Redis 实例的处理过程,因此每个实例只保存 key 的一个子集。
常见分区有:范围、HASH
3. 性能测试
# 启动 10000 个请求测试
redis-benchmark -n 10000 -q
4. Redis 各种锁的实现
以下锁都要设置 KEY 过期时间。如果请求执行因为某些原因意外退出了,导致创建了锁但是没有删除锁,那么这个锁将一直存在,以至于以后缓存再也得不到更新。于是乎我们需要给锁加一个过期时间以防不测。
redis 每个命令都是原子操作,如果是 2 个命令要原子操作,那么要用 LUA 脚本 封装成原子操作。
法 1: INCR
原理:key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作进行加一。
然后其它用户在执行 INCR 操作进行加一时,如果返回的数大于 1 ,说明这个锁正在被使用当中。
$redis->incr($key);
$redis->expire($key, $ttl); //设置生成时间为 1 秒
法 2: SETNX
原理:如果 key 不存在,将 key 设置为 value。如果 key 已存在,则 SETNX
不做任何动作
$redis->setNX($key, $value);
$redis->expire($key, $ttl);
法 3:SET
原理:SET 命令本身已经从版本 2.6.12 开始包含了设置过期时间的功能。这个命令已经是原子操作了。
$redis->set($key, $value, array('nx', 'ex' => $ttl)); #ex 表示秒
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论