- 开启事务(multi)
- 命令入队(写命令)
- 执行事务(exec)
测试多线程修改值,使用watch可以当做redis的乐观锁操作, 注意: watch指令在一次事务执行完毕后,即结束其生命周期 解释:watch money :监视money exec :执行之前,右边的一个新的线程修改了我们的值,这个时候就会导致事务失败 watch值发生变化则执行失败,执行失败还有办法挽救吗? 解决方法: UNWATCH :解锁 如果执行失败,则先解锁,再重新监控最新版本 三、Jedis(以下所有操作开始前请打开你的redis-server.exe) Jedis是Redis官方推荐的java连接开发工具 如何用Jedis连接Redis 1.新建项目project,选择Maven 找到Maven下的pom.xml 2. 导入maven依赖,这里给出下载依赖包的地址 ( https://mvnrepository.com/artifact/redis.clients/jedis/3.7.0 ) 将最下面方框的
找到IDEA右上角的按钮,设置“project”和“Modules”的版本,我这里是11,你们设置成你们默认的就好 打开Settings”-->“Bulid, Execution,Deployment”-->“Java Compiler”,Target bytecode version设为本地Java版本。 测试连接(新建class)
package com.kuang;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class TestPing {
public static void main(String[] args){
// new 一个Jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379);
// Jedis所有的命令就是之前学习的所有指令(变成了方法)
System.out.println(jedis.ping());
}
}
连接成功
测试:
package com.kuang;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class TestPing {
public static void main(String[] args){
// new 一个Jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379);
// Jedis所有的命令就是之前学习的所有指令(变成了方法)
System.out.println(jedis.ping());
System.out.println("清空数据库:"+jedis.flushDB());
System.out.println("判断某个键是否存在:"+jedis.exists("k1"));
System.out.println("新增键值对"+jedis.set("k1","v1"));
System.out.println("新增k2,v2键值对:"+jedis.get("k1"));
System.out.println("系统中所有的键如下:");
Set Stringkeys = jedis.keys("*");
System.out.println(Stringkeys);
System.out.println("删除键k2:"+jedis.del("k2"));
System.out.println("判断键k2是否存在:"+jedis.exists("k2"));
System.out.println("查看键 k1 所存储的数据类型:"+jedis.type("k1"));
System.out.println("随机返回 key 空间的一个:"+jedis.randomKey());
System.out.println("重命名 key :"+jedis.rename("k1","newk1"));
System.out.println("取出改后的 newk1 :"+jedis.get("newk1"));
System.out.println("按索引查询:"+jedis.select(0));
System.out.println("删除当前选择数据库中的所有键:"+jedis.flushDB());
System.out.println("返回当前数据库中 key 的数量:"+jedis.dbSize());
System.out.println("删除所有数据库中的所有 key :"+jedis.flushAll());
}
}
结果如下:
四、通过Jedis理解事务import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class TestTX {
public static void main(String[] args){
Jedis jedis = new Jedis("127.0.0.1",6379);
System.out.println(jedis.ping());
JSonObject jsonObject = new JSonObject();
jsonObject.put("hello","world");
jsonObject.put("name","vv");
// 开启事务
Transaction multi = jedis.multi();
String result = jsonObject.toJSonString();
try{
multi.set("user1",result);
multi.set("user2",result);
multi.exec(); // 执行事务
//int i = 1/0;
}catch (Exception e){
multi.discard(); // 放弃事务
e.printStackTrace();
}finally{
System.out.println(jedis.get("user1"));
System.out.println(jedis.get("user2"));
jedis.close();// 关闭连接
}
}
}
结果如下:添加成功



