Jedis
- 什么是jedis?
Redis官方网站上列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。相当于Java操作Redis的中间件。在企业中用的最多的就是Jedis。Jedis提供了完整Redis命令,而Redisson有更多分布式的容器实现
- 导入依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
- 单例连接测试
public static void main(String[] args) {
// 1.new Jedis 对象填写ip和端口号
Jedis jedis = new Jedis("127.0.0.1",6379);
// 如果设置了密码,需要认证
//jedis.auth("password");
// 2. 测试是否可以ping通
System.out.println(jedis.ping());
}
输出:
- JedisPool连接池测试
JedisPool网络连接池是一个线程安全的,而Jedis单例进行连接是线程不安全的,可以在JedisPool连接池中创建Jedis实例,然后从连接池中取Jedis实例进行操作,会解决线程不安全的问题提高效率。
public class JedisPoolUtil {
private static JedisPool jedisPool = null;
static {
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(200);
config.setTestOnBorrow(true);
config.setMaxWaitMillis(10000);
//jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000, “password”);
jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Jedis getJedis() {
if (jedisPool != null) {
Jedis jedis = jedisPool.getResource();
return jedis;
}
return null;
}
public static void close(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
}
- 测试连接池
public static void main(String[] args) {
//从连接池中获取jedis实例
Jedis jedis = JedisPoolUtil.getJedis();
jedis.set("k1", "v1");
// set 多个key 和 value
jedis.mset("k2", "v2", "k3", "v3", "k4", "v4");
System.out.println(jedis.get("k3"));
System.out.println(jedis.keys("*"));
// delete key
jedis.del("k2");
System.out.println(jedis.keys("*"));
JedisPoolUtil.close(jedis);
}
- 事务
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.flushDB();
JSONObject jsonObject = new JSONObject();
jsonObject.put("hello","world");
jsonObject.put("name","xuqingdeng");
//开启事务
Transaction multi = jedis.multi();
String result = jsonObject.toJSONString();
// jedis.watch(result); // 监控
try {
multi.set("user1",result);
multi.set("user2",result);
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();// 关闭连接
}
}