Version: Next

Jedis

使用Java操作Redis

Jedis是Redis官方推荐的Java连接开发工具,使用Java操作Redis的中间件

新建一个Maven项目

导入依赖

  • jedis
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
  • fastjson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>

编码测试

连接数据库

前置步骤:修改Redis配置文件

  1. 打开/usr/local/bin/myconfig下的redis配置文件redis.conf
nano redis.conf
  1. 将本地回环地址127.0.0.1用#注释掉
  2. protected-mode yes,更改为protected-mode no
  3. 保存退出,重启redis
redis-cli -p 6379
shutdown
exit
redis-server redis.conf
  1. 我的linux服务器配置了ssh非对称密钥加密方式登录,并且关闭了密码登录功能
  1. Jedis jedis = new Jedis(host, port)
  2. jedis所有方法就是所有redis命令
public class JedisTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("49.233.209.138", 6379);
// jedis包含Redis所有基本指令
System.out.println(jedis.ping());
}
}
PONG

操作命令

public static void main(String[] args) {
Jedis jedis = new Jedis("49.233.209.138", 6379);
// jedis包含Redis所有基本指令
System.out.println("清空数据:" + jedis.flushDB());
System.out.println("判断某个键是否存在" +
jedis.exists("username"));
System.out.println("新增<'username','bb'>的键值对" +
jedis.set("username", "bb"));
System.out.println("新增<'password','password'>的键值对" +
jedis.set("password", "password"));
System.out.println("系统中所有的键如下:");
Set<String> keys = jedis.keys("*");
System.out.println(keys);
System.out.println("删除键password:" + jedis.del("password"));
System.out.println("判断键password是否存在:" +
jedis.exists("password"));
System.out.println("查看键username所存储的值的类型" +
jedis.type("username"));
System.out.println("随机返回Key空间的一个" + jedis.randomKey());
System.out.println("重命名key" +
jedis.rename("username", "name"));
System.out.println("取出改后的name" + jedis.get("name"));
System.out.println("切换库:" + jedis.select(0));
System.out.println("删除当前选择数据库中的所有key" + jedis.flushDB());
System.out.println("返回当前数据库中key的数目" + jedis.dbSize());
System.out.println("删除所有数据库中的key" + jedis.flushAll());
}
清空数据:OK
判断某个键是否存在false
新增<'username','bb'>的键值对OK
新增<'password','password'>的键值对OK
系统中所有的键如下:
[password, username]
删除键password:1
判断键password是否存在:false
查看键username所存储的值的类型string
随机返回Key空间的一个username
重命名keyOK
取出改后的namebb
切换库:OK
删除当前选择数据库中的所有keyOK
返回当前数据库中key的数目0
删除所有数据库中的keyOK

事务

public void testTransaction() {
Jedis jedis = new Jedis("49.233.209.138", 6379);
Transaction multi = jedis.multi(); // 开启事务
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("hello", "world");
jsonObject.put("name", "bsx");
String jsonStr = jsonObject.toJSONString();
multi.set("user1", jsonStr);
multi.set("user2", jsonStr);
multi.exec();
} catch (Exception e) {
multi.discard(); // 失败则放弃事务
e.printStackTrace();
} finally {
System.out.println(jedis.get("user1"));
System.out.println(jedis.get("user2"));
jedis.close();
}
}
{"name":"bsx","hello":"world"}
{"name":"bsx","hello":"world"}

人为制造一个异常

public void testTransaction() {
Jedis jedis = new Jedis("49.233.209.138", 6379);
jedis.flushDB();
Transaction multi = jedis.multi(); // 开启事务
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("hello", "world");
jsonObject.put("name", "bsx");
String jsonStr = jsonObject.toJSONString();
multi.set("user1", jsonStr);
multi.set("user2", jsonStr);
int i = 1 / 0;
multi.exec();
} catch (Exception e) {
multi.discard(); // 失败则放弃事务
e.printStackTrace();
} finally {
System.out.println(jedis.get("user1"));
System.out.println(jedis.get("user2"));
jedis.close();
}
}
java.lang.ArithmeticException: / by zero
at com.bsx.JedisTest.testTransaction(JedisTest.java:66)
...
null
null

断开连接

jedis.close();