127.0.0.1:6379> multi //开始事务 OK 127.0.0.1:6379> sadd tt 1 //业务操作 QUEUED 127.0.0.1:6379> DISCARD //停止事务 OK 127.0.0.1:6379> exec //提交事务 (error) ERR EXEC without MULTI //报不存在事务异常 127.0.0.1:6379> get tt //获取不到对象 (nil) 127.0.0.1:6379>
127.0.0.1:6379> multi //开始事务 OK 127.0.0.1:6379> set aa 123 //业务操作 QUEUED 127.0.0.1:6379> sett bb 124 //命令错误 (error) ERR unknown command 'sett' 127.0.0.1:6379> exec (error) EXECABORT Transaction discarded because of previous errors. //提交事务异常 127.0.0.1:6379> get aa //查询不到数据 (nil) 127.0.0.1:6379>
127.0.0.1:6379> multi OK 127.0.0.1:6379> set t 1 //业务操作1 QUEUED 127.0.0.1:6379> sadd t 1 //业务操作2 QUEUED 127.0.0.1:6379> set t 2 //业务操作3 QUEUED 127.0.0.1:6379> exec 1) OK 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value //类型异常 3) OK 127.0.0.1:6379> get t //可以获取到t "2" 127.0.0.1:6379>
move key db //reids有16个库, 编号为0-15 set name DK; move name 5 //迁移到第6个库 elect 5 ;//数据库切换到第6个库, get name 可以取到james1
set name james; dump name; // 得到"\x00\x05james\b\x001\x82;f\"DhJ"
restore name 0 "\x00\x05james\b\x001\x82;f\"DhJ" //0代表没有过期时间 get name //返回james
192.168.42.111:6379> migrate 192.168.42.112 6379 name 0 1000 copy
package com.james.cache.jedis; import redis.clients.jedis.Connection; import redis.clients.jedis.Protocol; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * @Auther: DK * @Date: 2020/10/11 23:17 * @Description: */ public class RedisKeyMove { public static void main(String[] args) throws IOException { //1.使用Connection连接Redis try (Connection connection = new Connection("10.1.253.188", 6379)) { // 2. 通过反射获取Connection中的sendCommand方法(protected Connection sendCommand(Command cmd, String... args))。 Method method = Connection.class.getDeclaredMethod("sendCommand", Protocol.Command.class, String[].class); method.setAccessible(true); // 设置可以访问private和protected方法 // 3. 调用connection的sendCommand方法,第二个参数为执行的命令(比如set,get,client等),第三个参数为命令的参数。 // 3.1 该命令最终对应redis中为: set test-key test-value method.invoke(connection, Protocol.Command.MIGRATE, new String[] {"10.1.253.69", "6379", "name", "0", "1000", "copy"}); // 4.获取Redis的命令执行结果 System.out.println(connection.getBulkReply()); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } }
mset n1 1 n2 2 n3 3 n4 4 n5 5 n6 6 n7 7 n8 8 n9 9 n10 10 n11 11 n12 12 n13 13
scan 0 match n* count 5 匹配以n开头的键,最大是取5条,第一次scan 0开始