返回介绍

3 高级篇

发布于 2024-10-03 10:16:41 字数 1313 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文