redis数据库迁移只需一条命令

本文介绍了一种使用Redis自带的migrate命令进行数据库迁移的方法,并提供了具体的命令实例。该方法适用于两台可以互通的机器间迁移Redis数据库。

工作中有迁移redis数据库的需求,特此记录

两台机器只要可以互通就可以实现迁移。本人是用两台阿里云机器测试,亲测可用

主要是利用redis自带的命令 migrate ,该方法有缺陷,具体可以自行搜索。

命令:

redis-cli -n 本机库下标 keys '*' | xargs -I '{}' redis-cli -n 本机库下标 migrate 目标IP 目标端口 '' 目标库下标 10000 COPY auth 密码 keys '{}'

其中auth是需要远端库的redis密码,如果没有密码直接将auth去掉即可。

示例:

redis-cli -n 0 keys '*' | xargs -I '{}' redis-cli -n 0 migrate 127.0.0.1 6379 '' 0 10000 COPY auth 123456 keys '{}'
### Redis 数据库 CRUD 操作教程 #### 一、概述 Redis 是一种高性能的键值存储系统,支持多种数据结构的操作。CRUD(Create, Read, Update, Delete)是数据库操作的基础功能,在 Redis 中可以通过不同的命令完成这些操作。 --- #### 二、创建(Create) 在 Redis 中,“创建”通常指的是向某个键设置一个值。可以使用 `SET` 命令来实现这一操作。如果该键已经存在,则会覆盖其原有值。 ```java @PostMapping("/set") public void set(@RequestBody Student student) { redisTemplate.opsForValue().set("student", student); } ``` 上述代码展示了如何通过 Spring Boot 的 `RedisTemplate` 类将对象保存到 Redis 中[^1]。对于简单的字符串类型的键值对,可以直接使用以下命令: ```bash SET key value ``` 例如: ```bash SET user:name "Alice" GET user:name # 输出: Alice ``` --- #### 三、读取(Read) “读取”是指从 Redis 获取已有的键对应的值。可以使用 `GET` 命令获取单个键的值,或者使用其他更复杂的查询方式。 ```java @GetMapping("/get/{key}") public Object get(@PathVariable String key) { return redisTemplate.opsForValue().get(key); } ``` 以上代码片段展示了一个基于 RESTful API 的 GET 请求,用于从 Redis 中检索指定键的数据[^1]。如果是直接通过 CLI 工具访问 Redis,则可执行如下命令: ```bash GET key ``` 例如: ```bash GET user:name # 输出: Alice ``` --- #### 四、更新(Update) “更新”意味着修改现有键的值。这与 “创建”的区别在于,只有当键已经存在于 Redis 中时才会生效。可以继续使用 `SET` 或者专门针对哈希表字段的 `HSET` 来更新特定部分的内容。 假设我们有一个学生记录并希望更改分数: ```java @PutMapping("/update/score") public void updateScore(@RequestParam Integer id, @RequestParam Double newScore) { Student existingStudent = (Student) redisTemplate.opsForValue().get("student:" + id); if (existingStudent != null) { existingStudent.setScore(newScore); redisTemplate.opsForValue().set("student:" + id, existingStudent); } } ``` 这段 Java 代码说明了如何先取出旧的学生信息再对其进行更新后再重新写回 Redis^。而在纯命令行模式下也可以这样做: ```bash SET key newValue ``` 比如: ```bash SET user:age 28 GET user:age # 返回: 28 ``` --- #### 五、删除(Delete) 最后一步即为移除不需要的信息。“删除”可通过 `DEL` 命令轻松达成目的;它接受多个参数从而允许一次性清除若干条目。 ```java @DeleteMapping("/delete/{id}") public void deleteById(@PathVariable Integer id){ redisTemplate.delete("student:"+id.toString()); } ``` 这里给出了利用编程接口的方式去销毁某一条具体学生的实例[^1]^。而手动清理则只需输入类似下面这样的语句即可: ```bash DEL key [key ...] ``` 例子: ```bash DEL user:name user:age EXISTS user:name # 返回: 0 (表示不存在) ``` --- #### 六、高级主题 - 切换数据库 虽然默认情况下 Redis 使用的是第零号数据库 (`db 0`) ,但是可以根据需求灵活调整当前工作的 DB 编号 。这是由内部函数负责处理逻辑决定哪个实际物理内存区域被映射成虚拟子空间供外部调用程序所见 : ```c int selectDb(client *c, int id) { /* 校验id */ if (id < 0 || id >= server.dbnum) return C_ERR; c->db = &server.db[id]; return C_OK; } ``` 因此可以在客户端发出请求之前改变上下文环境以便于隔离不同业务场景下的缓存管理策略[^3]^. --- #### 总结 综上所述 , 对应关系型 SQL 查询中的 INSERT INTO / SELECT FROM / UPDATE SET WHERE clause/DELETE FROM table_name statements 分别对应到了 NoSQL 解决方案里头的核心动作组合 . 即使两者语法风格迥异但仍保持高度一致性的设计理念使得开发者能够快速掌握跨平台迁移技巧 . ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值